algorithm - 扫雷板 "opening up"

标签 algorithm minesweeper

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

最佳答案

你可以使用 flood-fill算法,但仅适用于没有任何相邻炸弹的单元格(将显示“0”或无值)及其周围的单元格。

一些伪代码:

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

请注意这与“正常”的洪水填充算法有何不同:

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

差异的原因可以看这个例子:

1 1 2
2 0 3
1 2 3

正常的flood-fill算法只会填充0,但是我们要填充上面的所有内容,因此我们应该在打开当前后检查hasNeighbouringBombs单元格。

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

关于algorithm - 扫雷板 "opening up",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19633718/

相关文章:

algorithm - 傅里叶处理算法如何处理 "data edges"

python - 扫雷代码在没有最大递归深度的情况下打开零框

java - 将 JButton 数组添加到 JFrame 时出现 NullpointerException

java - 无法在列表中生成随机分散的真值和假值

algorithm - 哪些元启发式适合构建扫雷求解器?

c - 我在打字时遇到一些麻烦

algorithm - 施特拉森矩阵乘法

c# - 通过键盘按下输入文本的最短路径

python - 一次一个字符构建一个字符串,检查它是否包含相邻的重复子字符串

java - 寻找一种用于对不同类型的对象进行排序的算法