我必须使用python创建扫雷游戏,这是代码信号INTRO挑战的一部分
我已经尝试了一个代码,但是它不适用于最后一行和最后一列 我已经尝试过此代码,但无法正常工作,无法弄清为什么会出现此问题
import numpy as np
matrix = [[True,False,False,True],
[False,False,True,False],
[True,True,False,True]]
def minesweeper(matrix):
re=np.zeros((len(matrix),len(matrix[0])))
for i in range(len(matrix)-1):
#print(i)
for j in range(len(matrix[0])-1):
#print(j)
if (j==0) and (i==0):
re[i][j]=matrix[i][j+1]+matrix[i+1][j]+matrix[i+1][j+1]
elif (j==len(matrix[0])-1)and(i==0):
re[i][j]=matrix[i][j-1]+matrix[i+1][j]+matrix[i+1][j-1]
elif (i==len(matrix)-1)and (j==0) :
re[i][j]=matrix[i-1][j]+matrix[i-1][j+1]+matrix[i][j+1]
elif (i==len(matrix)-1)and(j==len(matrix[0])-1):
re[i][j]=matrix[i][j-1]+matrix[i-1][j]+matrix[i-1][j-1]
elif (i==0 and j!=0) or (i==0 and j!=len(matrix[0])-1):
re[i][j]=matrix[i][j-1]+matrix[i][j+1]+matrix[i+1][j-1]+matrix[i+1][j]+matrix[i+1][j+1]
elif (i==(len(matrix)-1) and j!=0) or (i==(len(matrix)-1) and j!=len(matrix[0])-1):
re[i][j]=matrix[i][j-1]+matrix[i][j+1]+matrix[i+1][j]+matrix[i+1][j-1]+matrix[i+1][j+1]
elif (j==0 and i!=0)and (j==0 and i!=len(matrix)-1):
re[i][j]=matrix[i+1][j]+matrix[i-1][j]+matrix[i+1][j+1]+matrix[i][j+1]+matrix[i-1][j+1]
elif (j==len(matrix[0])-1 and i!=0) and (j==len(matrix[0])-1 and i!=len(matrix)-1):
re[i][j]=matrix[i+1][j]+matrix[i-1][j]+matrix[i+1][j+1]+matrix[i][j+1]+matrix[i-1][j+1]
else:
re[i][j]=matrix[i-1][j]+matrix[i+1][j]+matrix[i][j-1]+matrix[i][j+1]+matrix[i-1][j-1]+matrix[i+1][j-1]+matrix[i-1][j+1]+matrix[i+1][j+1]
return re
minesweeper(matrix)
Output should be
[[0,2,2,1],
[3,4,3,3],
[1,2,3,1]]
But I am getting
[[0., 2., 2., 0.],
[3., 4., 3., 0.],
[0., 0., 0., 0.]]
答案 0 :(得分:1)
原因是range(len(matrix)-1)
range(len(matrix[0])-1)
不包括最后一列和最后一行,而且我认为如果分开处理边界问题,逻辑很复杂,可以将它们放在一起,访问8个邻居然后统一检查边界,就像这样:
def minesweeper(matrix):
re = np.zeros((len(matrix), len(matrix[0])))
for i in range(len(matrix)):
for j in range(len(matrix[0])):
for I, J in (i - 1, j - 1), (i - 1, j), (i - 1, j + 1), (i, j - 1), (i, j + 1), (i + 1, j - 1), (
i + 1, j), (i + 1, j + 1):
if 0 <= I < len(matrix) and 0 <= J < len(matrix[0]):
re[i][j] += matrix[I][J]
输出:
[[0. 2. 2. 1.]
[3. 4. 3. 3.]
[1. 2. 3. 1.]]
我认为np.zeros在这里不合适,您可以使用2d-list:
re = [[0] * len(matrix[0]) for _ in range(len(matrix))]