一尘不染

井字游戏如何确定游戏结局?

algorithm

我正在开发井字游戏,我需要算法来检查游戏何时结束(以及谁获胜)。在3x3游戏中,我将检查每个可能的获胜情况(有8种能力)。但是在7x7中(需要连续4个标志,连续或成对,或对角线)有很多可能的获胜方式。


阅读 262

收藏
2020-07-28

共1个答案

一尘不染

虽然一种非常基本的方法是查看每个单元格各个方向的运行情况,但是这里有一种方法只检查一次单个“行”中的一个单元格。“线”是可能会赢的行,列或对角线,例如在Vegas老虎机中:)

  1. 对于每个“行”,移至该“行”的 开头 ,然后;
  2. 将计数器设置为0。
  3. 对于“行”中的每个单元格(依次遍历该行):
    • 如果单元格是P1并且计数器> = 0,则将一加到计数器
    • 如果计数器= 4,则P1获胜。
    • 如果单元格为P1并且计数器为负,则将计数器设置为0
    • 如果单元格为P2,并且计数器<= 0,则从计数器中减去1
    • 如果计数器= -4,则P2获胜
    • 如果单元格为P2并且计数器为正,则将counter设置为0

重要编辑: 如果单元格既不包含P1也不包含P2,则将计数器重置为0(doh!)。我省略了这个琐碎但必需的步骤。否则“ 11-11”将被视为获胜。

可以在给定每次迭代的起点和行/列偏移的情况下遍历“线”(例如,从NW到SE的最长对角线从(0,0)开始并前进(1,1))。长度小于4的对角线当然可以避免完全检查。

快乐的编码。

2020-07-28