由于井字棋的状态空间非常小,您可以存储所有可能的最终游戏位置,并使用旋转,但我认为您有点过于深思熟虑。
不要为游戏板存储3x3数组,而是使用7x7数组,其中内部最小的3x3用于游戏板。每个方格应该至少有三个值表示——类似于PLAYER_1、PLAYER_2和NONE。最初,所有值都应设置为NONE。然后,在每个玩家的移动之后,检查所选方格周围的所有内容,以获得3连胜;2个以上,2个以下,2个左侧,2个右侧,2个左上角,2个右下角,2个右上角,2个左下角。
为什么是7x7数组?使用7x7数组,您可以安全地从3x3区域中的任何方格搜索所有方向,而无需使用if语句来查看是否正在走出数组的边缘。棋盘将如下所示:
0 1 2 3 4 5 6
0 * * * * * * *
1 * * * * * * *
2 * * * * * * *
3 * * * * * * *
4 * * * * * * *
5 * * * * * * *
6 * * * * * * *
例如,如果第一个玩家在井字棋板上移动到0,0,则与在7x7板上移动到2,2相同。当进行移动时,您需要检查2,2周围的所有内容,以查看是否有三个相同值的方格。
- 以上:2,0和2,1和2,2
- 以下:2,2和2,3和2,4
- 左侧:0,2和1,2和2,2
- 右侧:2,2和2,3和2,4
- 左上角:0,0和1,1和2,2
- 右上角:2,2和3,1和4,0
- 左下角:0,4和1,3和2,2
- 右下角:2,2和3,3和4,4
由于3x3板周围的方格带始终具有值NONE,因此它们永远不会触发获胜条件。
如果其中任何一个与同一玩家值(例如第一个玩家的PLAYER_1)匹配,则游戏已经结束并获胜。否则,如果所有方格都被占用,则游戏为平局。
我之前在其他类似的游戏中使用过这个方法,效果非常好。