如何调试程序中的数组问题?
How to debug an array issue in my program?
我一直在尝试在 pygame 中编写扫雷程序作为我的第一个视频游戏。
我一直在尝试创建一个数组,通过检查在 10 x 8 网格上生成 10 个炸弹的另一个数组的内部,告诉我在 3x3 半径内每个像素有多少炸弹。 (该数组实际上是 12 x 10,因此如果您检查角落的炸弹,它会尝试检查位置 0,0 之前的位置,它不会崩溃)。
但是无论我做什么我都做不到。
import random
import numpy as np
num_bomb = 10
num_cell_x = 10
num_cell_y = 8
bombs = np.zeros([int(num_cell_y+2),int(num_cell_x+2)],dtype = np.uint)
for i in range(num_bomb):
bombs[random.randint(1,num_cell_y),random.randint(1,num_cell_x)] = 1
num_bombs = np.zeros([num_cell_y,num_cell_x],dtype = np.uint)
# The part that doesn't work:
for x in range(0,num_cell_x):
for y in range(0,num_cell_y):
bomb_count = 0
if bombs[y,x] == 0:
for sy in range(y-1,y+1):
for sx in range(x-1,x+1):
if bombs[sy,sx] == 1:
num_bombs[y,x] += 1
print(bombs)
print()
print(num_bombs)
我认为最简单的方法是使用带内核的 2D 卷积 np.ones((3, 3))
import scipy.signal
num_bombs = scipy.signal.convolve2d(bombs, np.ones((3, 3), mode='same')
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.convolve2d.html
range(a, b)
生成的数字 sin 范围 [a, b[ 分别是所有数字 >= a
但 < b
。因此,您必须生成范围 range(y-1,y+2)
和 range(x-1,x+2)
而不是 range(y-1,y+1)
和 range(x-1,x+1)
:
for sy in range(y-1,y+2):
for sx in range(x-1,x+2):
# [...]
我一直在尝试在 pygame 中编写扫雷程序作为我的第一个视频游戏。
我一直在尝试创建一个数组,通过检查在 10 x 8 网格上生成 10 个炸弹的另一个数组的内部,告诉我在 3x3 半径内每个像素有多少炸弹。 (该数组实际上是 12 x 10,因此如果您检查角落的炸弹,它会尝试检查位置 0,0 之前的位置,它不会崩溃)。
但是无论我做什么我都做不到。
import random
import numpy as np
num_bomb = 10
num_cell_x = 10
num_cell_y = 8
bombs = np.zeros([int(num_cell_y+2),int(num_cell_x+2)],dtype = np.uint)
for i in range(num_bomb):
bombs[random.randint(1,num_cell_y),random.randint(1,num_cell_x)] = 1
num_bombs = np.zeros([num_cell_y,num_cell_x],dtype = np.uint)
# The part that doesn't work:
for x in range(0,num_cell_x):
for y in range(0,num_cell_y):
bomb_count = 0
if bombs[y,x] == 0:
for sy in range(y-1,y+1):
for sx in range(x-1,x+1):
if bombs[sy,sx] == 1:
num_bombs[y,x] += 1
print(bombs)
print()
print(num_bombs)
我认为最简单的方法是使用带内核的 2D 卷积 np.ones((3, 3))
import scipy.signal
num_bombs = scipy.signal.convolve2d(bombs, np.ones((3, 3), mode='same')
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.convolve2d.html
range(a, b)
生成的数字 sin 范围 [a, b[ 分别是所有数字 >= a
但 < b
。因此,您必须生成范围 range(y-1,y+2)
和 range(x-1,x+2)
而不是 range(y-1,y+1)
和 range(x-1,x+1)
:
for sy in range(y-1,y+2):
for sx in range(x-1,x+2):
# [...]