您的位置 网站首页 潮科技

我从扫雷中发现的秘密?让我在编程中如鱼得水

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

扫雷游戏,相比用过电脑的人都玩过。有一些人认为扫雷是瞎点的,但如果这样设计这个游戏就没有任何意思了。首先我先给大家科普一下扫雷游戏该如何玩。


首先,扫雷的数字代表周围一圈(8个方块,边缘处为5个,角处3个)的地雷个数。比如数字为3,代表周围的8个方块有3个是地雷。如果开的是新局,那么点击第一下永远不会触雷,win 7系统是点击的区域周围一圈也不会有雷

那么,扫雷有哪些常见的技巧呢?

(1)当某块的数字与未知方块的个数相同时,那么未知的方块肯定都是地雷。那么直接右键把所有的未知方块都标上旗子。如下图,你只需要把这两个绿色的块都标记上旗子即可。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

(2)当某方块周围的旗子的个数和本身数字相同,而仍有未点开方块。说明周围所有未点开方块肯定都不是地雷,直接同时点击左右键把它们解开。比如下面这个,你把两个没有标绿色的方块的都点开即可。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

(3)基本的逻辑推理,比如看下面。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

1,2,3,4四个方块中:1,2,3有一个是雷,2,3,4中有两个是雷,3,4中有一个是雷。那么从后两个条件,2必定是雷。然后根据条件一,1和3肯定不是雷,最后根据条件三,4肯定是雷。

原来小小的扫雷游戏,还有这么多技巧,简直是烧脑神器!

扫雷分为三个等级,初级10个雷,地雷密度10/81=0.123。中级40个雷,地雷密度是40/256=0.156。高级99个雷,地雷密度是99/480=0.206。从地雷密度上看,难度是递增的,一般掌握了扫雷的技巧,玩初级中级都不成问题,高级就需要人品了。

那么扫雷还有什么不为人知的秘密呢?我在网上查找,整理出问的最多的问题。

①初级中级高级到底有多难?能否完全通过逻辑推理而不碰运气取胜?初中高级能赢的极限概率有多大?

②高级我老是出现最后纠结的二选一,那么这个概率有多大?

⑤地雷密度是否有临界值,超过这个值,就无法取胜或者无法打开地图。这与板块的大小有没③扫雷的难度是否与板块的形状有关?正方形板块是否比长方形更容易?

④最大自定义24×30,我设置多少个地雷合适?有关系?

为了回答这个问题,就需要大量的实验,手动玩扫雷是不现实的,为了实现全自动化,那编程是必不可少的。还好我经过两个多星期的编程,写了1000多行代码,成功实现了自动扫雷!

先给大家贴一张程序代码的截图,代码地址请在置顶评论中找。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

好啦,有了程序,我们就可以大量收集实验数据了,该回答这些问题了。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

(一) 初中高级的运行报告


我运行我的程序去玩初中高级,得到如下的数据。

初级的获胜概率是94%,打开80%以上地图的概率是99%,1秒钟能运行3万局。

中级的获胜概率是84%,打开80%以上地图的概率是98%,1秒钟能运行1万局。

高级的获胜概率是36%,打开80%以上地图的概率是80%,1秒钟能运行4000局。

因为高级顶尖选手的极限胜率也就40%左右,所以我这个程序的效率可以说是相当高了。另外还可以看到,扫雷中级失败率为16%,但是打开80%地图的失败率只有2%。说明什么。你每失败8局,有7局都是在最后的关头失败的。为山九仞,功亏一篑。越往后失败率越高,这就是扫雷这个游戏的坑爹之处。

你是不是有这样的体验,高级的扫雷历经千辛万苦,惊心动魄,最后,duang !

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发


我怎么这么倒霉?

别着急,这种情况我是见得多了。我专门模拟了初中高级这种情况出现的概率。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

虽然高级出现二选一的概率只有10%,但是我周围大多数人高级的成功率不到10%,再加上出现了选错给人印象深刻(毕竟玩了很长时间)。所以相比而言出现感觉高级二选一的概率还是相当大。

很多人嘲讽扫雷失败的人,说你扫雷失败别怪人品不行,只能说明你逻辑不够好。那么,扫雷到底需不需要人品?为此,我又做了数十万次实验,这里我对程序进行修改,如果逻辑判断不出哪个是雷不是去随机点,而是直接判输。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

我们可以看到,初级和中级在绝大多数情况下不需要人品,高级在前半程也基本不需要运气,但是在最后,人品还是很重要的。

实际上,刚才出现二选一的情况也是不能逻辑解出的,而且这种情况不可避免。

有人有个习惯,先点开四个角。这种方法究竟可不可行。

我改了一下程序,从8万多局的结果看: 高级扫雷点开4个角以后,如果一开始触雷就算输,那么完成概率只有17%.然而如果你挺过了几下没有触雷,那么完成的概率就提升到了50%,比之前的36%高14个百分点。

所以扫雷一开始点开4个角是一个不错的选择,当然你需要忍受点开四个角就触雷的情况,毕竟四个角都没雷的概率不到一半,这也是一个很烦人的。

而且,如果你玩的是WIN7系统,那么第一下我建议你不要点左上角,而是点左上角的右下方的一个格子,就是问号这个地方,这样效率更高,充分利用第一下周围都没雷的优势。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

我小时候特别喜欢把扫雷调到自定义最大,就是24X30。很显然,如果设置10个地雷,那么很容易赢,如果设置成667个雷,赢是不可能的,一辈子都不可能赢的!


那么,最大自定义下的扫雷设置多少个雷,对应什么难度?

首先,本人做了数百万次实验,绘出了下面雷数和获胜率打开率的关系。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

红线是获胜,黑线是打开80%地图概率地雷数在90个以内的时候,基本能成功。从90开始,胜率急剧下降,超过170个几乎就没有胜算了。地雷数在150个以内的时候,打开大部分版面是不成问题的,超过180个,连版面都打不开。

那么,扫雷的难度该如何评估呢?人毕竟不是计算机,人总是会犯错误的,比如脑一残,手一抽,就点错了。时间越长,犯错的几率越大。

首先我们定义难度,难度就是人类失败概率/获胜概率。

人类获胜的概率,我们可以定义为计算机获胜概率×犯二指数。

这里给出犯二指数的推导过程呢?

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

那么,如何确定时间常数呢,这个实际上我也没什么科学依据,就按照经验来确定一个吧。根据本人和周围扫雷玩的好的人经验,我们因为犯二而在高级失败的概率是一半左右。所以取高级时间下犯二概率为1/2。当然你也可以取其他的参数。

通过上面的定义,我们可以画出难度和地雷数目的关系曲线。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

然后我们计算出初级难度是0.09,中级是0.36,高级是3.73。高级与中级的难度高级和中级的差距远远要比中级和初级的差距要大。

然后,结合这个曲线,我们发现,24×30自定义下,45个雷大致相当于初级难度,90个雷大致相当于中级难度,145个雷大致相当于高级难度。170个雷可以视为专家级难度。

当然你也许会认为,145个雷和高级难度不对等啊?这里考虑到犯二的情况了,毕竟玩的时间要长一些,你可以修改犯二指数的时间常数,那么和大概150-160个雷相当。

或者,同样板块下,扫雷的难度和板块形状有关吗?

我们设置面积为240,布置50个雷,观察不同的形状下地雷的胜率。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

我们发现,随着形状从长方形接近正方形,扫雷成功的概率不断上升。但是大家注意红色的两个,这两个概率相差很近。

其实这个原因也好解释,毕竟边界上给出的信息要比中间小,所以边界越长越难。

是否在板块足够大的时候,扫雷的胜率就只和地雷密度相关了?换言之,如果我们把长宽扩大一倍,然后地雷数目变为原来的4倍,那么胜率几乎一样? 我做了数百万次实验,结果如下。

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

获胜的概率不仅和扫雷密度有关,而且和板块的大小也有关。板块越大,获胜的扫雷密度的临界值越小。这是因为,板块越大,边界长度越大。

那么,地雷密度和打开地图的概率如何?

我从扫雷中发现的秘密?让我在编程中如鱼得水

C程序开发

地图越大,概率突变的现象越来越明显。设想无穷大的板块,概率会从1突变成0。地雷密度0.23是个临界点,和地图大小无关。超过0.23,则连地图都展不开。

为什么打开80%地图有个相变呢,这是因为,打开80%地图是不考虑边界效应的,所以相变的特性就出现了。

这个现象,在物理学上解释为相变。比如,水结冰的过程就是一个相变的过程,如果你画水的形态和温度的关系,会在0摄氏度的情况下出现突变。扫雷也有个相变,地雷密度经过实验发现是0.23。

最后我经过这么多研究,得出这些结论

携景网为您提供:我从扫雷中发现的秘密?让我在编程中如鱼得水.

内容均来源于原创和网络转载,所有内容仅代表个人观点,与本网站无关.

转载请保留出处及本站地址:https://www.xiejing.com/technology/13742.html

本文相关专题:世界上面积最大的扫雷扫雷技巧口诀扫雷是什么梗高级扫雷世界纪录

联系我们

联系我们

客服&投诉: QQ交谈

合作微信:xiejinghezuo

邮箱:

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部