我正在构建一个Tic-Tac-Toe游戏,我有一个垂直和水平的检查,看起来像这样:
def check_win_left_vert (board):
win = True
x = 0
for y in range (2):
if board[y][x] != board[y+1][x]:
win = False
return win它通过递增y轴来查看棋盘;我对x轴使用相同的方法。对于对角轴,我该如何做呢?我会同时递增两者吗?
发布于 2017-11-22 06:35:33
您将在一条对角线上对两者使用相同的变量,并在另一条对角线上将其"2反转“:
for x in range(2):
if board[x][x] ...
for x in range(2):
if board[x][2-x] ...请注意,您必须注意边界条件。我强烈怀疑您还没有费心测试您的水平代码,因为它试图检查电路板右边的空格。缩小范围以修复此问题。
发布于 2017-11-22 07:50:28
您需要在同一循环中检查对角线的情况
if board[y][y] != board[y+1][y+1] or board[2-y][y] != board[1-y][1+y]:
win = False
if win == False:
break;发布于 2020-06-08 13:05:34
所有使用列表理解的检查
game_board = [ [1, 0, 1],
[0, 1, 0],
[0, 1, 0] ]
# Horizontals
h = [str(i+1) + ' Row' for i, v in enumerate(game_board) if sum(v) == 3]
# Verticals
v = [str(i+1) + ' Col' for i in range(3) if sum([j[i] for j in game_board]) == 3]
# Diagonals
d = [['Left Diag', '','Right Diag'][i+1] for i in [-1, 1] if sum([game_board[0][1+i], game_board[1][1]], game_board[2][1-i]) == 3]
if any([h,v,d]):
print('You won on:', h, v, d)
else:
print('No win yet')https://stackoverflow.com/questions/47423891
复制相似问题