




全文預覽已結束
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
首先亮一下自己做出的掃雷游戲界面效果:還沒來得急改exe文件的圖標,剛下好ico文件,不過沒有合適的,所以就還沒換。 我做這個掃雷游戲的第一件事當然是想解決怎么讓這個界面看起來像掃雷那個樣子。我首先想到了按鈕控件可以響應鼠標點擊事件,所以就決定了使用MFC的對話框,用緊密排列的按鈕來當做雷區,索性就拉了幾個按鈕在界面隨意放著,然后Ctrl+c和Ctrl+v的湊夠100個按鈕。這樣一陣隨意操作之后,我急后悔了!太亂了,密密麻麻地,再怎么也要弄個10*10的方陣出來才像樣嘛所以干脆把按鈕全Delete掉,規規矩矩地先放5個按鈕進來,把按鈕的文字都刪掉,然后調整按鈕大小成一個方形,將5個按鈕選定布局一橫排,之后再復制這5個到后面緊挨著放好,這樣才弄好第一行雷區,接下來就10個10個的復制,對齊了。我想要是這個布局有網格的就好了,就不用我這樣一排一排的弄了第二步就是做上圖右邊那一列的游戲信息,簡單的就不用贅述了。第三步嘛自然是在雷區安排雷的位置了。這就需要為這100個按鈕安排序號以作區別,然后隨機數序號的按鈕下對應著一個雷。而我又打開該對話框的資源文件頭文件Resource.h發現關于這100個按鈕的ID設置是這樣的:#define IDC_BUTTON1 1000 #define IDC_BUTTON2 1001 #define IDC_BUTTON3 1002#define IDC_BUTTON98 1097 #define IDC_BUTTON99 1098 #define IDC_BUTTON100 1099所以我就干脆以1000-1099為序號,當然雷的標記是定義一個整數數組flg100,flgindex=0則不是雷,flgindex=1則是雷,其中index+1000對應按鈕的ID。第四步了,需要為這100個按鈕添加響應鼠標左鍵單擊事件和右鍵單擊事件,不想做得太復雜了,就沒做鼠標左鍵雙擊和鼠標左右鍵同時點擊的響應。當然只算鼠標左鍵和右鍵就已經是麻煩事了,比較要為100個按鈕添加呢!百度了一下多個控件響應同一個事件的添加方法,其中左鍵單擊有比較詳細的方法說明,就是先添加一個按鈕的左鍵單擊事件,再改Mine_SweepDlg.cpp如下幾句代碼:BEGIN_MESSAGE_MAP(CChusDlg, CDialog) /AFX_MSG_MAP(CChusDlg) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) /AFX_MSG_MAP END_MESSAGE_MAP()將其中的 ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 改為 ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON100,OnButton1) 即可實現100個按鈕響應同一個鼠標左鍵單擊事件函數OnButton1() 這只適用于ID連續的控件。當然鼠標左鍵單擊事件函數需要知道是哪一個ID的控件發生的,所以還需要傳遞一個ID參數,做下面幾個位置的修改:Mine_SweepDlg.h中afx_msg void OnButton1(UINT uID);加入括號的參數,再在Mine_SweepDlg.cpp的事件響應函數中加入參數void CMine_SweepDlg:OnButton1(UINT uID)其中的uID就是100個按鈕的序號,而uID-1000就得到雷區標識的index了。然后我將響應事件作出的效果如圖:即點擊某一個方格,判斷周邊8個方格是否有雷標識,若沒有則隱藏該按鈕,若有則顯示周邊雷標識個數。若點擊的這個方格就是累標識,則彈出消息框提示游戲結束。以下附上事件響應函數的代碼:void CMine_SweepDlg:OnButton1(UINT uID) / TODO: Add your control notification handler code here int index=(int)uID-1000; int chack9; int i,j; if(flgindex=0)/如果該位置不是雷 chack_mine(index,chack);/獲取試探方向 for(i=0,j=0;iShowWindow(FALSE);/隱藏該按鈕 flgindex=2; m_score+=10; for(i=0,j=0;ichack0;i+)/隱藏周邊按鈕 int chac9; chack_mine(chacki+1,chac); for(int m=0,n=0;mShowWindow(FALSE); flgchacki+1=2; m_score+=10; else/否則顯示周邊雷數量 CString bu; bu.Format(%d,j); SetDlgItemText(index+1000,bu); m_score+=10; else/左鍵單擊了一個雷 SetDlgItemText(uID,*); m_minenum-; mine0-; m_score-=20; if(MessageBox(你觸雷了!游戲結束,提示,MB_OKCANCEL)=IDOK) KillTimer(1);/取消定時器 CDialog:OnOK(); 以上是完成了左鍵單擊的響應,至于右鍵單擊的響應,比較麻煩了一點,需要重載一個虛函數PreTranslateMessage(MSG* pMsg)。說是該函數可以獲取界面上的鼠標事件,包括了左鍵單擊,左鍵雙擊,左鍵按下放開,右鍵單擊等消息,然后可以根據消息來完成想要的功能。具體的重載方法是在類視圖里右鍵單擊Mine_SweepDlg,選擇Add Virtual Function ,在彈出對話框中左邊選擇PreTranslateMessage,然后確定。然后就可以在CMine_SweepDlg.cpp里編輯使得響應控件的右鍵。以下是我的函數代碼:BOOL CMine_SweepDlg:PreTranslateMessage(MSG* pMsg) / TODO: Add your specialized code here and/or call the base class if(pMsg-message=WM_RBUTTONDOWN)/鼠標點擊右鍵 CRect rc; CPoint ptCursor; GetCursorPos(&ptCursor);/獲取鼠標的位置信息 int pos; for(pos=1000;pos GetWindowRect(&rc);/獲取控件的位置信息 if(PtInRect(&rc,ptCursor)/右鍵點擊位置在某一個控件上 SetDlgItemText(pos,*); m_minenum-; if(flgpos-1000=1) mine0-; GetDlgItem(1100)- GetWindowRect(&rc);/獲取開始按鈕的位置信息 if(PtInRect(&rc,ptCursor)/右鍵點擊位置在某一個控件上 for(int i=1;i=mine0;i+) SetDlgItemText(minei+1000,*); return CDialog:PreTranslateMessage(pMsg); 到此,按鈕的鼠標左鍵響應,右鍵響應已經完成,接下來就是設置定時器刷新游戲用時和游戲得分。第五步,設置定時器。具體方法如下:1.雙擊資源對話框,對著對話框空白處右鍵,選擇事件;2.在左側的新建windows消息/事件下選擇WM_TIMER雙擊,然后確定;3.在出現的void CMine_SweepDlg:OnTimer(UINT nIDEvent)中添加需要做的事4.為開始按鈕添加鼠標左鍵單擊響應事件,添加SetTimer(1,1000,NULL);/啟動定時器,1秒調用一次OnTimer函數。 以上就是我做這個掃雷游戲的大致過程了。其中遇到的各種問題,也讓我學到不少東西,首先就是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物降解塑料行業跨境出海項目商業計劃書
- 發泡設備項目可行性研究報告
- 基層醫療衛生機構信息化建設中的移動醫療應用研究
- 2025年工業互聯網平臺數據備份與恢復方案設計指南報告
- 2025年農業物聯網在農產品質量追溯中的應用效果分析報告
- 房地產企業多元化戰略2025年實施路徑與產業鏈協同優化研究報告
- 【7歷期末】安徽省安慶市外國語學校2023-2024學年七年級下學期期末歷史試題(含解析)
- DB62T 4189-2020 地理標志產品 甘加藏羊
- 污水處理廠及管網工程可行性研究報告
- DB62T 4083-2019 馬鈴薯脫毒原原種繁育病蟲害防治技術規程
- 大班社會教案看不見的世界教案及教學反思
- 《企業經營盈利能力分析-以藍帆醫療為例(論文)》8700字
- 國際貨運代理的責任與責任風險防范
- 機械制造技術基礎課程設計講課用
- 胎盤早剝應急預案演練腳本
- 保障性租賃住房申請表
- 固定資產折舊年限表
- 臨床醫學基礎科目十門聯考習題冊(題庫一頁兩版)
- 《中國近現代史綱要》課后習題答案詳解
- 區域地理拉丁美洲-巴西
- 語文小學二年級《二年級下冊第三單元〈中國美食〉作業設計》
評論
0/150
提交評論