简单的tic-tac-toe AI

use*_*342 8 javascript artificial-intelligence tic-tac-toe

我知道这已被问了很多,我已经搜索了其他代码,但我看到的大部分内容似乎都没有完美无缺(永不丢失),而且简单,优雅,高效.我无法确定哪种解决方案适合该描述.

我见过的解决方案是:

(1)使用minimax进行alpha-beta修剪.这对我来说似乎很复杂,对于这么简单的游戏可能没必要?它可能太复杂了吗?如果没有,我需要做很多硬编码还是我误解了算法?

(2)使用维基百科的伪代码策略编写代码...我不确定如何实现它.例如,它只是说"检查叉子".大多数这些检查是通过拥有一系列的winsLines并检查它们是否被填充或类似的东西来完成的?如果没有,有人可以给我提示有关如何在伪代码中实现检查的数据结构或任何基本提示:http://en.wikipedia.org/wiki/Tic-tac-toe#Strategy.我也看过算法给'X'方形和'O'方形赋予数值然后用和来决定胜利者,但我不明白为什么这个特别有用.

还有其他任何合理的

Anx*_*tta 9

说实话,在处理AI和启发式时,最简单的任务很快就会变得复杂.minimax方法将为您提供最佳结果,考虑到您正在实施AI,这应该不会太困难.它是一个既定标准,拥有2个基于玩家回合的游戏逻辑.

看看这个网站......它提供了对井字游戏AI和极小极大实现的一些很好的见解.

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

编辑:

注意到有人写了"蛮力"......这最终将成为实现minimax中涉及的启发式的低效方式.基于其他玩家最后一次移动的每一个可能移动的迭代只是实现启发式的另一种方式..除了在我看来似乎更多的工作.Minimax的实施将简单有效.

EDIT2:

"更简单的实现"有点相对.Minimax是标准,正如我在评论中所说,你可以操纵启发式以适应你正在寻找的情况......

我希望我能告诉你最简单的方法,但有很多变量依赖于代码中游戏的植入.

接受建议,看看你的游戏实施,然后看看最适合你的东西!

一个人的简单可能对另一个人来说很复杂.我只是想给你选择,而minimax非常可靠.也许尝试调整它以满足您的需求.

EDIT3:

如果您需要更多指导,请告诉我.我很乐意提供帮助.