【发布时间】:2019-07-30 23:29:37
【问题描述】:
我正在制作一个简单的井字游戏,用户可以在其中指定网格的大小(列数和行数)。
我需要创建一个函数,它可以检查网格中所有对角线的胜利。
对于网格,我使用的是一个二维列表,看起来像这样(3x3 示例):
grid = [['x', '-', 'o'],
['o', 'x', '-'],
['-', '-', 'x']]
grid[row][col]
这应该是一个胜利的局面
我已经创建了垂直和水平赢的检查,但我不太清楚如何检查对角线。
这是我在代码中检查行胜的方法:
min_win_streak 是最小连胜纪录(例如在经典的 3x3 井字游戏中,它是 3)
def check_rows(grid, min_win_streak):
winner = '-'
for row in grid:
win_streak = 0
for element in row:
if element != '-':
if element == winner:
win_streak += 1
winner = element
if win_streak >= min_win_streak:
return True, winner
else:
win_streak = 1
winner = element
else:
win_streak = 0
winner = '-'
return False, None
我需要check_diags() 函数,返回值应该是:
- win for x,该函数应返回 True, 'x'
- win for o,该函数应返回 True, 'x'
- no win,该函数应返回 False、None
【问题讨论】:
-
请提供您现有的其中一个方向的代码,以便我们根据您的需要进行调整。要求我们从头开始提供代码有点超出 Stack Overflow 的范围。更重要的是,它不会与您已经完成的工作很好地融合。
-
@Prune 我已经添加了 check_rows() 函数
-
您是否尝试过使用嵌套 for 循环和数学公式,例如 'if grid[i][j] == grid[i+1][j+1] == grid[i+ 2][j+2]'?您需要确保 i 和 j 在 range(len(grid)-2) 内。
-
@ToddBurus 我试过了,但我想不出任何公式。
-
嗯,任何对角线的形式都是 (i, j), (i+1, j+1), (i+2, j+2)(即向下倾斜的对角线)或 (i, j+2), (i+1, j+1), (i+2, j)(向上倾斜的对角线)。然后你可以把它放在一个嵌套的 for 循环子句中。
标签: python list logic tic-tac-toe