我正在设计一个扫雷游戏,但我找不到关于如何登上“打开”的算法。如果你曾经玩过Minesweeper,那么第一次点击左右会显示很多瓷砖。它背后的算法是什么?
答案 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可以是其中一种方式。