问题描述
因此,我受命在暑假期间为大学制作2D自上而下的2D赛车游戏,我一直不敢做AI,但这是时候了。我用谷歌搜索同一事物的许多不同方式,只是试图找到一个问相同问题的人,但似乎每个人都在Unity上使用Unity。
因此,我有一辆“敌人”汽车,可以加速(从慢速到最高速度),减速并左右转向。我有玩家驾驶的实际赛车可以正常工作,但是当玩家不与任何人比赛时,游戏很无聊。我所需要的只是一个非常基本的AI,它将沿着路线行走,并在遇到敲门或发生任何事情时重新调整。我什至不知道从哪里开始,请帮助 !!!如果您需要更多详细信息,请告诉我。
解决方法
我可能会误解您的问题,但是似乎您并没有在寻找敌方汽车的AI功能...。“我所需要的只是一个非常基本的AI,它将沿着路线前进并重新调整如果它被敲击或发生什么事情。”。人工智能通常意味着学习,但似乎没有什么需要您的汽车从过去的错误/“经验”中学习的。听起来您可以使用寻路算法来解决问题,因为您并不需要实际从与其他汽车,领域等的先前交互中实际学习到汽车。您可以研究的超级流行算法是A *。您可以将游戏设置为图形,其边缘的权重比普通的“道路”的权重低。障碍物或寻找路径的等效术语-墙壁可以表示为高重量的边缘,这会导致汽车自动避开它们,因为A *会找到到达某个点的最快路径。
使用伪代码https://en.wikipedia.org/wiki/A*_search_algorithm
的AStar说明出色的可视化工具:https://qiao.github.io/PathFinding.js/visual/
加速/减速
关于加速/减速,可以是独立的逻辑,例如随机数决定是否加速。
如果它被敲击或发生了什么事
您可以在撞车时重新计算A *,以确保您的车获得新的最快路线以恢复原路。实际的碰撞逻辑由您决定(不是A *算法的一部分)。
请注意,如果您计划不只是使汽车可以转向的直线路径(这意味着没有疯狂的转弯或转弯),则A *与自然算法的偏差不应太大。如果您打算支持这种轨道,则可能需要研究略有不同的算法,因为您将需要跟踪汽车的旋转角度。
,您需要实现的内容取决于AI的复杂程度。如果需要做的只是重新调整方向盘并监控其速度,那么一辆基本的AI车就可以在给定的时间步...
- 不以最快的速度加速
- 如果从加速中冷却下来,则减速
- 远离轨道边界
- 决定是否提高
(1)和(2)很容易在给定的时间间隔内实现。像if(speed < maxSpeed) { accel(); } else if(speed > maxSpeed) { decel(); }
这样的地方,存在double maxBoostSpeed
来限制加速时的速度。
(3)和(4)可以通过使用[ x + speed*Math.cos(angle),y + speed * Math.sin(angle) ]
之类的东西在汽车前面绘制轨迹来实现。然后(3)可以通过转向轨道的中心来实现,并且(4)可以是将轨迹投影到一条线中并找到下一个轨道边界又称下一弯之前的距离。如果到轨迹交点的距离较大,则可能是时候提高了。