检测Connect 4中的早期联系

时间:2017-10-24 23:29:25

标签: algorithm

我正在寻找一种算法来检测Connect 4游戏中的早期平局。截至目前,我已经检查了董事会是否已经满员并没有检测到任何胜利,但我想知道一旦比赛可以推断出平局。

例如,考虑一下这个游戏,其中玩家B刚刚在第5行,第0列播放:

    |
    v
5 | B |   |   |   |   |   |   |
4 | A | B | A | B | A | B | A |
3 | A | B | A | B | A | B | A |
2 | B | A | B | A | B | A | B |
1 | B | A | B | A | B | A | B |
0 | A | B | A | B | A | B | A |
    0   1   2   3   4   5   6

然后,游戏被认为是平局,因为玩家B仍然有办法获胜。如果玩家A在第5行,第1列:

播放
        |
        v
5 | B | A |   |   |   |   |   |
4 | A | B | A | B | A | B | A |
3 | A | B | A | B | A | B | A |
2 | B | A | B | A | B | A | B |
1 | B | A | B | A | B | A | B |
0 | A | B | A | B | A | B | A |
    0   1   2   3   4   5   6

此时,任何一位球员都无法获胜:这将是平局。我希望算法立即通知用户。

1 个答案:

答案 0 :(得分:2)

检查电路板上所有可能的4-in-row运行,水平,垂直和对角线。如果他们都包含至少一个A和至少一个B,那么它将是一个平局。如果甚至有一个由空和A或空和B的组合组成(假设没有行的4行A行或4行行B,在这种情况下你已经赢了),然后A或B的胜利仍然可能。

你可能已经有代码来检查胜利,所以只需调整它来检查A或4的空行,或者4行的B或空而不是4-in -A行或B行4行如果未能检测到可能的胜利,那么平局是不可避免的。

一个皱纹是指板上有少量空白空间。在这种情况下,您需要确定A和B剩余的剩余移动数量,并且只允许它们在计算中使用多个空数,例如:检查A的4行和最多2个空。例如,如果剩下5个空格并且它是B转,那么A有2个向左移动而B有3个。

如果剩下一个空列,它将无法处理的一个案例 - 可能有足够的空间让一个玩家连续堆叠4个但是他们不能,因为玩家必须交替。