【问题标题】:Artificial Intelligence for card battle based game人工智能卡牌对战游戏
【发布时间】:2013-05-13 16:49:20
【问题描述】:

我想做一款基于卡牌对战的游戏。在这张卡中具有特定的属性,可以增加玩家的生命值/攻击/防御或攻击敌人以降低他的生命值/攻击/防御

我正在尝试为这款游戏制作 AI。 AI 必须根据 AI 的 hp/attack/defense 和 Enemy 的 hp/attack/defense 等当前情况来预测它将选择哪张卡。由于人工智能看不到敌人的牌,因此它无法预测未来的动作。

我搜索了一些像 minmax 这样的 AI 技术,但我认为 minmax 不适合,因为 AI 无法预测任何未来的动作。

我正在寻找一种非常灵活的技术,以便以后可以添加多种卡片。

您能否为此类游戏推荐一种技术。 谢谢

【问题讨论】:

    标签: algorithm actionscript-3 tree artificial-intelligence flowchart


    【解决方案1】:

    这本身不是 ActionScript 3 主题,但我确实认为它相当有趣。

    首先,我建议为 Nintendo DS 或类似游戏选择 Yu-Gi-Oh 的 Stardust Accelerator World Championship 2009。

    游戏有一个相当先进的计算机人工智能系统,不仅可以处理预期的生命值优势或劣势,还可以处理卡牌优势和连击。如果您要接受这样的挑战,我绝对建议您进行必要的研究(另外,如果玩电子游戏就是研究,谁能抱怨?)

    我对构建 AI 的建议如下: 当计算机决定它的移动时,创建一个移动对象数组。然后让它为它可以看到的每个可能的 Move 创建一个新的 Move 对象。

    对于每个移动对象,计算对手的HP减少多少,他们还有多少卡,有多少生物等。

    让计算机决定什么是最重要的(更多的伤害,更多的卡牌优势)并让它发挥作用。

    更复杂的 AI 也会提前思考几个回合,并且可能会“看到”其他人看不到的动作。

    【讨论】:

    • 感谢您的回复。我也想过以这种方式使用它。 1) 对于所有手牌,如果可以使用,则对敌人进行能力测试并记录利润点。 2)选择具有最多利润点的卡。但问题是在恢复 200 HP 比用 300 HP 攻击敌人更有价值的情况下。 AI 会选择 300HP 的卡,因为它给它最大的利润。
    • 您需要将所有形式的利润(获得的生命、造成的伤害、卡牌优势)转换为一种度量,例如称为 AdvantagePoint。然后你可以决定各种利润转换成的比例......例如,1造成的伤害= 1 AP,1获得的生命= 0.6 AP,1张牌= 4AP。然后你可以根据什么有最多的AP来决定。这样做的另一个好处是您可以更改不同 AI 的权重,从而为用户创造独特的体验。
    • 是的,我也想过这样的事情。我想我已经做了一个可能有效的算法。我会试一试。感谢回复
    【解决方案2】:

    我建议您查看 this game of Reversi 我几周前在 Flash 中构建的乐趣。这实现了一个非常基本的 AI,但基本可以应用于您的情况。

    基本上,游戏的运作方式是在每次移动之后(玩家或 CPU,因此我可以确定玩家是否做出了与 CPU 可能做出的动作相比正确的动作),我为每个可能的合法动作创建了一个向量.然后我决定哪个动作提供最高分变化,并将其设置为最佳动作。但是,我也会检查移动是否会导致其他玩家进入角球(如果您从未玩过,抢角的玩家通常会获胜)。如果是这样,我告诉 CPU 避免该移动并检查第二好的移动,依此类推。最终的结果是一个真正可以进行战斗的 CPU。

    请记住,这只是一个下午的工作(对于整个游戏,从糟糕的 GUI 到 AI 的功能),所以它非常基础,我可以做一些事情,比如通过检查运行未来可能的动作顺序也是。有趣的事实是,我的动作(显然是我基于 AI 的)是 CPU 在将近 80% 的时间里会做出的动作。唯一不成立的情况是,当我像你玩国际象棋一样玩游戏时,你的移动完全是为了定位移动四轮下线

    对于您的游戏,您需要考虑大量变量,而不是像我那样使用单点量表。我建议列出每一件事并对每一件事应用一个点值,这样你就可以对每一件事应用重要性值。我为缓存系统做了类似的事情,它根据年龄、使用情况、大小等自动确定最重要的文件是什么。然后你查看 CPU 手中的每张卡片,计算每张卡片的价值并播放那张卡片(当然,假设这样做是合法的)。

    一旦你弄清楚了这一点,你就可以研究下一个回合中每个动作可以做什么(即每个动作的“伤害”值)。完成后,您可以为其添加功能,让 CPU 做出战略性动作,从而允许他们使用更强大的卡或执行“终结”动作,或者无论如何它最终都会起作用。

    不过,再一次,将其保持在一个简单的基于点的系统上,并从那里继续前进。您需要一些可以在物理上进行比较的东西,因此坚持基于点的系统会很简单。

    对于这个答案的冗长,我深表歉意,但我希望它在某种程度上有所帮助。

    【讨论】:

    • 感谢您的回复。在您的帮助下,它甚至可以提出建议,我制定了一个可能解决问题的算法。顺便说一句,你的黑白棋游戏有非常好的 AI :)
    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多