MFC_隕石撞飛機(jī)實驗報告_第1頁
MFC_隕石撞飛機(jī)實驗報告_第2頁
MFC_隕石撞飛機(jī)實驗報告_第3頁
MFC_隕石撞飛機(jī)實驗報告_第4頁
MFC_隕石撞飛機(jī)實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、題目隕石撞飛機(jī)綜合性實驗二、中文摘要用mfc設(shè)計一個隕石撞飛機(jī)的平面游戲:隕石不斷地向下落,飛機(jī)通過上下左右鍵移動以躲避隕石。當(dāng)隕石碰撞了飛機(jī)時,顯示提示對話框,及飛機(jī)爆炸圖像。確定后在碰撞位置重新開始游戲。三次碰撞后顯示提示對話框,游戲結(jié)束。 三、關(guān)鍵詞mfc、bitmap、timer、鍵盤響應(yīng)(wm_keydown)四、前言此程序大多代碼出自參考資料,一小部分代碼為搜索資料并加工完成,其功能尚有不完善之處。五、軟件開發(fā)過程(一)、新建mfc appwizardexe單文檔工程文件在visual c+中新建一個工程,命名為plane。工程類型為: mfc appwizardexe。在mf

2、c appwizard-step1對話框中設(shè)置應(yīng)用程序的類型,建立一個單文檔工程文件,得到一個應(yīng)用程序框架文件。(二)、添加資源:、飛機(jī)位圖、隕石位圖、爆炸位圖。在插入-資源選擇bitmap選項,單擊新建即可。繪出一個飛機(jī),id為(idb_bitmap1)、五個隕石(idb_bitmap2idb_bitmap6)和一個炸彈位圖(idb_bitmap7),如下圖。飛機(jī)位圖 隕石位圖 爆炸位圖 (三)、在planeview.h頭文件中聲明所需變量和函數(shù)cbitmap m_plane; /聲明一個cbitmap類型的飛機(jī)變量m_planeint mx,my; /表示飛機(jī)坐標(biāo)cbitmap m_bum

3、p; /爆炸位圖變量int mpx,mpy; /表示爆炸位圖的坐標(biāo)int t; /爆炸次數(shù)/聲明隕石位圖的成員變量為cbitmap類型的變量cbitmap m_stone1,m_stone2,m_stone3,m_stone4,m_stone5;/聲明隕石的坐標(biāo)變量為int類型: int nstone1x,nstone1y; int nstone2x,nstone2y; int nstone3x,nstone3y; int nstone4x,nstone4y; int nstone5x,nstone5y;再聲明函數(shù)成員void cplanview:drawplane(cdc *pdc);/飛機(jī)

4、位圖函數(shù) void cplanview:drawbump(cdc *pdc); /爆炸位圖函數(shù)/ 聲明繪制隕石的函數(shù)原型: void drawstone1(cdc *pdc); void drawstone2(cdc *pdc); void drawstone3(cdc *pdc); void drawstone4(cdc *pdc); void drawstone5(cdc *pdc);以上成員(數(shù)據(jù)成員、成員函數(shù))均為public屬性(四)在planview.cpp文件中添加函數(shù)1)、修改構(gòu)造函數(shù)mx=100; my=100; t=0; /賦初值m_plane.loadbitmap(idb

5、_bitmap1); /飛機(jī)位圖調(diào)用m_bomb.loadbitmap(idb_bitmap7); /爆炸位圖調(diào)用/添加隕石初始化操作代碼,隨機(jī)產(chǎn)生 nstone1x=rand()%500; / 隕石1 x方向隨機(jī)數(shù)0499 nstone1y=10; m_stone1.loadbitmap(idb_bitmap2); nstone2x=rand()%500; / 隕石2 x方向隨機(jī)數(shù)0499 nstone2y=10; m_stone2.loadbitmap(idb_bitmap3); nstone3x=rand()%500; / 隕石3 x方向隨機(jī)數(shù)0499 nstone3y=10; m_st

6、one3.loadbitmap(idb_bitmap4); nstone4x=rand()%500; / 隕石4 x方向隨機(jī)數(shù)0499 nstone4y=10; m_stone4.loadbitmap(idb_bitmap5); nstone5x=rand()%500; / 隕石5 x方向隨機(jī)數(shù)0499 nstone5y=10; m_stone5.loadbitmap(idb_bitmap6);2)、修改ondraw()函數(shù) 添加 drawplane(pdc); /調(diào)用繪制飛機(jī)函數(shù)3)、添加drawplane()和drawbump()函數(shù)void cplaneview:drawplane(cd

7、c *pdc) cdc memdc; memdc.createcompatibledc(pdc); bitmap bm; m_plane.getobject(sizeof(bitmap),&bm); cbitmap membitmap; membitmap.createcompatiblebitmap(pdc,bm.bmwidth,bm.bmheight); cbitmap *poldbitmap; poldbitmap=(cbitmap*)memdc.selectobject(&membitmap); memdc.selectobject(&m_plane); pdc-bitblt(mx,m

8、y,bm.bmwidth,bm.bmheight,&memdc,0,0,srccopy); memdc.selectobject(poldbitmap); drawbump()函數(shù)如上類似。4)添加鍵盤響應(yīng)處理函數(shù)(onkeydown) 添加函數(shù),使飛機(jī)能隨用戶按下的上下左右方向鍵而移動。在菜單中選擇view-classwizard,選中cplaneview類,在message maps選項卡中的messages欄目選擇wm_keydown消息,雙擊該項,系統(tǒng)自動生成onkeydown消息處理函數(shù).在planeview.cpp文件中,在系統(tǒng)自動產(chǎn)生的函數(shù)框架里添加如下所示代碼:cclientd

9、c clientdc(this);rect rect;bitmap bm;m_plane.getobject(sizeof(bitmap),&bm);rect.left=mx;rect.top=my;rect.right=rect.left+bm.bmwidth;rect.bottom=rect.top+bm.bmheight;cbrush brush(getsyscolor(color_window); / 擦去原來的飛機(jī)圖像clientdc.fillrect(&rect,&brush);if(nchar=vk_up) /按鍵盤上的向上鍵my=my-8;if(nchar=vk_left) /

10、按鍵盤上的向上鍵mx=mx-8;if(nchar=vk_right) /按鍵盤上的向上鍵mx=mx+8;if(nchar=vk_down) /按鍵盤上的向上鍵my=my+8;drawplane(&clientdc); /重新繪制飛機(jī)圖像cview:onkeydown(nchar, nrepcnt, nflags);5)添加自定義的繪制隕石的函數(shù)drawstone1 void cplaneview:drawstone1(cdc *pdc) cdc memdc; memdc.createcompatibledc(pdc); bitmap bm1; m_stone1.getobject(sizeof

11、(bitmap),&bm1); cbitmap membitmap; membitmap.createcompatiblebitmap(pdc,bm1.bmwidth,bm1.bmheight); cbitmap *poldbitmap; poldbitmap=(cbitmap*)memdc.selectobject(&membitmap); memdc.selectobject(&m_stone1); pdc-bitblt(nstone1x,nstone1y,bm1.bmwidth,bm1.bmheight,&memdc,0,0,srccopy); memdc.selectobject(po

12、ldbitmap); 其余函數(shù)drawstone2、drawstone3、drawstone4、drawstone5,類似如上的函數(shù)寫法6)為了實現(xiàn)隕石的自動下落運動,需要添加定時器函數(shù)來控制。 選view|classwizard菜單項,在mfc classwizard中,選擇cplaneview類,在message maps選項卡中的messages欄目選擇wm_timer、wm_create消息,分別雙擊該項,由系統(tǒng)自動生成該對應(yīng)的消息函數(shù)。在oncreate函數(shù)中添加:settimer(1,200,null);/定時器在ontimer函數(shù)中添加cclientdc clientdc(thi

13、s);rect clientrect;getclientrect(&clientrect);rect rect1,rect2,rect3,rect4,rect5;bitmap bm;m_stone1.getobject(sizeof(bitmap),&bm);cbrush brush(getsyscolor(color_window); int n=0,ns1,ns2,ns3,ns4,ns5;n+;ns1=nstone1x+n;rect1.left=ns1-20;rect1.top=nstone1y-20;rect1.right=rect1.left+bm.bmwidth;rect1.bott

14、om=rect1.top+bm.bmheight;clientdc.fillrect(&rect1,&brush);nstone1y=nstone1y+10; / 隕石1 下落的速度 if(nstone1yclientrect.bottom) nstone1y=0;nstone1x=rand()%clientrect.right; / 隕石落下的位置隨機(jī)產(chǎn)生隕石2至隕石5類似if(n3)n=0;drawstone1(&clientdc);drawstone2(&clientdc);drawstone3(&clientdc); drawstone4(&clientdc); drawstone5(

15、&clientdc);cview:ontimer(nidevent);7)接著添加隕石撞上飛機(jī)時彈出提示的函數(shù)if(t=mx-30 & nstone1x=my-30 & nstone1y=my+20) /判斷爆炸條件 mpx=mx; mpy=my; drawbump(&clientdc); /顯示爆炸位圖 killtimer(1); /停止計時器 messagebox(死亡!); /提示框顯示死亡 nstone1y=0;nstone1x=rand()%clientrect.right; /重新產(chǎn)生被撞隕石 settimer(1,200,null); /開始計時器 t+; elset=0;mpx

16、=mx;mpy=my;drawbump(&clientdc); messagebox(game over!press ok to restar!,notice); /超過3次死亡顯示game overif(t=mx-30 & nstone2x=my-30 & nstone2y=my+20) /判斷爆炸條件 mpx=mx; mpy=my; drawbump(&clientdc); /顯示爆炸位圖 killtimer(1); /停止計時器 messagebox(死亡!); /提示框顯示死亡 nstone2y=0;nstone2x=rand()%clientrect.right; /重新產(chǎn)生被撞隕石

17、 settimer(1,200,null); /開始計時器 t+; elset=0;mpx=mx;mpy=my;drawbump(&clientdc);messagebox(game over!press ok to restar!,notice); /超過3次死亡顯示game overif(t=mx-30 & nstone3x=my-30 & nstone3y=my+20) /判斷爆炸條件 mpx=mx; mpy=my; drawbump(&clientdc); /顯示爆炸位圖 killtimer(1); /停止計時器 messagebox(死亡!); /提示框顯示死亡 nstone3y=0

18、;nstone3x=rand()%clientrect.right; /重新產(chǎn)生被撞隕石 settimer(1,200,null); /開始計時器 t+; elset=0;mpx=mx;mpy=my;drawbump(&clientdc);messagebox(game over!press ok to restar!,notice); /超過3次死亡顯示game overif(t=mx-30 & nstone4x=my-30 & nstone4y=my+20) /判斷爆炸條件 mpx=mx; mpy=my; drawbump(&clientdc); /顯示爆炸位圖 killtimer(1); /停止計時器 messagebox(死亡!); /提示框顯示死亡 nstone4y=0;nstone4x=rand()%clientrect.right; /重新產(chǎn)生被撞隕石 settimer(1,200,null); /開始計時器 t+; elset=0;mpx=mx;mpy=my;drawbump(&clientdc);messageb

溫馨提示

  • 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

提交評論