如何在Python中表示扫雷网格?

4 投票
7 回答
4914 浏览
提问于 2025-04-15 16:25

在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

撰写回答