扫雷失算

问题描述 投票:0回答:1

我正在尝试用 Python 实现扫雷,使用 Tkinter 创建 GUI。我在计算与正方形相邻的地雷的功能时遇到问题。

这是我将板设置为列表列表的代码。我分配值

9
以指示地雷。

from random import randint

# example values for testing
mines = 10
board = (10, 10)

mine_matrix = []
for line_number in range(board[1]):
        new_mine_line = []
        for column_number in range(board[0]):
            new_mine_line.append(0)
        mine_matrix.append(new_mine_line)

for mine in range(mines_amount):
    while True:
        mine_x = randint(0, board[1]-1)
        mine_y = randint(0, board[0]-1)
        if mine_matrix[mine_x][mine_y] < 8:
            mine_matrix[mine_x][mine_y] = 9
            break

然后我用这个代码来计算相邻地雷的数量。它应该遍历该字段以查找

9
值;当找到一个时,它应该访问相邻的值(通过迭代
control
中的值并将它们添加到行和列索引)并将
1
添加到每个.

control = -1, 0, 1
for line in range(board[1]):
    for column in range(board[0]):
        if mine_matrix[line][column] > 8:
            for line_control in control:
                for column_control in control:
                    try:
                        if (line == 0 or column == 0) and (line_control == -1 or column_control == -1): continue
                        mine_matrix[line+line_control][column+column_control] += 1
                    except: continue

我希望

if... continue
代码和
try
/
except
逻辑避免有问题的值(例如,在查看左边缘时尝试从列索引中减去)。

但是,当我尝试运行代码时,一些按钮上的数字错误。

比如具体看这部分:

中间方块显示一个1,但是有两个相邻的地雷(红色标记)

哪里出了问题,我该如何解决?

python python-3.x tkinter minesweeper
1个回答
0
投票

您需要确保

line+line_control
column+column_control
都在有效范围内,那么您实际上不需要
try/except

control = (-1, 0, 1)
for line in range(board[1]):
    for column in range(board[0]):
        if mine_matrix[line][column] > 8:
            for line_control in control:
                for column_control in control:
                    if not (line_control == column_control == 0):
                        r, c = line+line_control, column+column_control
                        # make sure both r and c are within valid range
                        if (0 <= r < board[1]) and (0 <= c < board[0]):
                            mine_matrix[r][c] += 1
© www.soinside.com 2019 - 2024. All rights reserved.