【问题标题】:Unity 2D/3D - Making a computer opponent (AI) for a match-3 gameUnity 2D/3D - 为三消游戏制作计算机对手 (AI)
【发布时间】:2013-06-23 14:40:09
【问题描述】:
我正在寻找关于从哪里开始为三消游戏创建计算机 AI 对手的指导/建议。这个问题多年来一直困扰着我(字面意思),因为我一直无法弄清楚。我已经用尽了谷歌来寻找这个答案。
有电脑对手的三消游戏示例包括:Puzzle Quest 和 Crystal Battle。
在创建这样的 AI 对手时使用了哪些编程方法,我如何将其应用于 Unity 2D 脚本?我从哪里/如何开始?我主要是在寻找教程或其他东西来帮助我朝着正确的方向开始。我意识到这不是一件容易的事,但我想一步一步地尝试,这样我就能更好地理解事情。
提前致谢!
【问题讨论】:
标签:
artificial-intelligence
unity3d
monodevelop
【解决方案1】:
这里有两个问题:
如果您的电路板相当小,您可以简单地暴力破解它们。对于网格中的所有位置,检查您是否可以将其向上、向下、向左或向右移动,并且您拥有移动生成器。 (您应该检查已经为单人游戏版本实施的有效动作)。
选择最佳动作会有点棘手,因为您必须评估每一个动作。常见的方法是MiniMax 方法。一般的想法是,您在接下来的几轮中构建一个包含所有可能移动的树,并为每个叶子分配一个分数。然后你减少树,这样如果 AI 轮到移动,父节点变为 max(leaves),如果玩家移动,则变为 min(leaves)。你最终会得到你的移动分数。
Chess Programming Wiki 是此类基本 AI 编程的绝佳资源(您不需要其中描述的 90%。从 MiniMax 和 AlphaBeta 算法开始)。
另一方面,对于最简单的 AI,你可以随机选择一个动作,三消游戏在规划你的动作时并不是最苛刻的。
编辑:事后思考,以下似乎是三消游戏的合理 AI 策略:
假设每次移动后添加的所有随机宝石都无法以任何方式匹配:
- 选择一个让我的对手无法移动的动作(没有子节点)。
- 如果 1. 不可能,无论我的对手选择哪一步(没有子节点是叶子),都选择任何能保证我再走一步的棋步。
- 如果 2. 不可能,请选择随机移动。