我正在尝试使用python中的列表制作扫雷游戏。到目前为止,我已经有了以下代码:
import random as r
import sys
#dimension of board and number of bombs
width = int(sys.argv[1])
height = int(sys.argv[2])
b = int(sys.argv[3])
#creates the board
board = [[0.0] * width] * height
#places bombs
for i in range(b):
x = r.randint(0, width - 1)
y = r.randint(0, height - 1)
board.insert(x, y, 0.1)
#prints board
for i in range(len(board)):
for j in range(len(board[i]))
print(board[i][j], end=" ")
我正在尝试将炸弹放置在棋盘上的随机位置,但是insert()
仅接受2个参数。还有其他方法可以做到这一点吗?
我有一个想法,在第1行放置一个随机炸弹,然后在第2行放置一个随机炸弹,依此类推,一旦击中第n行,它就会循环回到第1行,直到放置了足够的炸弹为止,但是我不知道它是否会工作(我也无法测试它,因为我已经知道如何做到这一点)。我觉得这种解决方案效率很低,所以我也想知道是否有一种更有效的方法。
答案 0 :(得分:1)
使用赋值代替插入:
board[x][y] = 0.1
。
此外,请小心初始化2D电路板。 board = [[0.0] * width] * height
将创建一个大小为width
的列表,然后将所有height
的指针复制到该列表,即如果您将0.1分配给第一行{{1} } 每个行中的第一项将被分配,因为它们都是相同的列表。您必须改为使用
board[0][0]
答案 1 :(得分:0)
您可以仅使用board[x][y] = 0.1
来访问板子行y
中的索引x
。此外,您也不想建立这样的董事会。您这样做的方式实际上只会创建1个具有数字的数组。这是您的代码,进行了一些修改。
import random as r
# dimension of board and number of bombs
# (I'm using hard coded values as an example)
width = 5
height = 7
b = 10
#creates the board
board = []
for i in range(height): # create a new array for every row
board.append([0.0] * width)
#places bombs
for i in range(b):
x = r.randint(0, height - 1)
y = r.randint(0, width - 1)
board[x][y] = 0.1 # this is how you place a bomb at a random coordinate
#prints board
for row in board:
print(row)
对我来说,结果板如下:
[0.0, 0.0, 0.1, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0]
[0.1, 0.0, 0.1, 0.0, 0.1]
[0.1, 0.0, 0.0, 0.0, 0.1]
[0.0, 0.1, 0.0, 0.0, 0.1]
[0.0, 0.1, 0.0, 0.0, 0.0]
请注意,万一x和y值重复出现,最终炸弹少于b
。这是接下来要解决的好问题。
答案 2 :(得分:0)
正在处理清单的清单。如果我们运行您的电路板初始化代码并按如下所示修改电路板值:
void(*p)(int row, int col, const int arr[row][col]) = min;
我们看到我们的修改出现在三个地方。这是因为我们将相同的列表([0.0] *宽度) height 次数了。正确执行此操作的一种方法是board = [[0.0] * _的宽度在range(3)中]。请参阅Two dimensional array in python。
由于我们使用的是列表列表,因此将x和y插入元素0.1的一种方法是使用board [y] .insert(x,0.1)。但是我觉得您想做的是board [y] [x] = 0.1。
对于放置炸弹,您所描述的可以像以下那样实现:
>>> width = 2; height = 3
>>> board = [[0.0] * width] * height
>>> print board
[[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]]
>>> x = 0; y = 1; board[y][x] = 1.1
>>> print board
[[1.1, 0.0], [1.1, 0.0], [1.1, 0.0]]
干杯