MFC寫的貪吃蛇代碼_第1頁
MFC寫的貪吃蛇代碼_第2頁
MFC寫的貪吃蛇代碼_第3頁
MFC寫的貪吃蛇代碼_第4頁
MFC寫的貪吃蛇代碼_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、用手教“MFC版本蛇教程”。前面寫的話此次蛇形教程的主要知識點如下1 CView類的消息響應(yīng)2控件的消息響應(yīng)3基于CView類的特定游戲?qū)崿F(xiàn)4陣列5游戲圖形實現(xiàn)使用CDC類實現(xiàn)。此游戲的特定實現(xiàn)在CViewl類中執(zhí)行,因此不需要在其他類中添加代碼。由于需要MFC的開發(fā)環(huán)境,請打開VisualC,創(chuàng)建新的MFC AppWizard單文檔項目,然后隨機命名項目。貪吃蛇的基本過程和一般思想1定義蛇和食物類,初始化出現(xiàn)在屏幕上的初始位置、長度、蛇行走方向等蛇貪吃成員變量。食品類的定義包括出現(xiàn)的初始位置,對食物是否被吃掉的判斷。2個陣列初始化了長度為3的貪吃蛇,基本食物沒有出現(xiàn)3 CView類使用MFC

2、提供的Windows消息中的WM_TIMER消息,并使用OnTimer()函數(shù)使系統(tǒng)提供用于游戲更新的時鐘位4如果蛇打自己和墻,游戲結(jié)束,判斷豆子是否被吃掉等具體的游戲?qū)嵤┌S著蛇的長度的游戲難度變化等。5特定鍵盤游戲動作適用于Windows消息響應(yīng)中的WM_KEYDOWN,并使用OnKeyDown()響應(yīng)播放器的實際動作。/第一部分首先,在現(xiàn)有項目下的“ClassView”中,右鍵單擊CView類,然后添加以下Windows信息1 WM_KEYDOWN2 WM_RBUTTONDOWN3dwm _ timer右鍵單擊CView類,然后選擇“添加虛擬函數(shù)”以選擇OnInitialUpdate(

3、)OnInitialUpdate()的功能包括:視圖窗格完全設(shè)置后,幀調(diào)用的第一個函數(shù)。框架在首次調(diào)用OnDraw之前調(diào)用oninitialshapdate,因此OnInitialUpdate是設(shè)置滾動視圖的邏輯尺寸和映射模式的最佳位置。由于兩個項目在時間上的順序不同,因此不會創(chuàng)建構(gòu)造函數(shù)的原始成本類對象,而是創(chuàng)建OnCreate之后的窗口,然后創(chuàng)建視圖的OnInitialUpDate。通常在此初始化視圖的顯示。簡單的點,ONCREATE只是生成VIEW的基本結(jié)構(gòu)和變量,OnInitialUpDate()主要初始化視圖的控件等。每個變量的初始化操作所以我們要在貪圖蛇的初始化工作中使用這個函數(shù)。

4、還添加成員函數(shù)oninit()進行貪圖蛇的初始化控件的設(shè)計還有用于控制游戲開始、游戲結(jié)束和游戲暫停的游戲設(shè)計控件。單擊工作區(qū)的資源視圖可對其進行控制。其中,從Menu文件夾中刪除“IDR_MAINFRAME”的所有基本控件右鍵單擊標(biāo)題欄并單擊“屬性”后,將顯示菜單欄標(biāo)題,每個菜單欄標(biāo)題都將創(chuàng)建一個。在這里,我們各自制作“游戲”。在現(xiàn)有控件的列表中,單擊屬性,然后單擊以設(shè)置菜單項屬性。我們未設(shè)置的屬性“標(biāo)識”及其ID如下游戲開始IDM_START暫停游戲IDM_PAUSE繼續(xù)游戲IDM_CONTINUE游戲結(jié)束IDM_EXIT其中控件的設(shè)計是“可顯示”的控件操作成功設(shè)置ID后,右鍵單擊用于創(chuàng)建消

5、息響應(yīng)處理函數(shù)的屬性具體方法操作的示例包括1右鍵單擊“start game(開始游戲)”單擊“2類向?qū)гO(shè)置”在“3 Message Maps”頁面上,選擇要對其執(zhí)行郵件響應(yīng)的控件ID列表Object IDs中的相應(yīng)ID。在此處,選擇CView類IDM_START。因此,必須將Class name的默認“CMainFrame”更改為“CView類”,然后在“Messages”類型設(shè)置中,將“COMMAND”設(shè)置為命令消息。其馀部分同樣設(shè)置。Ps: windows消息分為三類:標(biāo)準(zhǔn)消息、命令消息和通知消息1除標(biāo)準(zhǔn)消息COMMAND外,WM_以標(biāo)準(zhǔn)消息開頭2命令消息為COMMAND3通知消息控件生成

6、的消息,也可以顯示為WM_COMMAND類型最后,我們返回到原始ClassView,然后查看我們添加的函數(shù)所有函數(shù)集合都具有以下內(nèi)容在這里,您可以看到我們添加的Windows消息的所有消息響應(yīng)函數(shù)的聲明/第二部分具體來說,游戲,Step 1首先,在文件的開頭分別定義蛇和食物的全局變量Struct SnakeInt x、y;Int lenInt direct蛇50;Struct Foodint x;int y;Int isfood Food再說了void cs nakeview :3360 oninitials update()c view : oninitialupdate();蛇形0。x=1

7、0蛇形0。y=10蛇形1。x=11蛇形1。y=10蛇形2。x=12蛇形2。y=10蛇形0。direct=3;蛇形0。len=3;food . is food=1;/todo : add your specialized code here and/or call the base class代碼說明:初始化貪心的蛇最初有3個節(jié)點,長度為3,起始坐標(biāo);食物基本上是1無0。當(dāng)然,我更喜歡0無1。Step 2將代碼專門添加到OnKeyDown()中void cs nakeview 33603360 onkeydown(uint nchar,uint nre pcnt,uint n flags)/to

8、do : add your message handler code here and/or call default交換機(nChar)Case vk _ up : if (snake 0)。direct!=2)蛇0。direct=1;BreakCase vk _ down : if (snake 0)。direct!=1)蛇0。direct=2;BreakCase vk _ left : if (snake 0)。direct!=4)蛇0。direct=3;BreakCase vk _ right : if (snake 0)。direct!=3)蛇0。direct=4;Breakcvie

9、w 33603360 onkeydown(nchar、nre pcnt、n flags);cview 33603360 onkeydown(nchar、nre pcnt、n flags);OnKeyDown函數(shù)的第一個參數(shù)UINT nChar接收用戶輸入的信息,并使用switch進行判斷代碼說明:蛇0代表蛇的頭,我們是蛇頭的方向蛇0。(。判斷direct。Case vk _ up : if (snake 0)。direct!=2)蛇0。direct=1;BreakSnake0。僅當(dāng)direct的方向不等于“向下”時,才執(zhí)行“向上”動作,否則忽略用戶的“向上”動作鍵效果Step 3將代碼專門添加

10、到OnRButtonDown()中void csnake view 33603360 onrbuttondown(uint n flags,cpoint point)/todo : add your message handler code here and/or call default/todo : add your message handler code here and/or call defaultCString strstr . format(“%d,% d”,point.x,point . y);AfxMessageBox(str);cview 33603360 onrbutt

11、ondown(n flags,point);cview 33603360 onrbuttondown(n flags,point);cview 33603360 onrbuttondown(n flags,point);此功能是右鍵單擊屏幕時,立即顯示當(dāng)前位置的坐標(biāo)信息。此函數(shù)不是必須添加到此游戲中的函數(shù),以便您可以在游戲頁面的后面使用鼠標(biāo)右鍵屏幕獲取近似的屏幕坐標(biāo)信息這里補充一個知識點WIN32坐標(biāo)系有三種1世界坐標(biāo)系雙頁面坐標(biāo)系3設(shè)備坐標(biāo)系世界坐標(biāo)系與頁面坐標(biāo)系名稱“邏輯空間”相同,實際上與我們實際生活中的數(shù)學(xué)坐標(biāo)系相同。否則,計算機屏幕是設(shè)備坐標(biāo)系,其中用戶區(qū)域窗口的左上角為(0,0)原

12、點,x坐標(biāo)為正,y坐標(biāo)為正。Step 4Void CSNAKEView:oninit()CDC * pDC=get DC();C brush drawbrush=(RGB (100,100,100);brush * draw brush=PDC-select object(draw brush);for(int I=0);I=蛇0。l-1;I)Pdc-rectangle (snake I)。x * 20,snake I。y * 20,(snake I)。x 1) * 20,(snake I)。y 1)* 20);PDC-select object(draw brush);代碼說明:使用Wind

13、ows提供的CDC類繪制圖片時,首先接受與窗口關(guān)聯(lián)的DC句柄(指向CDC類的指針),然后使用定義的畫筆創(chuàng)建DrawBrush對象,并將刷子顏色初始化為RGB(100,100,100)。使用SelectObject(DrawBrush),該函數(shù)在設(shè)備說明表中選擇對象畫筆,然后使用for循環(huán)繪制三個節(jié)點以探測蛇。Void far rectangle (int left,int top,int right,int bottom);此函數(shù)的功能是函數(shù)功能:此函數(shù)繪制矩形,并使用當(dāng)前筆刷填充的當(dāng)前筆劃繪制矩形輪廓。Step 5控件添加代碼Void csnakeview :3360 onstart()/t

14、odo : add your command handler code hereSetTimer(1,3000,空);AfxMessageBox(3秒后開始游戲!);Void csnakeview :3360 on pause()/todo : add your command handler code hereKillTimer(1);AfxMessageBox(“暫停游戲.”);Void CSNAKEView:OnExit()/todo : add your command handler code hereAfxMessageBox(“游戲結(jié)束.”);exit 0;void csnake

15、 view :3360 on continue()/todo : add your command handler code hereSetTimer(1,10,空);代碼說明:由于您以前設(shè)置了WM_TIMER消息,因此可以使用計時器功能使用WM_TIMER設(shè)置計時器請看SetTimer API函數(shù)的原型UINT_PTR SetTimer(HWND hWnd,/窗口句柄您可以通過UINT_PTR nIDEvent、/計時器ID或多個計時器中的哪個計時器來確定UINT uElapse,/間隔,以毫秒為單位TIMERPROC lpTimerFunc /回調(diào)函數(shù));SetTimer(m_hWnd,1

16、,1000,空);/每秒觸發(fā)一次的計時器在MFC程序中,SetTimer封裝在CWnd類中,無需在調(diào)用中指定窗口句柄因此,此處只能使用最后三個名為SetTimer(1,10,NULL)的參數(shù)。1000是1秒對AfxMessageBox的研究寫在此博客上,此處不詳細介紹在Step 6中為OnDraw()添加代碼OnDraw()函數(shù)是眾所周知的視圖類的輸出。視圖類的輸出默認由視圖類的OnDraw函數(shù)處理,系統(tǒng)準(zhǔn)備參數(shù),然后調(diào)用OnDraw函數(shù)本人也不太研究子函數(shù),只知道一點皮毛。但是,這與OnPaint()和OnDraw()之間的區(qū)別在于,on PAINT()派生自CWnd類以響應(yīng)WM_PAINT消息。OnDraw是CView類的成員函數(shù),沒有消息響應(yīng)功能,因此視圖類中只有OnDraw(),沒有OnPaint()。OnDraw()維護視

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論