一、實驗的目的和意義
這次實驗是為了讓我們對CE的使用和對逆向思維有進一步的了解和認識,這次實驗要求我們分析“初級”、“中級”和“高級”的棋盤記憶體地址范圍;找出“雷數”、“笑臉”和“計時器”的記憶體地址;分析地雷存放的演算法;以及利用思維導圖分析“掃雷”游戲軟體的作業原理,
二、雷數的記憶體地址
雷的數目是固定的,所以我們采用精確掃描的辦法就可以找到雷數的記憶體地址,首先打開游戲的自定義,可以看到雷的默認數量默認為70,所以掃70,

因為掃描70得到的結果過于多,所以我們通過自定義將雷數修改為60,再次精確掃描60,可以看到掃描出了3個基址,此刻我們要做的就是判斷哪一個基址才是雷數的記憶體地址,

判斷雷數記憶體地址的方法就算從CE上修改地址的數值,觀察掃雷自定義中的雷數是否會發生相應的改變,經過相應的操作可以判斷出010056A4為雷數的記憶體地址,

三、時間的記憶體地址
(1)計數器的時間也是一個具體的值,所以我們也可以通過精確數值掃描出來,游戲開始之前計數器上的數是0,所以我們掃描0,

因為第一次掃描的結果太多,選擇介于什么數值之間再次掃描,所以時間的記憶體地址為0100579C,

四、笑臉的記憶體地址
因為笑臉沒有準確的數值,所以我們沒有辦法根據數值進行精確掃描,但是我們可以發現笑臉只有兩個狀態:一個是游戲進行的時候,一個是還原游戲的時候,所以我們通過0和1進行掃描,游戲進行狀態輸入1進行掃描,還原游戲之后輸入0進行掃描,首先是游戲進行狀態,輸入1進行掃描,

點擊笑臉,將游戲還原,輸入0進行掃描,

點擊一個小方塊,輸入1進行掃描,

點擊笑臉,將游戲還原,輸入0進行掃描,可以看出笑臉的記憶體地址為01005164,若想驗證結果是否正確,可以將這個地址添加到地址欄中觀察他的數值是否在游戲初始階段為0,在游戲進行階段為1,

五、“初級”、“中級”和“高級”的棋盤記憶體地址范圍
1.初級棋盤的記憶體地址范圍
將雷數的記憶體地址添加到地址欄后右鍵,點擊瀏覽相關記憶體區域,然后點擊棋盤在CE的記憶體區域上會閃紅,我們應該明白的是棋盤是連續的所以棋盤地址也應該是連續的,點擊相鄰的棋盤觀察記憶體區間上閃紅的記憶體是否也連續,通過觀察,初級棋盤的第一個記憶體地址為0100535421,最后一個記憶體地址為01005464D,所以中級期棋盤的記憶體地址范圍為0100535421-01005464D9.


2.中級棋盤的記憶體地址范圍
通過觀察,中級棋盤的第一個記憶體地址為01005354F1,最后一個記憶體地址為0100554470,所以中級期棋盤的記憶體地址范圍為01005354F1-0100554470,


3.高級棋盤的記憶體地址范圍
通過觀察,高級棋盤的第一個記憶體地址為01005354F1,最后一個記憶體地址為010055546E,所以中級期棋盤的記憶體地址范圍為01005354F1-010055546E,


六、分析地雷存放的演算法
- 隨機生成雷區
這里我們使用隨機函式來實作雷區的隨機化,盡量保證每個格子生成雷的概率相等;每次從當前坐標點之后的二維陣列中隨機選擇一個坐標,并將生成的隨機坐標(randx,randy)與當前選擇的坐標互換,實作一次隨機選擇;
2.計算每個格子周圍的雷的數量
以當前坐標點為中心,對周圍八個點進行遍歷,每個雷的位置L[x][y]值為1,設定一個函式用于判斷當前遍歷的坐標點是否在二維陣列范圍內,將每個點周圍的雷的數量存盤在一個新的二維陣列numbers中;
3.點擊空白打開一片雷區的演算法
對當前是空白的坐標點,對其周圍上下左右四個方向進行深度優先遍歷,碰到數字或者雷時停止向下的遍歷
七、分析掃雷游戲軟體的作業原理

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404061.html
標籤:其他
上一篇:“哆啦生活服務商城“上線通知
