2

我正在使用 Unity3D 开发游戏《最终幻想 VIII》中看到的迷你游戏 Triple Triad。

基本游戏是一个 3x3 网格,玩家和 NPC 手里拿着 5 张牌。目标是在棋盘被填满时持有最多的牌。卡片的顶部、底部、左侧和右侧有 4 个数字。玩家将一张牌放在网格上,另一位玩家可以将一张牌放在它旁边,然后将比较牌上的数字(例如,如果一张牌在中间,而对手在它的左边打了一张,对手卡的右值将与已经存在的卡的左值进行比较)。如果一张牌大于另一张牌,则玩家将“拿走”对手的牌。

关于三重三合会的更多细节可以在这里看到:http: //finalfantasy.wikia.com/wiki/Triple_Triad

我目前正在为单人游戏设计 AI,以便人类可以与 NPC 对战。我已经决定开发 AI 的最佳方式是使用带有 alpha-beta 修剪的 Minimax 算法,以便轮流为 AI 找出最佳可能的移动。

我遇到的问题是,我在互联网上看到的大多数示例都显示了 tic-tac-toe 的评估器功能。这比三元组评估器要简单得多,因为该函数必须考虑卡片上的值以及正在播放的位置(例如,拿走一张敌人的卡片)。

有没有人对我如何编写这个评估器函数有任何提示?或者至少我怎样才能将这个站点的代码改编成一个可以评估我的板子的三元组?

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html

4

1 回答 1

3

评估函数有两种风格:如果您可以看到游戏的结束(就像您在井字游戏中总是可以看到的那样,即使您在 Commodore 64 上运行),您可以将结果完全基于结果是否是成功的。然后,游戏引擎将只选择获胜的动作(或者,如果可能,平局)。

如果您不到残局,这在任何有趣的游戏中都更为常见,您需要一个函数来计算中间棋盘位置,以衡量它如何有利于每个玩家。例如,在国际象棋中,您可以为每个棋子分配点值,然后将每边的材料数量相加并减去。因此,人工智能将有利于更大的物质优势。然后你给评估者加分以控制对手,依此类推。

如果您不太了解如何玩游戏(我已经为我不知道如何玩的游戏编写了不止一次的 AI!),那么您可以简单地针对人类或其他 AI 玩家调整您的 AI,直到它完成好。我专门编写了一个程序来对抗 7th Guest 中的显微镜拼图(它是 Ataxx 的变体)。我不得不写它,因为我和我的室友无法击败游戏!很明显,棋盘覆盖的某些功能是正确的功能,我尝试了连接组的奖励等等,直到我的 AI 可以击败游戏的 AI。我自己还是打不过Ataxx,我自己的AI更狠,快把我宰了。

于 2012-11-14T23:49:04.850 回答