为回合制棋盘游戏编写AI

时间:2010-12-28 22:18:43

标签: iphone objective-c

我正在编写一个棋盘游戏(8x8),我需要开发一个人工智能。

我在棋盘游戏中读过很多关于AI的文章,minmax有或没有alphabeta修剪,但我真的不知道如何实现这个,我不知道从哪里开始...

关于我的游戏,这是一个回合制游戏,每个玩家都有棋子,他们必须选择一个并选择移动这个棋子(最多1或2个单元格)或克隆棋子(最多1个单元格)

目前,我有一个非常愚蠢的人工智能选择一个随机的片然后选择一个随机的动作...

请问关于如何实现此功能的一些线索?

祝你好运

3 个答案:

答案 0 :(得分:23)

答案 1 :(得分:4)

经典地,您需要决定您希望AI计算的提前(深度)移动量。根据您的游戏,最大深度可能会有很大差异。想想Tic-Tac-Toe与Checkers vs. Chess。

您还希望以一种允许您比较各种电路板状态的方式量化电路板位置(值)。

在最极端的情况下,您需要获取当前的电路板并计算其值。然后考虑你可以做的每一个可能的举动。然后考虑每一个,你的对手可能做出的每一个可能的举动。迭代到最大深度。您将构建一个树结构(广度优先)。

修剪你的树。任何可以保证降低电路板价值的分支都可以修剪。

然后,不知何故,比较剩余的分支。我不知道如何最好地做到这一点 - 但它似乎相当简单。要么你乐观地权衡可能的最佳结果并选择那些分支。或者根据最坏结果的潜力继续修剪。

希望这有帮助。

答案 2 :(得分:2)

首先,您只需要考虑两个功能:

  • 根据给定的游戏状态生成有效移动列表
  • 评估当前游戏状态对于给定玩家的“好”程度

如果您想保持简单,可以将第一项分为两个单独的功能:

  • 生成所有移动的列表
  • 根据给定的游戏状态检查给定的移动是否有效

如果您已实现此功能,则可以使用现有的AI算法之一(例如minmax或alpha-beta)来构建和修剪搜索树,并为您返回最佳可用移动。

请记住,构建有效移动列表的速度越快,评估游戏状态的速度越快,搜索树的时间就越深。

我曾写过一篇关于这个主题的文章(棋盘游戏AI),你可能会觉得有趣:http://proghammer.wordpress.com/2010/11/30/chess08-implementing-an-ai-artificial-intelligence-player/