我设计一个扫雷游戏,但我无法找到如何登上算法“打开”。如果你曾经玩过扫雷,第一次点击就会显示很多的扫雷。它背后的算法是什么?扫雷板“开放”
扫雷板“开放”
回答
类似的东西,以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
我们打开当前单元格后。
请注意,如果您开始关闭具有非零值的单元格,则不会打开其他单元格(至少在大多数版本的游戏中) - 这将由上述算法处理。
如果你开始点击一个矿,该矿被移动到其他位置,这样你就不会在你的第一次点击死亡。 – Teepeemm
@Teepeemm视游戏而定 - 有些人很高兴让你点击一个地雷开始。但基于第一次点击生成游戏似乎是一个更好的主意(但显然更复杂)。 – Dukeling
@Dukeling我不太明白'!open'的意思。请你能详细说明你的伪代码中'open'的不同用法吗? – LazySloth13
Flood fill可能的方式之一。
- 1. 在扫雷板上递归映射地雷
- 2. 扫雷算法
- 3. UVA 10189:扫雷
- 4. 扫雷游戏
- 5. 扫雷问题
- 6. GUI的扫雷
- 7. 扫雷stackoverflowerror
- 8. 扫雷FloodFill JavaScript
- 9. UVA 10189扫雷
- 10. 扫雷地雷不会放置或出现
- 11. 的扫雷游戏
- 12. AI扫雷计划
- 13. 扫雷Java继承
- 14. C++扫雷艇AjacentMines
- 15. VB.NET扫雷问题
- 16. Java的GUI扫雷
- 17. 2D阵列扫雷周边地雷
- 18. 扫雷地雷的数量java
- 19. 从扫雷位置获取信息在扫雷
- 20. 扫雷艇特殊情况
- 21. C++扫雷无限循环
- 22. Python逻辑在扫雷
- 23. 创建扫雷UI控件?
- 24. 我的扫雷码在C
- 25. 扫雷清算算法
- 26. 扫雷算法卡住了
- 27. 扫雷行动事件
- 28. 扫雷算法UI问题
- 29. vb.net:扫雷点击事件
- 30. 的Python:floodfill算法扫雷艇
这只是好醇”递归。用户点击平方(x,y)? 'show(x,y)'。在函数内部,它示出了正方形,和,*如果正方形是空白*,调用'显示(X-1,Y)','显示(X + 1,Y)','显示(X,Y-1 )'和'show(x,y + 1)'。 (也许对角线也是,我现在不记得了。) –
小心永久循环。 – ChronoTrigger