我正在寻找指导和建议,关于如何开始为三消游戏创建一个电脑AI对手。这个问题困扰了我多年(字面上),因为我一直无法解决。我已经用尽了Google来寻找这个答案。
具有电脑对手的三消游戏样本包括:Puzzle Quest 和 Crystal Battle。
在创建这样的AI对手时使用了哪些编程方法论,我如何将其应用于Unity 2D脚本?我应该从哪里开始?如何开始?我主要在寻找一个教程或一些能让我朝正确方向前进的东西。我意识到这不是一件简单快速的事情,但我希望一步一步尝试,以便更好地理解这些内容。
提前感谢!
回答:
这里有两个问题:
- 生成可能的移动
- 选择最佳移动
如果你的棋盘相当小,你可以简单地使用蛮力方法来解决这两个问题。对于你网格中的所有位置,检查是否可以向上、向下、向左或向右移动,你就有了移动生成器。(你应该已经为单人游戏版本实现了有效移动的检查)。
选择最佳移动会稍微复杂一些,因为你必须评估每个移动。常见的方法是使用MiniMax方法。基本思路是,你构建一个包含未来几回合所有可能移动的树,并为每个叶子节点分配一个分数。然后你简化树,使得父节点在AI移动时成为max(leaves),在玩家移动时成为min(leaves)。最终,你会在根节点得到你的移动分数。
对于这种基本的AI编程,一个很好的资源是Chess Programming Wiki(你不需要那里描述的90%的内容。从MiniMax和AlphaBeta算法开始)。
另一方面,对于最简单的AI,你可以随机选择一个移动,三消游戏在规划移动方面并不是最 demanding的。
编辑:作为事后思考,以下似乎是一个合理的三消游戏AI策略:
假设每次移动后添加的所有随机宝石都无法匹配:
- 选择一个使我的对手无法移动的移动(没有子节点)。
- 如果1.不可行,选择任何移动,无论我的对手选择哪个移动,都能保证我有另一个移动(没有子节点是叶子节点)。
- 如果2.不可行,随机选择一个移动。