language-agnostic - 我应该如何开始为炮战游戏设计 AI 算法?

标签 language-agnostic artificial-intelligence

这是背景... 在空闲时间,我正在设计一款名为 Staker 的炮兵 war 游戏(受旧 BASIC 游戏 Tank WarsScorched Earth 的启发),我正在 MATLAB 中对其进行编程。您的第一个想法可能是“为什么选择 MATLAB?还有很多其他语言/软件包更适合游戏设计。”你是对的。然而,我是个笨蛋,我有兴趣学习如何从头开始设计游戏的具体细节,所以我不一定想在预制模块中使用任何东西。此外,我已经使用 MATLAB 多年,我喜欢用它来做其他人没有真正尝试过的事情的挑战。

现在到了手头的问题:我想加入人工智能,这样玩家就可以对抗电脑了。我才刚刚开始思考如何设计算法来选择方位角、仰角和弹丸速度来击中目标,然后每转一圈进行调整。我觉得我可能一开始就过度思考了这个问题,并试图让 AI 变得过于复杂,所以我想我应该暂停一下,向这里的社区询问他们如何设计算法的想法。

一些具体问题:

  • 您是否会建议我查看有关 AI 设计的具体引用资料?
  • 你会设计 AI 玩家以连续的方式改变难度(难度从 0(容易)到 1(困难),都仍然使用相同的通用算​​法)还是会为离散数量的 AI 玩家设计特定的算法(就像一个向随机方向射击的简单敌人或一个能够解释风影响的顽固敌人)?
  • 您将从哪种数学算法(伪代码描述)开始?

  • 一些附加信息:我用来模拟弹丸运动的模型结合了流体阻力和风的影响。 “流体”可以是空气或水。在空气中,根据一些简单的大气模型,空气密度(以及阻力效应)随离地高度而变化。在水中,阻力非常大,以至于弹丸通常需要额外的推力。换句话说,抛射物可能会受到重力以外的力的影响。

    最佳答案

    在真实的炮兵情况下,所有这些因素都可以通过公式或简单的蛮力模拟来处理:发射一个电子炮弹,施加所有相关的力量,看看它落在哪里。调整并重试,直到电子炮弹击中目标。现在你有你的号码发送到枪。

    鉴于情况的复杂性,我怀疑没有比暴力破解更好的答案了。虽然您可以预先计算出预期阻力效果与速度的表格,但我认为它不值得。

    当然,AI 每次都将第一个炮弹落在你头上的游戏不会很有趣。一旦你知道了正确的值,你就必须让 AI 变得糟糕透顶。对射击应用一个随机因素,然后走向目标——每次射击时将其移动到真实目标的 30+random(140)%。

    编辑:

    我确实同意 BCS 的概念,即随着时间的推移对其进行改进。我说过,但后来改变了如何写一堆它的想法,然后最终忘记把它放回去。它应该越硬,随机组件应该越小。

    关于language-agnostic - 我应该如何开始为炮战游戏设计 AI 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431586/

    相关文章:

    math - float 学有问题吗?

    Java查看队列中的元素

    java - "Comparison method violates its general contract"当我改变计算方法时

    scala - 尝试使用 MMLSpark 的 scala LIME 库解释模型时出现异常

    algorithm - 使用图表建模家庭关系

    oop - 如何处理难以表达的依赖要求?

    java - SSO OAuth2Authentication session 和服务器端 http 请求

    math - float 学有问题吗?

    algorithm - 蒙特卡洛树搜索在实践中是如何实现的

    artificial-intelligence - 最佳编程游戏