飞行游戏 AI 算法?

大家好,

我正在设计一个业余项目。我打算开发一个 3D 空战游戏(灵感来自 HAWX)。但我很好奇敌方飞机的 AI 是如何工作的? 我猜,它们不像 FPS 游戏那样沿着路径移动(在图上寻路)。我可以使用什么样的算法来控制敌方飞机的移动? 有没有我可以使用的 AI 库?

注意:我使用 Irrlicht 引擎和 C++ 作为我的开发环境。


回答:

一个寻找拦截点的简单答案…

在任何时候,都做一个直线假设。你和你的目标以固定速度沿直线运动。因此,你可以从目标的位置和运动中减去你的位置和运动,然后处理目标的相对位置和速度。

一个有趣的时间点是你的目标在其路径上距离你最近的时候 – 该线上最近的点。 如果我没记错的话,可以用向量点积来计算…

      P . Vt = - -----      V . V

假设我算对了,在这一点上,目标的路径与从你到目标的线成直角(与它的运动和你的运动之间的角度不同)。你可以使用三角学得到一个等价的答案(点积与余弦相关),我甚至曾经(在不了解更好的方法的情况下)使用联立方程的方法算出来过,为一个我开始但从未完成的 2D 游戏(想想 oids/thrust 风格的旋转和推进飞船,带有重力)。

由此,你可以确定最近点的位置和距离。

针对当前速度和方向的微小变化计算这个时间,你可以迭代地优化以实现近未来的拦截。当然,最小化 t 会带来 t 可能越来越过去的可能性 – 逃跑! 也许最小化 t 的平方会更好,但这样你就会遇到其他复杂情况 – 如果敌人就在你身后,你真的想减速吗?

无论如何,这可能足以制作一个简单的制导导弹,但在空战中几乎毫无用处。我对空战的印象更像是某种模拟实时象棋,你大部分时间都看不到棋盘的大部分。你显然不能使用极小化极大算法,所以你需要一个比操纵杆和其他控制设置更高层次的移动模型。在开始设计 AI 引擎之前,需要对基于人类经验的战术进行大量研究。

对于利用地形掩护,你可能可以做一些更简单的事情。基于图的寻路器可能与规划通过山谷的路线有关。 在 2D 中完成大部分寻路工作,并相对平滑地调整地图的 “谎言” 以确保你不会直接飞入悬崖。

可能你需要一个由不同类型目标和策略组成的系统,以及一种对它们进行加权和选择的方法。 离你的目标很远时,你更有可能尝试保持隐蔽,而不是当你靠近时。 当你自己的尾部有导弹时,它将优先于你可能采取的任何进攻行动,等等。

顺便说一句 – 以上都不是来自游戏开发的真实经验(我当然也从来没有当过任何类型的飞行员),所以将其视为可能不会实现的模糊建议。并且要小心 – 我的那个 2D 游戏未能完成的一个原因是,尝试编写 AI 代码一开始是如此有趣,后来又是如此令人沮丧 – 当你对 AI 的最佳尝试能够击败你的唯一方法是拥有数倍于你的飞船和无限的弹药供应时,这真是令人恼火。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注