Unity 2D/3D – 为三消游戏创建电脑对手(AI)

我正在寻找指导和建议,关于如何开始为三消游戏创建一个电脑AI对手。这个问题困扰了我多年(字面上),因为我一直无法解决。我已经用尽了Google来寻找这个答案。

具有电脑对手的三消游戏样本包括:Puzzle QuestCrystal Battle

在创建这样的AI对手时使用了哪些编程方法论,我如何将其应用于Unity 2D脚本?我应该从哪里开始?如何开始?我主要在寻找一个教程或一些能让我朝正确方向前进的东西。我意识到这不是一件简单快速的事情,但我希望一步一步尝试,以便更好地理解这些内容。

提前感谢!


回答:

这里有两个问题:

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

如果你的棋盘相当小,你可以简单地使用蛮力方法来解决这两个问题。对于你网格中的所有位置,检查是否可以向上、向下、向左或向右移动,你就有了移动生成器。(你应该已经为单人游戏版本实现了有效移动的检查)。

选择最佳移动会稍微复杂一些,因为你必须评估每个移动。常见的方法是使用MiniMax方法。基本思路是,你构建一个包含未来几回合所有可能移动的树,并为每个叶子节点分配一个分数。然后你简化树,使得父节点在AI移动时成为max(leaves),在玩家移动时成为min(leaves)。最终,你会在根节点得到你的移动分数。

对于这种基本的AI编程,一个很好的资源是Chess Programming Wiki(你不需要那里描述的90%的内容。从MiniMax和AlphaBeta算法开始)。

另一方面,对于最简单的AI,你可以随机选择一个移动,三消游戏在规划移动方面并不是最 demanding的。

编辑:作为事后思考,以下似乎是一个合理的三消游戏AI策略:

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注