我正在努力使用miniMax algorythm构建一个基本的tictactoe游戏,我有一个JavaScript的实现,有点工作。但是,我正在为它提供一些测试板状态,它似乎并没有像我期望的那样工作。例如,如果我喂它
['o', '1', 'x',
'x', 4, 5,
'x', 'o', 'o']
它告诉我,X的下一个正确移动是索引4(获胜状态。)但是如果我喂它
['o', 'x', 2,
'o', 4, 5,
'x', 7, 'x']
它告诉我,O的下一个正确移动是索引2(这是一个瞬间失败,因为X将通过获得位置7获胜。
所以基本上我想知道的是否重要。从完成游戏进程开始,我不相信第二个示例中的电路板布局是使用该算法实际可能发生的电路板布局,无论X运行的电脑是什么X都不会让电路板得到进入这种状态,所以也许我的实施是正确的。 miniMax应该能够处理这个(或任何电路板状态),或者这个测试板只是一个它无法处理的状态,因为它是一个不可能的"州。我不相信我不完全理解的代码,所以欢迎任何建议。
我的实现的完整代码在Github上:https://github.com/cugamer/tictactoe/tree/master/lib
答案 0 :(得分:1)
是的,它应该涵盖任何输入,是的,它确实很重要,因为您可能在代码中的某个地方出现了需要启动的错误。
主要是因为Minimax被简单地赋予了董事会的状态,而不是历史,即导致这一立场的一系列动作。它根本无法弄清楚一个州是否是“可能的”状态。所有这一切都是向前看,即发现可能出现的所有未来可能的状态,如果它们中的任何一个导致肯定的失败,它应该能够避免这条路径。
然而,您的具体示例是一个有趣的案例。无论'O'如何进行,最终都会失败。因此,所有可能的移动将返回相同的,即玩家'O'的最低可能得分。因为在你的代码中bestMove
没有得到更新,除非有更好的移动,在这种情况下没有任何移动,它只会返回第一步。