0

所以我的任务是在暑假为大学制作一款 2D 自上而下的赛车游戏,我一直害怕做人工智能,但现在是时候了。我在谷歌上搜索了许多不同的方法来尝试找到一个问同样问题的人,但似乎每个人都使用 Unity 而不是 Monogame。

所以我有一辆“敌人”汽车,它可以加速(如缓慢加速到最高速度)、减速和左右转向。我已经让玩家驾驶的实际汽车运行良好,但是当玩家不与任何人比赛时,游戏很无聊。我所需要的只是一个非常基本的人工智能,它会沿着路线走,如果它被撞到或发生什么事情,它会重新调整。我什至不知道从哪里开始,请帮助!如果您需要更多详细信息,请告诉我。

4

2 回答 2

1

我可能误解了您的问题,但您似乎并没有在您的敌车中寻找 AI 功能......敲门或发生什么事。”。人工智能通常意味着学习,但您似乎不需要汽车从过去的错误/“经验”中学习。听起来您可以使用寻路算法来解决您的问题,因为您不需要汽车从以前与其他汽车、领域等的交互中实际学习。您可以研究的一个超级流行的算法是 A*。您可以将游戏设置为具有“提升”权重低于常见“道路”的边的图形。

AStar 用伪代码解释:https ://en.wikipedia.org/wiki/A*_search_algorithm

很棒的可视化工具:https ://qiao.github.io/PathFinding.js/visual/

加速/减速

至于加速/减速,可以是单独的逻辑,例如决定是否加速的随机数。

如果它被撞到或发生了什么事

您可以在汽车被撞时重新计算 A*,以确保您的汽车获得新的最快路径以重新回到正轨。实际的碰撞逻辑取决于您(不是 A* 算法的一部分)。

请注意,如果您计划的不仅仅是一条直线路径,汽车可以在其中转向(意味着没有疯狂的弯道或转弯),A* 不应该与自然算法有太大的变化。如果您计划支持这种轨道,您可能需要研究稍微不同的算法,因为您需要跟踪汽车的旋转角度。

于 2020-08-28T06:58:52.177 回答
0

当然,您需要实现什么取决于您的 AI 需要有多复杂。如果它需要做的只是重新调整它的转向并监控它的速度,那么一辆基本的人工智能汽车可以在给定的时间步...

  1. 加速,如果不是最高速度
  2. 如果从增压中冷却下来则减速
  3. 远离赛道边界
  4. 决定是否提升

(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)可以通过将轨迹投影成一条线并找到下一个轨道边界(即下一个转弯)之前的距离。如果到轨迹交叉点的距离很大,可能是时候提升了。

于 2020-08-27T16:59:45.823 回答