首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python语言中表示MineSweeper网格?

如何在Python语言中表示MineSweeper网格?
EN

Stack Overflow用户
提问于 2009-11-27 04:17:32
回答 6查看 4.7K关注 0票数 3

在Python语言中,您会使用什么数据结构来表示MineSweeper网格的内部状态?

每个x,y位置将保存一个数值,该数值表示其当前单元格状态(未探索,我的,标志,?)。

我应该使用嵌套列表吗?这似乎是最接近二维数组的东西,也是我可能会在任何其他语言中使用的(即二维数组)。

我没有使用Python的经验,所以有人能给我一个建议吗?

EN

回答 6

Stack Overflow用户

发布于 2009-11-27 04:26:28

您可以使用一个二维数组,为每个字段的状态保存对象:

代码语言:javascript
复制
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()
票数 6
EN

Stack Overflow用户

发布于 2009-11-27 06:14:50

为了混用另一个选项,您可以使用按元组索引的字典

代码语言:javascript
复制
board = {}
board[1, 2] = 9
票数 3
EN

Stack Overflow用户

发布于 2009-11-27 04:54:41

如果您使用Board类的实例,则可以在以后随时更改内部表示。

代码语言:javascript
复制
class Board(object):
    def __init__(self, width, height):
        self.__width, self.__height = width, height
        self._board = [[FieldState() for y in xrange(height)]
                       for x in xrange(width)]
    @property
    def width(self):
        return self.__width

    def mark(self, x, y):
        self._board[x][y].mark()

    def __getitem__(self, coord):
        """
        >>> board = Board(3, 4)
        >>> field = board[1,2] # 2nd column, 3rd row
        """
        x, y = coord
        return self._board[x][y]

    ...

其中FieldState@zlack's answer中的类似。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1805480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档