能否设计一种没有死猜的扫雷程序

点开一格,判断是否形成死局,如果形成了死局,就置换盘面。
不过还有一种非常讨巧的做法:
把胜利条件定为“在所有的雷上正确地插上旗子,不必点开全部格子”即可,轻松避开终局死猜,降低死局率。不过此方法对付不了中局死猜。

■网友
我以前也纠结过这个问题……死猜的本质是地图上形成了信息的孤岛,例如:
能否设计一种没有死猜的扫雷程序

x表示雷,?表示未确定的格子,假定这局只剩这两格未确定且只剩一个雷扫雷的逻辑是通过【相邻格子】提供的数字信息判断雷的数量,当这种被雷和墙角围住的情况出现,就无法获取相邻格子的信息,形成了信息的孤岛。
解决办法,我也没什么妙招,就几个最基本的方式:
1.像其他回答里提到的,检测到孤岛的情况就重新生成,当今计算机算力如此充沛,重刷几次应该也感觉不到延迟。。(检测逻辑也就是遍历所有不是雷的格子,把相邻的加入同一个集合,最后看集合数量大于1就说明有孤岛形成)
2.就是不放弃这一局,那应该可以尝试替换,把堵路的雷和任意相邻的非雷格子互换,然后再检测一遍(感觉可能会形成死循环??)
3.提供额外信息,在玩家开始游戏后在地图外围一圈也显示数字,不过这样可能会大大降低全局难度影响体验,并且只能解决靠墙的孤岛,极端情况下应该会有被雷围了一圈的孤岛形成,也是不行的……

■网友
能。
根据规则是不同,无猜扫雷可分为三类。
第一类规则为,用算法保证局面中时刻有解。游戏过程中,如果玩家点到可能是雷的方格,就会判负。采用这类规则的扫雷有Chocolate Sweeper,这类规则称为强无猜扫雷。
第二类规则为,算法虽然不保证局面中时刻有解,但是算法能够时刻判断局面是否无解。游戏过程中,如果玩家遇到无解的局面,那么玩家的下一次点击无论点在哪一个方格,都不会判游戏失败;但是如果玩家遇到有解的局面,却没有点在一定不是雷的位置,游戏也会判负。采用这类规则的扫雷有Kaboom,这类规则称为弱无猜扫雷。
第三类规则为,算法保证局面中时刻有解。在游戏过程中,即使玩家点到可能是雷的方格,游戏也不一定判负。采用这类规则的扫雷,目前仅有无猜扫雷正式版v1.0,这类规则称为竞速无猜扫雷。
能否设计一种没有死猜的扫雷程序

无猜扫雷的各种规则在以上四类规则中,强无猜扫雷的难度最大,因为玩家必须准确判断出哪些位置不是雷并点击。由于算法保证了局面始终无猜,游戏有时会生成及其困难的局面,而即使遇到解不开的局面,玩家也不能猜,因此这种规则的游戏性是最低的。
弱无猜扫雷的难度仅次于强无猜扫雷,玩家需要准确地判断局面有解或无解,并选择判雷或猜雷。
标准扫雷的难度明显低于前两者,但是大于竞速无猜扫雷。标准扫雷在遇到必须猜雷的局面时,会使玩家的体验大打折扣。
竞速无猜扫雷的难度是最低的。不仅是因为这种扫雷在局面可判的情况下仍然可以猜雷,还因为在这种规则生成的局面中,一定不存在常见的猜雷局部,因此玩家有时可以利用这一点点开某些格子。
其中无猜扫雷正式版v1.0是开源的。
关注扫雷学,后台回复“无猜”免费获取无猜扫雷正式版v1.0的软件和源码。

■网友
这是我的一个思路
游戏进行中时 游戏本身也在做着标记,通过已经出现的数字,将一定会出现雷的地方做好标记,可能会出现雷的地方做好标记。如果玩家点击了可能出现雷的地方 则在不影响数字边缘的地方重新放置地雷的位置直到点击的这个位置是没有雷的为止。
这样死猜是一定对的,但是乐趣就大打折扣了。


推荐阅读