首页 > 解决方案 > 如何检查自定义大小的井字游戏对角线是否获胜

问题描述

我正在制作一个简单的井字游戏,用户可以在其中指定网格的大小(列和行的数量)。
我需要创建一个函数,它可以检查网格中所有对角线的胜利。

对于网格,我使用的是一个二维列表,如下所示(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()函数,返回应该是:

标签: pythonlistlogictic-tac-toe

解决方案


您可以使用以下嵌套的 for 循环检查 2x2 中的对角线:

for i in range(len(grid)-2):
    for j in range(len(grid)-2):
        if grid[i][j] == grid[i+1][j+1] == grid[i+2][j+2] and grid[i][j] != '-':
            print('Winner')
        elif grid[i][j+2] == grid[i+1][j+1] == grid[i+2][j] and grid[i][j+2] != '-':
            print('Winner')

如果需要,可以将其插入到具有所需返回值的函数中来代替 print 语句。这应该可以扩展到 3x3、4x4 等,并且更改相当容易。


推荐阅读