【问题标题】:Unity 2D/3D - Making a computer opponent (AI) for a match-3 gameUnity 2D/3D - 为三消游戏制作计算机对手 (AI)
【发布时间】:2013-06-23 14:40:09
【问题描述】:

我正在寻找关于从哪里开始为三消游戏创建计算机 AI 对手的指导/建议。这个问题多年来一直困扰着我(字面意思),因为我一直无法弄清楚。我已经用尽了谷歌来寻找这个答案。

有电脑对手的三消游戏示例包括:Puzzle QuestCrystal 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. 如果 1. 不可能,无论我的对手选择哪一步(没有子节点是叶子),都选择任何能保证我再走一步的棋步。
  3. 如果 2. 不可能,请选择随机移动。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多