我正在创建一个连接四个游戏,该板是一个7x6板.我希望能够计算出每名球员每排4人的数量.当第一个玩家将他们的第一个4连胜时,游戏不会结束.只有当棋盘完全填满时,游戏才会结束.游戏可能的结束状态如下:
----------------
|2 2 1 2 2 1 1 |
|1 2 2 2 1 2 1 |
|2 1 2 1 2 2 1 |
|1 1 1 1 2 2 1 |
|2 1 1 1 1 1 1 |
|2 1 2 2 2 2 2 |
----------------
在这种情况下,玩家1的分数为10,玩家2的分数为2.我希望能够使用Convalve2D计算两名球员的四连胜.四排可以是对角的、水平的或垂直的.我找到了曼纽尔·费斯的答案:
然而,这将只计算一行中出现的一次4.我已经通过蛮力实现了一个函数来实现这一点,但它相当缓慢和繁琐.我怎样才能改变曼纽尔给出的答案来做我想做的事?
暴力方式:
class MaxConnect4game:
def __init__(self):
self.gameboard = [[0 for i in range(7)] for j in range(6)]
self.current_move = 0
self.piece_count = 0
self.player1Score = 0
self.player2Score = 0
self.gameFile = None
self.computer_column = None
self.depth = 1
def countScore(self):
self.player1Score = 0;
self.player2Score = 0;
# Check horizontally
for row in self.gameboard:
# Check player 1
if row[0:4] == [1] * 4:
self.player1Score += 1
if row[1:5] == [1] * 4:
self.player1Score += 1
if row[2:6] == [1] * 4:
self.player1Score += 1
if row[3:7] == [1] * 4:
self.player1Score += 1
# Check player 2
if row[0:4] == [2] * 4:
self.player2Score += 1
if row[1:5] == [2] * 4:
self.player2Score += 1
if row[2:6] == [2] * 4:
self.player2Score += 1
if row[3:7] == [2] * 4:
self.player2Score += 1
# Check vertically
for j in range(7):
# Check player 1
if (self.gameboard[0][j] == 1 and self.gameboard[1][j] == 1 and
self.gameboard[2][j] == 1 and self.gameboard[3][j] == 1):
self.player1Score += 1
if (self.gameboard[1][j] == 1 and self.gameboard[2][j] == 1 and
self.gameboard[3][j] == 1 and self.gameboard[4][j] == 1):
self.player1Score += 1
if (self.gameboard[2][j] == 1 and self.gameboard[3][j] == 1 and
self.gameboard[4][j] == 1 and self.gameboard[5][j] == 1):
self.player1Score += 1
# Check player 2
if (self.gameboard[0][j] == 2 and self.gameboard[1][j] == 2 and
self.gameboard[2][j] == 2 and self.gameboard[3][j] == 2):
self.player2Score += 1
if (self.gameboard[1][j] == 2 and self.gameboard[2][j] == 2 and
self.gameboard[3][j] == 2 and self.gameboard[4][j] == 2):
self.player2Score += 1
if (self.gameboard[2][j] == 2 and self.gameboard[3][j] == 2 and
self.gameboard[4][j] == 2 and self.gameboard[5][j] == 2):
self.player2Score += 1
# Check diagonally
# Check player 1
if (self.gameboard[2][0] == 1 and self.gameboard[3][1] == 1 and
self.gameboard[4][2] == 1 and self.gameboard[5][3] == 1):
self.player1Score += 1
if (self.gameboard[1][0] == 1 and self.gameboard[2][1] == 1 and
self.gameboard[3][2] == 1 and self.gameboard[4][3] == 1):
self.player1Score += 1
if (self.gameboard[2][1] == 1 and self.gameboard[3][2] == 1 and
self.gameboard[4][3] == 1 and self.gameboard[5][4] == 1):
self.player1Score += 1
if (self.gameboard[0][0] == 1 and self.gameboard[1][1] == 1 and
self.gameboard[2][2] == 1 and self.gameboard[3][3] == 1):
self.player1Score += 1
if (self.gameboard[1][1] == 1 and self.gameboard[2][2] == 1 and
self.gameboard[3][3] == 1 and self.gameboard[4][4] == 1):
self.player1Score += 1
if (self.gameboard[2][2] == 1 and self.gameboard[3][3] == 1 and
self.gameboard[4][4] == 1 and self.gameboard[5][5] == 1):
self.player1Score += 1
if (self.gameboard[0][1] == 1 and self.gameboard[1][2] == 1 and
self.gameboard[2][3] == 1 and self.gameboard[3][4] == 1):
self.player1Score += 1
if (self.gameboard[1][2] == 1 and self.gameboard[2][3] == 1 and
self.gameboard[3][4] == 1 and self.gameboard[4][5] == 1):
self.player1Score += 1
if (self.gameboard[2][3] == 1 and self.gameboard[3][4] == 1 and
self.gameboard[4][5] == 1 and self.gameboard[5][6] == 1):
self.player1Score += 1
if (self.gameboard[0][2] == 1 and self.gameboard[1][3] == 1 and
self.gameboard[2][4] == 1 and self.gameboard[3][5] == 1):
self.player1Score += 1
if (self.gameboard[1][3] == 1 and self.gameboard[2][4] == 1 and
self.gameboard[3][5] == 1 and self.gameboard[4][6] == 1):
self.player1Score += 1
if (self.gameboard[0][3] == 1 and self.gameboard[1][4] == 1 and
self.gameboard[2][5] == 1 and self.gameboard[3][6] == 1):
self.player1Score += 1
if (self.gameboard[0][3] == 1 and self.gameboard[1][2] == 1 and
self.gameboard[2][1] == 1 and self.gameboard[3][0] == 1):
self.player1Score += 1
if (self.gameboard[0][4] == 1 and self.gameboard[1][3] == 1 and
self.gameboard[2][2] == 1 and self.gameboard[3][1] == 1):
self.player1Score += 1
if (self.gameboard[1][3] == 1 and self.gameboard[2][2] == 1 and
self.gameboard[3][1] == 1 and self.gameboard[4][0] == 1):
self.player1Score += 1
if (self.gameboard[0][5] == 1 and self.gameboard[1][4] == 1 and
self.gameboard[2][3] == 1 and self.gameboard[3][2] == 1):
self.player1Score += 1
if (self.gameboard[1][4] == 1 and self.gameboard[2][3] == 1 and
self.gameboard[3][2] == 1 and self.gameboard[4][1] == 1):
self.player1Score += 1
if (self.gameboard[2][3] == 1 and self.gameboard[3][2] == 1 and
self.gameboard[4][1] == 1 and self.gameboard[5][0] == 1):
self.player1Score += 1
if (self.gameboard[0][6] == 1 and self.gameboard[1][5] == 1 and
self.gameboard[2][4] == 1 and self.gameboard[3][3] == 1):
self.player1Score += 1
if (self.gameboard[1][5] == 1 and self.gameboard[2][4] == 1 and
self.gameboard[3][3] == 1 and self.gameboard[4][2] == 1):
self.player1Score += 1
if (self.gameboard[2][4] == 1 and self.gameboard[3][3] == 1 and
self.gameboard[4][2] == 1 and self.gameboard[5][1] == 1):
self.player1Score += 1
if (self.gameboard[1][6] == 1 and self.gameboard[2][5] == 1 and
self.gameboard[3][4] == 1 and self.gameboard[4][3] == 1):
self.player1Score += 1
if (self.gameboard[2][5] == 1 and self.gameboard[3][4] == 1 and
self.gameboard[4][3] == 1 and self.gameboard[5][2] == 1):
self.player1Score += 1
if (self.gameboard[2][6] == 1 and self.gameboard[3][5] == 1 and
self.gameboard[4][4] == 1 and self.gameboard[5][3] == 1):
self.player1Score += 1
# Check player 2
if (self.gameboard[2][0] == 2 and self.gameboard[3][1] == 2 and
self.gameboard[4][2] == 2 and self.gameboard[5][3] == 2):
self.player2Score += 1
if (self.gameboard[1][0] == 2 and self.gameboard[2][1] == 2 and
self.gameboard[3][2] == 2 and self.gameboard[4][3] == 2):
self.player2Score += 1
if (self.gameboard[2][1] == 2 and self.gameboard[3][2] == 2 and
self.gameboard[4][3] == 2 and self.gameboard[5][4] == 2):
self.player2Score += 1
if (self.gameboard[0][0] == 2 and self.gameboard[1][1] == 2 and
self.gameboard[2][2] == 2 and self.gameboard[3][3] == 2):
self.player2Score += 1
if (self.gameboard[1][1] == 2 and self.gameboard[2][2] == 2 and
self.gameboard[3][3] == 2 and self.gameboard[4][4] == 2):
self.player2Score += 1
if (self.gameboard[2][2] == 2 and self.gameboard[3][3] == 2 and
self.gameboard[4][4] == 2 and self.gameboard[5][5] == 2):
self.player2Score += 1
if (self.gameboard[0][1] == 2 and self.gameboard[1][2] == 2 and
self.gameboard[2][3] == 2 and self.gameboard[3][4] == 2):
self.player2Score += 1
if (self.gameboard[1][2] == 2 and self.gameboard[2][3] == 2 and
self.gameboard[3][4] == 2 and self.gameboard[4][5] == 2):
self.player2Score += 1
if (self.gameboard[2][3] == 2 and self.gameboard[3][4] == 2 and
self.gameboard[4][5] == 2 and self.gameboard[5][6] == 2):
self.player2Score += 1
if (self.gameboard[0][2] == 2 and self.gameboard[1][3] == 2 and
self.gameboard[2][4] == 2 and self.gameboard[3][5] == 2):
self.player2Score += 1
if (self.gameboard[1][3] == 2 and self.gameboard[2][4] == 2 and
self.gameboard[3][5] == 2 and self.gameboard[4][6] == 2):
self.player2Score += 1
if (self.gameboard[0][3] == 2 and self.gameboard[1][4] == 2 and
self.gameboard[2][5] == 2 and self.gameboard[3][6] == 2):
self.player2Score += 1
if (self.gameboard[0][3] == 2 and self.gameboard[1][2] == 2 and
self.gameboard[2][1] == 2 and self.gameboard[3][0] == 2):
self.player2Score += 1
if (self.gameboard[0][4] == 2 and self.gameboard[1][3] == 2 and
self.gameboard[2][2] == 2 and self.gameboard[3][1] == 2):
self.player2Score += 1
if (self.gameboard[1][3] == 2 and self.gameboard[2][2] == 2 and
self.gameboard[3][1] == 2 and self.gameboard[4][0] == 2):
self.player2Score += 1
if (self.gameboard[0][5] == 2 and self.gameboard[1][4] == 2 and
self.gameboard[2][3] == 2 and self.gameboard[3][2] == 2):
self.player2Score += 1
if (self.gameboard[1][4] == 2 and self.gameboard[2][3] == 2 and
self.gameboard[3][2] == 2 and self.gameboard[4][1] == 2):
self.player2Score += 1
if (self.gameboard[2][3] == 2 and self.gameboard[3][2] == 2 and
self.gameboard[4][1] == 2 and self.gameboard[5][0] == 2):
self.player2Score += 1
if (self.gameboard[0][6] == 2 and self.gameboard[1][5] == 2 and
self.gameboard[2][4] == 2 and self.gameboard[3][3] == 2):
self.player2Score += 1
if (self.gameboard[1][5] == 2 and self.gameboard[2][4] == 2 and
self.gameboard[3][3] == 2 and self.gameboard[4][2] == 2):
self.player2Score += 1
if (self.gameboard[2][4] == 2 and self.gameboard[3][3] == 2 and
self.gameboard[4][2] == 2 and self.gameboard[5][1] == 2):
self.player2Score += 1
if (self.gameboard[1][6] == 2 and self.gameboard[2][5] == 2 and
self.gameboard[3][4] == 2 and self.gameboard[4][3] == 2):
self.player2Score += 1
if (self.gameboard[2][5] == 2 and self.gameboard[3][4] == 2 and
self.gameboard[4][3] == 2 and self.gameboard[5][2] == 2):
self.player2Score += 1
if (self.gameboard[2][6] == 2 and self.gameboard[3][5] == 2 and
self.gameboard[4][4] == 2 and self.gameboard[5][3] == 2):
self.player2Score += 1