驚喜在后面,大家都看看吧!
昨天和大家分享的是用C實現(xiàn)掃雷計劃,今天和大家分享的是“掃雷插件”!
0.掃雷插件效果圖
1.掃雷圖像分析
下面的代碼可以得到一個點的顏色,核心代碼是GetPixel。
2.模擬鼠標操作
其實鼠標操作我知道的有兩種,一種是下面寫的這種
還有種是:
3.掃雷外掛流程分析
看起來比較復雜的流程,我本來用while的,比較難搞,最后用了Goto,流程就變得非常清晰。還弄了一個struct做為標志傳進去分析,看分析是什么結果,決定goto到哪個步驟。
4.分析掃雷游戲
來講下最難的部分:就是上圖中的進行組合分析。
a + b = 1
a + b + c = 1
要得出c = 0
我用一個類叫CellCombination來表示一個子項,它有N多個格子的坐標組成。還有一個Int來存總的雷數(shù)。我還記錄了是哪個格子產生的子項。
當我們分析一個格子周圍8個格子的情況時候,如果發(fā)現(xiàn)有多解的情況下,就產生一個子項。然后通過兩兩子項相減,來確定一些格子的狀態(tài)。
a + b = 1
a + b + c = 1
c + d + e = 2
f + g + h = 1
如何通過兩兩相減呢?比如一共產生了上面4個子項。就是4個里面選2個進行操作。就是一個組合算法??梢杂梦疑洗螌懙乃惴ńM合算法 C++高效實現(xiàn) (二進制輔助法)。如果一共有10個子項,一共有10 * 9 / 2 即45次比較。如果一共有20個子項,一共有20 * 19 / 2 即190次比較。算法效率也不是特別高。
經過實戰(zhàn)分析后,我發(fā)現(xiàn)掃雷中會有很多格子數(shù)量是2的子項,比如a + b = 1,但是兩個這樣的子項是不會產生結果的。 所以我先對所有子項進行排序,從尾部開始往前移動,移到數(shù)量是2的就退出了。另外一個來指向當前前一個,直到第一個。
如何進行兩個子項相減呢?先把教長的子項拷貝一份,然后循環(huán)短的子項中的每一個點,每找到一個結果就從長的子項的vector中刪除一個。進行兩個子項相減的程序就不列出來了,也做了很多優(yōu)化,如果兩個子項的長度是一樣的,就直接退出,不會有結果的,還有如果兩個子項的ParentCell距離比較遠,可肯定不會有結果。如果有一個找不到就退出,也是不會有結果的。
想要知道更多相關資訊 關注后 幫忙轉發(fā)哦,然后私信小編,回復 01 獲取其它資訊?。?!不會讓你失望!
1.《【掃雷作弊】昨日用C語言實現(xiàn)掃雷小程序,今日教你“掃雷外掛”!》援引自互聯(lián)網,旨在傳遞更多網絡信息知識,僅代表作者本人觀點,與本網站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《【掃雷作弊】昨日用C語言實現(xiàn)掃雷小程序,今日教你“掃雷外掛”!》僅供讀者參考,本網站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內容來源地址,http://f99ss.com/gl/3154622.html