⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 说明文档.txt

📁 可以很快完成 一个应用小软,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,自己看看吧!
💻 TXT
字号:
在网上看到有人编写过自动扫雷的程序,但是很不理想,高级几乎扫不出来,就索性自己编写了一个。效果还算满意,基本上高级可以在5秒内扫出来(如果运气好的话),我机器上的记录现在是三秒。

任何自动扫雷程序肯定是不能完全扫出来的,因为许多布局情况单凭算法是无法解决的,那需要凭你的运气来完成。但是算法的性能优劣在于它是否可以解决所有可以判断的情况,这也是不同算法的关键所在。我记得很早以前看过一位高人编的类似的程序采用了模式识别的算法,将多种局部布局用文本文件的方式记录下来,在程序运行的过程中去匹配,也取得了不错的效果。不过没有见到源程序。


本程序的算法没有采用匹配模式,基本上可以完成大多数情况的高级扫雷(初级和中级布局情况过于简单,不值得讨论),但是还有进一步改进的地方,例如下面的情况:

      ??....1.
      ??..@**.
      ??B3*2..
      ??B.*...
      ........ 
“*”:表示未知区域,“.”:表示该区域周围没有雷,“B”:表示已经标识是雷

在这种情况下,判断@可根据2左边的3和上面的1来推断,分析可知@的状态为不是雷,这种情况下的判断相当较为复杂。

此外下面的情况会更为复杂

      ??....1.
      ....@**.
      .1*2*2..
      ..*.*...
      ........ 

一般的决策只需要对某一方块周围的3×3区域进行扫描就可以判断出来,但如果这样判断不出来时,就需要对其周围的5×5区域进行扫描分析,要实现上面这种情况则需要再扩大扫描范围,这样计算量就非常复杂了。

最后,还有一种情况就是:

      ....B.**
      .....2**
      .......1
      ........
      ........

该种情况不论什么算法都无法判断出来,因为可以有多种雷的分布都可以满足条件。
但是如果在游戏快结束的时候,而且只有这个区域没有扫的时候(或者还有其他区域没有扫,但是通过判断知道其他区域有确定的雷数)
则可以根据剩下雷的个数来判断雷区的分布,如计数器显示只有一、二、三颗雷时,都可以很容易知道该区域雷的分布。

本程序在xp上(XP、2000、NT下的扫雷程序是一样的,但是和98下和2003下的有所差别)只实现了上面算法的第二个层次,即对周围5×5区域进行“不完全的”扫描分析(如果分析我的代码可以知道为什么是不完全的),对再大范围的区域就没有进行分析了,并且对上述的最后一种情况也没有分析(它需要全局考虑,前面所说的都是局部扫描)。所以算法还是不完美。但即便如此,也已经可以解决95%以上的问题了。

另外,本人还考虑的一种更加通用将上述过程全部解决的算法,但时间关系还没有实现,有兴趣的网友可以给我发邮件联系。

aquasonren@163.com
QQ: 9730800

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -