惊喜在后面,大家都看看吧!

昨天和大家分享的是用C实现扫雷计划,今天和大家分享的是“扫雷插件”!

0.扫雷插件效果图

1.扫雷图像分析

下面的代码可以得到一个点的颜色,核心代码是GetPixel。

2.模拟鼠标操作

其实鼠标操作我知道的有两种,一种是下面写的这种

还有种是:

3.扫雷外挂流程分析

看起来比较复杂的流程,我本来用while的,比较难搞,最后用了Goto,流程就变得非常清晰。还弄了一个struct做为标志传进去分析,看分析是什么结果,决定goto到哪个步骤。

4.分析扫雷游戏

来讲下最难的部分:就是上图中的进行组合分析。

a + b = 1

a + b + c = 1

要得出c = 0

我用一个类叫CellCombination来表示一个子项,它有N多个格子的坐标组成。还有一个Int来存总的雷数。我还记录了是哪个格子产生的子项。

当我们分析一个格子周围8个格子的情况时候,如果发现有多解的情况下,就产生一个子项。然后通过两两子项相减,来确定一些格子的状态。

a + b = 1

a + b + c = 1

c + d + e = 2

f + g + h = 1

如何通过两两相减呢?比如一共产生了上面4个子项。就是4个里面选2个进行操作。就是一个组合算法。可以用我上次写的算法组合算法 C++高效实现 (二进制辅助法)。如果一共有10个子项,一共有10 * 9 / 2 即45次比较。如果一共有20个子项,一共有20 * 19 / 2 即190次比较。算法效率也不是特别高。

经过实战分析后,我发现扫雷中会有很多格子数量是2的子项,比如a + b = 1,但是两个这样的子项是不会产生结果的。 所以我先对所有子项进行排序,从尾部开始往前移动,移到数量是2的就退出了。另外一个来指向当前前一个,直到第一个。

如何进行两个子项相减呢?先把教长的子项拷贝一份,然后循环短的子项中的每一个点,每找到一个结果就从长的子项的vector中删除一个。进行两个子项相减的程序就不列出来了,也做了很多优化,如果两个子项的长度是一样的,就直接退出,不会有结果的,还有如果两个子项的ParentCell距离比较远,可肯定不会有结果。如果有一个找不到就退出,也是不会有结果的。

想要知道更多相关资讯 关注后 帮忙转发哦,然后私信小编,回复 01 获取其它资讯!!!不会让你失望!

1.《【扫雷作弊】昨日用C语言实现扫雷小程序,今日教你“扫雷外挂”!》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【扫雷作弊】昨日用C语言实现扫雷小程序,今日教你“扫雷外挂”!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3154622.html