您应该首先观察第 9 步始终是强制的:棋盘上只有一个空方格。移动也可以被认为是 8 强制,因为在七步之后可能恰好有三种情况:
O
可以在下一步获胜,在这种情况下,它需要获胜
- 在剩下的两个方格中的任何一个方格中放置一个
X
赢得比赛X
,在这种情况下O
无论下一步如何都输了
X
有零或一条通往胜利的道路,在这种情况下O
阻止以强制平局
这意味着游戏最多在七步之后就结束了。
还要注意只有三个开场动作:中心、角落或侧面。您选择四个角或边中的哪一个都没有关系,因为板可以旋转以匹配“规范”开口(左上角或顶边的中间)。
您现在可以构建您的状态分析代码。从三个可能的开局中的每一个开始,使用在您进行移动时打开的所有方格回溯多达六个额外的移动。每次走完后,分析位置看是否X
或O
已经赢了;markX
以 Wx 获胜,O
以 Wo 获胜。其余职位未定。
Wx 或 Wo 之后不要探索位置:只需返回上一步,报告对应方的胜利。
当你到达第七步时,静态分析位置以确定它是否是上述三种情况之一,将位置标记为 Wx、Wo 或 Draw。
现在到最重要的一步:当你回溯到N-1
玩家的移动时p
,
- 如果您尝试的移动之一使得下一级的所有位置都变为 Wp,则也将当前位置声明为 Wp。
- 如果您尝试的所有动作都导致对手获胜,则宣布当前位置为对手获胜
- 否则,将当前位置声明为平局,并返回上一级。
如果您这样做正确,所有三个空缺职位都将被归类为平局。三步后你应该会看到一些强行获胜。
运行此过程将每个位置分类为 Wx、Wo 或 Draw。如果您的 AI 在分类为 Wp 的位置上为玩家赢得胜利p
,或者在分类为平局的位置上让您平局,那么您的 AI 就是完美的。另一方面,如果存在静态分类为 Wp 且 AIp
仅获得平局的位置,那么您的 AI 引擎需要改进。
附加阅读:您可以在本文中找到有关该游戏的更多见解,
该文章描述了计算可能的井字游戏游戏的方法。