如何在Python中表示扫雷网格?
在Python中,想要表示一个扫雷游戏的内部状态,你会用什么数据结构呢?
每个x,y的位置会存放一个数字,这个数字代表当前这个格子的状态(比如:未探索、地雷、标记、等等)。
我应该使用嵌套列表吗?这看起来是最接近二维数组的东西,而在其他语言中我可能也会用这个(就是二维数组)。
我对Python不是很熟悉,有人能给我个建议吗?
7 个回答
3
再给大家提供一个选择,你可以用元组来作为字典的索引。
board = {}
board[1, 2] = 9
5
你可以使用一个二维数组,里面存放每个格子的状态对象:
class FieldState(object):
def __init__(self):
self.unexplored = True
self.mine = Random()
self.flag = Random()
...
for x in range(12):
for y in range(24):
list[x][y] = FieldState()
7
使用嵌套列表。这很简单,设置起来也容易:
field = [([None] * height) for x in range(width)]
field[x][y] = "*"
最清晰的方式可能是创建一个新的类:
class MineField(object):
class _SingleField(object):
mine = False
flagged = False
covered = True
width = None
height = None
def __init__(self, width, height):
super(MineField, self).__init__()
self.width = width
self.height = height
self._field = [[self._SingleField() for y in range(height)]
for x in range(width)]
self.init_field(10)
def init_field(self, minecount):
pass
def __getitem__(self, index):
x, y = index
return self._field[x][y]
可以这样使用:
> m = MineField(10,10) > m[4,9].mine False