这是背景... 在空闲时间,我正在设计一款名为 Staker 的炮兵 war 游戏(受旧 BASIC 游戏 Tank Wars 和 Scorched Earth 的启发),我正在 MATLAB 中对其进行编程。您的第一个想法可能是“为什么选择 MATLAB?还有很多其他语言/软件包更适合游戏设计。”你是对的。然而,我是个笨蛋,我有兴趣学习如何从头开始设计游戏的具体细节,所以我不一定想在预制模块中使用任何东西。此外,我已经使用 MATLAB 多年,我喜欢用它来做其他人没有真正尝试过的事情的挑战。
现在到了手头的问题:我想加入人工智能,这样玩家就可以对抗电脑了。我才刚刚开始思考如何设计算法来选择方位角、仰角和弹丸速度来击中目标,然后每转一圈进行调整。我觉得我可能一开始就过度思考了这个问题,并试图让 AI 变得过于复杂,所以我想我应该暂停一下,向这里的社区询问他们如何设计算法的想法。
一些具体问题:
一些附加信息:我用来模拟弹丸运动的模型结合了流体阻力和风的影响。 “流体”可以是空气或水。在空气中,根据一些简单的大气模型,空气密度(以及阻力效应)随离地高度而变化。在水中,阻力非常大,以至于弹丸通常需要额外的推力。换句话说,抛射物可能会受到重力以外的力的影响。
最佳答案
在真实的炮兵情况下,所有这些因素都可以通过公式或简单的蛮力模拟来处理:发射一个电子炮弹,施加所有相关的力量,看看它落在哪里。调整并重试,直到电子炮弹击中目标。现在你有你的号码发送到枪。
鉴于情况的复杂性,我怀疑没有比暴力破解更好的答案了。虽然您可以预先计算出预期阻力效果与速度的表格,但我认为它不值得。
当然,AI 每次都将第一个炮弹落在你头上的游戏不会很有趣。一旦你知道了正确的值,你就必须让 AI 变得糟糕透顶。对射击应用一个随机因素,然后走向目标——每次射击时将其移动到真实目标的 30+random(140)%。
编辑:
我确实同意 BCS 的概念,即随着时间的推移对其进行改进。我说过,但后来改变了如何写一堆它的想法,然后最终忘记把它放回去。它应该越硬,随机组件应该越小。
关于language-agnostic - 我应该如何开始为炮战游戏设计 AI 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431586/