MFC自制掃雷游戲心得_第1頁
MFC自制掃雷游戲心得_第2頁
MFC自制掃雷游戲心得_第3頁
MFC自制掃雷游戲心得_第4頁
MFC自制掃雷游戲心得_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、首先亮一下自己做出的掃雷游戲界面效果:還沒來得急改exe文件的圖標(biāo),剛下好ico文件,不過沒有合適的,所以就還沒換。 我做這個掃雷游戲的第一件事當(dāng)然是想解決怎么讓這個界面看起來像掃雷那個樣子。我首先想到了按鈕控件可以響應(yīng)鼠標(biāo)點擊事件,所以就決定了使用MFC的對話框,用緊密排列的按鈕來當(dāng)做雷區(qū),索性就拉了幾個按鈕在界面隨意放著,然后Ctrl+c和Ctrl+v的湊夠100個按鈕。這樣一陣隨意操作之后,我急后悔了!太亂了,密密麻麻地,再怎么也要弄個10*10的方陣出來才像樣嘛所以干脆把按鈕全Delete掉,規(guī)規(guī)矩矩地先放5個按鈕進(jìn)來,把按鈕的文字都刪掉,然后調(diào)整按鈕大小成一個方形,將5個按鈕選定布局

2、一橫排,之后再復(fù)制這5個到后面緊挨著放好,這樣才弄好第一行雷區(qū),接下來就10個10個的復(fù)制,對齊了。我想要是這個布局有網(wǎng)格的就好了,就不用我這樣一排一排的弄了第二步就是做上圖右邊那一列的游戲信息,簡單的就不用贅述了。第三步嘛自然是在雷區(qū)安排雷的位置了。這就需要為這100個按鈕安排序號以作區(qū)別,然后隨機(jī)數(shù)序號的按鈕下對應(yīng)著一個雷。而我又打開該對話框的資源文件頭文件Resource.h發(fā)現(xiàn)關(guān)于這100個按鈕的ID設(shè)置是這樣的:#define IDC_BUTTON1 1000 #define IDC_BUTTON2 1001 #define IDC_BUTTON3 1002#define IDC_B

3、UTTON98 1097 #define IDC_BUTTON99 1098 #define IDC_BUTTON100 1099所以我就干脆以1000-1099為序號,當(dāng)然雷的標(biāo)記是定義一個整數(shù)數(shù)組flg100,flgindex=0則不是雷,flgindex=1則是雷,其中index+1000對應(yīng)按鈕的ID。第四步了,需要為這100個按鈕添加響應(yīng)鼠標(biāo)左鍵單擊事件和右鍵單擊事件,不想做得太復(fù)雜了,就沒做鼠標(biāo)左鍵雙擊和鼠標(biāo)左右鍵同時點擊的響應(yīng)。當(dāng)然只算鼠標(biāo)左鍵和右鍵就已經(jīng)是麻煩事了,比較要為100個按鈕添加呢!百度了一下多個控件響應(yīng)同一個事件的添加方法,其中左鍵單擊有比較詳細(xì)的方法說明,就是先添

4、加一個按鈕的左鍵單擊事件,再改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) 即可實現(xiàn)100個按鈕響應(yīng)同一個鼠標(biāo)左鍵單擊事

5、件函數(shù)OnButton1() 這只適用于ID連續(xù)的控件。當(dāng)然鼠標(biāo)左鍵單擊事件函數(shù)需要知道是哪一個ID的控件發(fā)生的,所以還需要傳遞一個ID參數(shù),做下面幾個位置的修改:Mine_SweepDlg.h中afx_msg void OnButton1(UINT uID);加入括號的參數(shù),再在Mine_SweepDlg.cpp的事件響應(yīng)函數(shù)中加入?yún)?shù)void CMine_SweepDlg:OnButton1(UINT uID)其中的uID就是100個按鈕的序號,而uID-1000就得到雷區(qū)標(biāo)識的index了。然后我將響應(yīng)事件作出的效果如圖:即點擊某一個方格,判斷周邊8個方格是否有雷標(biāo)識,若沒有則隱藏該按鈕

6、,若有則顯示周邊雷標(biāo)識個數(shù)。若點擊的這個方格就是累標(biāo)識,則彈出消息框提示游戲結(jié)束。以下附上事件響應(yīng)函數(shù)的代碼: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=

7、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/否則顯示周邊雷數(shù)量 CString bu; bu.Format(%d,j); SetDlgItemText(index+1000,bu); m_score+=10; else/左鍵單擊了一個雷 SetDlgItemText(uID,*); m_minenum-; mine0-; m_scor

8、e-=20; if(MessageBox(你觸雷了!游戲結(jié)束,提示,MB_OKCANCEL)=IDOK) KillTimer(1);/取消定時器 CDialog:OnOK(); 以上是完成了左鍵單擊的響應(yīng),至于右鍵單擊的響應(yīng),比較麻煩了一點,需要重載一個虛函數(shù)PreTranslateMessage(MSG* pMsg)。說是該函數(shù)可以獲取界面上的鼠標(biāo)事件,包括了左鍵單擊,左鍵雙擊,左鍵按下放開,右鍵單擊等消息,然后可以根據(jù)消息來完成想要的功能。具體的重載方法是在類視圖里右鍵單擊Mine_SweepDlg,選擇Add Virtual Function ,在彈出對話框中左邊選擇PreTransla

9、teMessage,然后確定。然后就可以在CMine_SweepDlg.cpp里編輯使得響應(yīng)控件的右鍵。以下是我的函數(shù)代碼:BOOL CMine_SweepDlg:PreTranslateMessage(MSG* pMsg) / TODO: Add your specialized code here and/or call the base class if(pMsg-message=WM_RBUTTONDOWN)/鼠標(biāo)點擊右鍵 CRect rc; CPoint ptCursor; GetCursorPos(&ptCursor);/獲取鼠標(biāo)的位置信息 int pos; for(pos=100

10、0;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:PreT

11、ranslateMessage(pMsg); 到此,按鈕的鼠標(biāo)左鍵響應(yīng),右鍵響應(yīng)已經(jīng)完成,接下來就是設(shè)置定時器刷新游戲用時和游戲得分。第五步,設(shè)置定時器。具體方法如下:1.雙擊資源對話框,對著對話框空白處右鍵,選擇事件;2.在左側(cè)的新建windows消息/事件下選擇WM_TIMER雙擊,然后確定;3.在出現(xiàn)的void CMine_SweepDlg:OnTimer(UINT nIDEvent)中添加需要做的事4.為開始按鈕添加鼠標(biāo)左鍵單擊響應(yīng)事件,添加SetTimer(1,1000,NULL);/啟動定時器,1秒調(diào)用一次OnTimer函數(shù)。 以上就是我做這個掃雷游戲的大致過程了。其中遇到的各種問題,也讓我學(xué)到不少東西,首先就是做一件事之前需要有一個科學(xué)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論