扫雷板“开放”

时间:2013-10-28 11:33:52

标签: algorithm minesweeper

我正在设计一个扫雷游戏,但我找不到关于如何登上“打开”的算法。如果你曾经玩过Minesweeper,那么第一次点击左右会显示很多瓷砖。它背后的算法是什么?

2 个答案:

答案 0 :(得分:3)

类似于flood-fill的东西,但仅适用于没有任何相邻炸弹的单元格(显示“0”或没有值)及其周围的单元格。

一些伪代码:

floodFill(cell)
  if !cell.isOpen
    cell.open()
    if cell.hasNeighbouringBombs
      for each neighbour n of cell
        floodFill(n)

请注意这与“普通”泛洪填充算法有何不同:

floodFill(cell)
  if cell.hasNeighbouringBombs && !cell.isOpen
    cell.open()
    for each neighbour n of cell
      floodFill(n)

可以在一个例子中看到差异的原因。给出:

1 1 2
2 0 3
1 2 3

正常的只填充0,但我们想要填写以上所有内容,因此我们只需在打开当前单元格后检查hasNeighbouringBombs

请注意,如果您开始点击具有非零值的单元格,则不会打开任何其他单元格(至少在大多数游戏版本中) - 这将通过上述算法进行处理。

答案 1 :(得分:1)

Flood fill可以是其中一种方式。