- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
物件导向专题报告
物件導向專題報告
一、細分說明
1.1需求分析
遊戲規則及操作方法:
遊戲的目的是要在不掀開任何藏有地雷的方塊下,以最快的速度找出所有的地雷假如方塊上出現數字,該數字代表其方塊周圍的八個方塊中共藏有的地雷數若要標示某個方塊可能藏有地雷,在該方塊上按一下滑鼠右鍵如果您已找出所有圍繞在編號方塊的地雷,則可同時在該編號的方塊上按一下滑鼠左鍵和右鍵,以掀開四周剩餘的方塊。如果已標記數字的方塊周圍不全是地雷,當滑鼠二個按鈕同時按一下數字標記的方塊時,則會壓下 (或閃爍) 其他未掀開的或未標記的方塊
慢慢一格格掀開
標示出所有地雷即過關
1.2 技術分析
關鍵技術
本程式主要遊戲範圍為地雷區,考慮程式執行速度及盡量節記憶體需求考量下,採用 Win32 API 有關 Graphics 的部份 - InvalidateRect及 VCL API - Frame3D() 並搭配 Windows Message 處理機制來實作,主要應用技術分述如下:
1資料結構 :
遊戲的地雷區為一 M x N 的二維陣列,且每一格子的狀態可分為未打開、已打開、已設旗幟、按住滑鼠時產生凹陷、地雷、爆炸的地雷、數字1到8、及附近都沒有地雷放置的空白安全區;為節省記憶體空間,故採用位元操作的方式,以一個 Byte 儲存一格的狀態值,以名為 FGrids 的二維陣例儲存狀態表,每一個 Bit 所代表的意義如下:
7 6 5 4 3 2 1 0 Bit 0-3 : 儲存附近共有幾顆地雷,若是 0 則代表附近是安全區域。
Bit 4 : 若為 1 表示此格為炸彈。
Bit 5 : 若為 1 表示按下滑鼠左鍵未放開,此時為凹陷的狀態。
Bit 6 : 若為 1 表示使用者設置旗幟。
Bit 7 : 若為 1 表示使用者已掀開,此時可能顯示數字或空白。
另外若為 0xFF 則代表使用者踩到地雷區,顯示的圖形為爆炸的地雷。
2圖像繪製 :
地雷區的繪製主要是利用override 物件的 Paint() 處理函式,因Windows 偵測到元件需重畫時會送出 WM_PAINT 訊息,而當我們接放到此訊息時就要負責依目前地雷區每一格的狀態值的不同繪製每一格的圖像,如此組合成一 9 x 9、16 x 16 或 16 x 30 的地雷區;另外在遊戲過程中,滑鼠按下時只會改變某一格的狀態,所以我們利用 InvalidateRect() 來處理,而不是呼叫 Update() 或 Repaint() 將整個地雷區重畫。
3.滑鼠操作 :
因踩地雷為利用滑鼠右鍵來掀開地雷及用滑鼠左鍵來標示旗幟,所以要攔截有關滑鼠的 Windows Message,然後依不同的訊息更新狀態表,再呼叫 InvalidateRect() 。
訊息代號 觸發時機 WM_MOUSEMOVE 當滑鼠在地雷區上時移動時 WM_LBUTTONDOWN 當在地雷區上按下滑鼠左鍵時 WM_LBUTTONUP 當在地雷區上放開滑鼠左鍵時 WM_RBUTTONDOWN 當在地雷區上按下滑鼠右鍵時 WM_RBUTTONUP 當在地雷區上放開滑鼠右鍵時 4.快速打開的演算法 :
當滑鼠按到安全區域時,程式會自動將周圍同樣是安全區的格子打開,作法為實作一 Press() Function,模擬按下滑鼠左鍵時更新狀態表的功能;假設滑鼠按下(X,Y)的格子,若為安全區域,則開始從 (X-1,Y-1)的地方開始檢查,若也是安全區域就遞迴呼叫 Press(),直到碰到地雷區為止,此函式在同時按下滑鼠左右鍵時也會被呼叫,只不過此時需先檢查周圍的地雷是否都已被標示出來,是的話才呼叫 Press()。
5.記錄檔 :
以 TIniFile 記錄破記錄者的資料,包括破關秒數、姓名、時間及留言,其中留言因為是用 TMemo讓使用者輸入多行,但 TIniFile 只能寫入 TString,不能寫入 TStrings,所以在記錄及讀取時需作特別處理,採用的方法是在記錄時為每一行結尾加上 $ 符號,讀出時將 $ 以 #A#C取代,記錄檔檔名為 Record.Ini檔,內容範例如下:
[初級]
秒數=13
記錄時間=2004/6/13 上午 10:55:52
姓名=abc
留言=123$
[中級]
秒數=49
記錄時間=2004/6/13 下午 01:33:07
姓名=Just
留言=
[高級]
秒數=93
記錄時間=2004/6/13 下午 01:24:32
姓名=xya
留言=aaaaaaaa$ad$$asdf$二、主要檔案說明:
Mine.dpr Delphi 6 程式專案檔。 Mine.res 專案資源檔。 Bomb.dcr 內含在 Delphi 6 元件面板上所顯示的 Icon。 Bomb.pas
文档评论(0)