我正在开发使用Unity3D在最终幻想VIII游戏中看到的迷你游戏Triple Triad。
基本游戏是3x3网格,玩家和NPC手持5张牌。目标是在电路板填满时保留最多的卡。卡片顶部,底部,左侧和右侧有4个数字。玩家将牌放在牌上并且另一牌手可以在牌上放置一张牌,之后将比较牌上的牌(例如,如果牌在中间而对手在牌的左边打了一张,对手卡的正确值将与已存在的卡的左值进行比较。如果一张牌大于另一张牌,那么玩家将“拿走”对手牌。
有关Triple Triad的更多详情,请点击此处:http://finalfantasy.wikia.com/wiki/Triple_Triad
我目前正在设计用于单人游戏的AI,因此人类可以与NPC对战。我已经决定开发人工智能的最佳方法是使用具有alpha-beta修剪的Minimax算法,以便在轮到他们时为AI做出最好的移动。
我遇到的问题是我在互联网上看到的大多数例子都显示了tic-tac-toe的评估函数。这比三重三位一体的评估者要简单得多,因为该功能必须考虑到卡上的值以及它所处的位置(例如拿一张敌人牌)。
有没有人有关于如何编写此评估函数的任何提示?或者至少我如何将这个网站的代码改编成一个可以评估我的董事会三重三位一体的代码?
http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html
答案 0 :(得分:3)
有两种评价功能:如果你可以看到游戏结束(就像你总是可以使用tic-tac-toe,即使你在Commodore 64上运行),你可以完全依据结果结果是否成功。然后,游戏引擎将仅选择赢得(或者,如果可能的话,并列)的移动。
如果你无法看到最终游戏,这在任何有趣的游戏中都是比较常见的,你需要一个能够以衡量每个玩家喜欢的方式评分中间板位置的功能。例如,在Chess中,您可以为每个部分指定点值,并将每个边的材料加起来并减去。因此人工智能将有利于获得更大的物质优势。然后你给予评估者奖励积分以便对手进行检查,等等。
如果你不太了解如何玩游戏(我已经为游戏编写了AI,我不知道怎么玩不止一次!)那么你可以简单地调整你对人类或其他AI玩家的AI直到它做得很好。我写了一个程序,专门用来对抗第7位客人的显微镜拼图(这是Ataxx的变种)。我不得不写它,因为我的室友和我无法击败游戏!很明显,董事会报道的一些功能是正确的功能,我试验了连接组的奖金等等,直到我的AI能够击败游戏的AI。我仍然无法击败Ataxx,而我自己的AI更加无情,并且很快就扼杀了我。