扫雷舰,还是。 我找到了一种方法,但我知道必须有一种简化的方法。我必须在矩阵里放一个数字来表示它周围有多少炸弹(“b”)。这就是我所拥有的,我知道必须有一条更短的路。在
def check(y,x):
if ((y < 0) or (y >= len(mat1)) or (x < 0) or (x >= len(mat1))):
return (False)
else:
return mat1[y][x]
def addscores():
for x in range(len(mat1)):
for y in range(len(mat1)):
if mat1[y][x] != "b":
if check(y-1,x-1) == "b" or check(y,x-1) == "b" or check(y+1,x-1) == "b" or check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) =="b":
mat1[y][x] = 1
if check(y-1,x-1) == "b":
if check(y,x-1) == "b" or check(y+1,x-1) == "b" or check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 2
if check(y,x-1) == "b":
if check(y+1,x-1) == "b" or check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 2
if check(y+1,x-1) == "b":
if check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 2
if check(y+1,x) == "b":
if check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 2
if check(y+1,x+1) == "b":
if check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 2
if check(y,x+1) == "b":
if check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 2
if check(y-1,x+1) == "b":
if check(y-1,x) == "b":
mat1[y][x] = 2
if check(y-1,x-1) == "b":
if check(y,x-1) == "b":
if check(y+1,x-1) == "b" or check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 3
if check(y+1,x-1) == "b":
if check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 3
if check(y+1,x) == "b":
if check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 3
if check(y+1,x+1) == "b":
if check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 3
if check(y,x+1) == "b":
if check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 3
if check(y-1,x-1) == "b":
if check(y,x-1) == "b":
if check(y+1,x-1) == "b":
if check(y+1,x) == "b" or check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 4
if check(y+1,x-1) == "b":
if check(y+1,x) == "b":
if check(y+1,x+1) == "b" or check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 4
if check(y+1,x) == "b":
if check(y+1,x+1) == "b":
if check(y,x+1) == "b" or check(y-1,x+1) == "b" or check(y-1,x) == "b":
mat1[y][x] = 4
#ETC
如果我理解了您的正确操作,那么这段代码,特别是
check_all
函数应该可以解决您的问题。你是对的,肯定有一种更短的方法来完成它,使用循环(在本例中是列表理解),而不是必须单独写出每个检查。在我在可能的地方保存了你的代码,因为我没有足够的上下文来知道更改是否会破坏任何东西。在
如果你想弄清楚如何编写扫雷舰程序,你可以在Python烹饪书上找到MineSweep,这本书展示了开发GUI版本游戏的十二步过程。在
你可以用这样的方法:
相关问题 更多 >
编程相关推荐