在Python中随机放置列表中的列表项
我刚开始学习Python,正在尝试编写一个扫雷游戏。简单来说,我有点迷茫,不知道怎么设置我的类,让它创建一个5x5的格子,这个格子是用列表的列表来表示的。然后,我还需要在这个格子上随机放置3个地雷,并计算每个格子周围的地雷数量。
我想我可以用一个__init__
方法来调用另外两个方法:一个是放置地雷,另一个是计算每个格子周围的地雷数量。
不过我对怎么设置这些方法有点迷茫,所以如果有建议的话,我会很感激!
3 个回答
0
要创建一个随机列表,最好的方法是这样做 -
import random
x = range(10)
random.shuffle(x)
这个方法会在原地随机打乱你的列表。
如果你想从列表中随机获取一个元素,可以试试 -
random.choice(x)
1
每个单元格其实就是你二维列表中的一个坐标(x, y)。所以如果我理解得没错,你只需要想出三个随机的坐标,然后把它们赋值给board[x][y]。
我可能会这样做。
x = range(5)
y = range(5)
coord1_x = x.pop(randrange(5))
coord1_y = y.pop(randrange(5))
coord2_x = x.pop(randrange(4))
coord2_y = y.pop(randrange(4))
coord3_x = x.pop(randrange(3))
coord2_y = y.pop(randrange(4))
如果你想要更多的地雷,可以把这些代码的部分放进一个循环里,把坐标放到一个列表中。不过可能还有更简洁的方法来实现这个。
我现在想不出有什么简单的方法来计算邻近的单元格。
5
这里有一段小代码,可以帮助你入门:
>>> import random
>>> cells = [['empty'] * 5 for i in range(5)]
>>> for i in range(3):
x = random.randrange(5)
y = random.randrange(5)
cells[x][y] = 'mine'
>>> import pprint
>>> pprint.pprint(cells)
[['empty', 'empty', 'empty', 'empty', 'empty'],
['mine', 'empty', 'mine', 'empty', 'empty'],
['empty', 'empty', 'empty', 'empty', 'mine'],
['empty', 'empty', 'empty', 'empty', 'empty'],
['empty', 'empty', 'empty', 'empty', 'empty']]