我正在寻找一种算法来检测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
此时,任何一位球员都无法获胜:这将是平局。我希望算法立即通知用户。
答案 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个但是他们不能,因为玩家必须交替。