我正在使用python中的一个简单的扫雷游戏,我正在尝试创建一个将地雷插入空板的功能。
请注意,该主板采用列表形式,如下所示:
[[col, col, col...],[col,col,col...],[...],[...]...]
我的功能如下:
def insert_mines(NUM_MINES):
for mine in range(NUM_MINES):
rand_row = randint(0, NUM_ROWS - 1)
rand_col = randint(0, NUM_COLS - 1)
if BOARD[rand_row][rand_col] == 'O':
BOARD[rand_row][rand_col] = 'X'
NUM_MINES = NUM_MINES - 1
else:
BOARD[rand_row][rand_col] = 'X'
print NUM_MINES
当我使用num_mines = 96运行它时,它永远不会打印零,如果插入了所有地雷,它就应该打印出来。
这可能是什么原因?
请注意,'X'代表一个矿山,而'O'只是一个没有我的板空间。
答案 0 :(得分:1)
打印零的唯一方法是
BOARD[rand_row][rand_col] == 'O'
用于每次迭代。由于"birthday paradox"
,这可能会出乎意料地降低NUM_ROWS
和NUM_COLS
根据Chris的建议,制作电路板的更简单方法
cells = ['O'] * NUM_ROWS * NUM_COLS
cells[:NUM_MINES] = ['X'] * NUM_MINES
random.shuffle(cells)
BOARD = [cells[i::NUM_ROWS] for i in range(NUM_ROWS)]