我正在尝试用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
然后我使用这段代码来计算相邻矿的数量。当找到一个时,它应该访问相邻的值(通过迭代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
逻辑避免有问题的值(例如,当查看左边缘时试图从列索引中减去)。
但是,当我尝试运行代码时,有些按钮上的数字是错误的。x1c 0d1x
例如,具体来看这一部分:
中间的方块显示1,但有两个相邻的地雷(用红色标记)。
什么是错误的,我如何解决这个问题?
1条答案
按热度按时间bvhaajcl1#
你需要确保
line+line_control
和column+column_control
都在有效范围内,那么你实际上不需要try/except
: