Unity 2D / 3D - 为第3场比赛制作计算机对手(AI)

时间:2013-06-23 14:40:09

标签: artificial-intelligence unity3d monodevelop

我正在寻找关于从哪里开始为第3场比赛创建计算机AI对手的指导/建议。这个问题多年来一直困扰着我(字面意思),因为我无法弄明白。谷歌找到了这个答案,我已经筋疲力尽了。

示例匹配 - 拥有计算机对手的3款游戏包括:Puzzle QuestCrystal Battle

在创建这样的AI对手时使用了哪些编程方法,以及如何将其应用于Unity 2D脚本?我在哪里/如何开始?我主要是在寻找一个教程或其他东西让我开始朝着正确的方向前进。我意识到这不是一件容易的事,但我想逐步尝试,以便我能更好地理解事物。

提前致谢!

1 个答案:

答案 0 :(得分:1)

这里有两个问题:

  • 生成可能的动作
  • 选择最佳动作

如果你的电路板相当小,你可以简单地强制它们。对于网格中的所有位置,检查是否可以向上,向下,向左或向右移动,并且您有移动生成器。 (您应该检查已经为单人游戏版本实施的有效动作)。

选择最佳动作会有点棘手,因为你必须评估每一步。执行此操作的常用方法是MiniMax方法。一般的想法是你在接下来的几个回合中构建一个包含所有可能移动的树,并为每个叶子分配一个分数。然后你减少树,这样如果AI转向移动,父节点变为最大(离开),如果玩家移动则变为min(离开)。你最终获得了根本移动的分数。

像这样的基本AI编程的大量资源是Chess Programming Wiki(你不需要90%的描述。从MiniMax和AlphaBeta算法开始)。

另一方面,对于最简单的AI,您可以随意选择一个移动,在计划您的移动时,第3场比赛并不是最苛刻的。

编辑:作为一个事后的想法,以下似乎是比赛3游戏的合理人工智能策略:

假设每次移动后添加的所有随机宝石都无法以任何方式匹配:

  1. 选择一个让我的对手无法移动的动作(没有子节点)。
  2. 如果1.不可能,请选择任何移动来保证我的另一个移动,无论我的对手选择哪个移动(没有子节点是叶子)。
  3. 如果无法2.选择随机移动。