版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、-PAGE . z. / v .一、題目隕石撞飛機綜合性實驗二、中文摘要用MFC設(shè)計一個隕石撞飛機的平面游戲:隕石不斷地向下落,飛機通過上下左右鍵移動以躲避隕石。當(dāng)隕石碰撞了飛機時,顯示提示對話框,及飛機爆炸圖像。確定后在碰撞位置重新開場游戲。三次碰撞后顯示提示對話框,游戲完畢。三、關(guān)鍵詞MFC、Bitmap、timer、鍵盤響應(yīng)WM_KEYDOWN四、前言此程序大多代碼出自參考資料,一小局部代碼為搜索資料并加工完成,其功能尚有不完善之處。五、軟件開發(fā)過程一、新建MFC APPWizarde*e單文檔工程文件在Visual C+中新建一個工程,命名為Plane。工程類型為: MFC AppWi
2、zarde*e。在MFC AppWizard-Step1對話框中設(shè)置應(yīng)用程序的類型,建立一個單文檔工程文件,得到一個應(yīng)用程序框架文件。二、添加資源:、飛機位圖、隕石位圖、爆炸位圖。在插入-資源選擇Bitmap選項,單擊新建即可。繪出一個飛機,ID為IDB_BITMAP1、五個隕石IDB_BITMAP2IDB_BITMAP6和一個炸彈位圖IDB_BITMAP7,如下列圖。飛機位圖 隕石位圖 爆炸位圖 三、在planeView.h頭文件中聲明所需變量和函數(shù)CBitmap m_plane; /聲明一個CBitmap類型的飛機變量m_planeint m*,my; /表示飛機坐標CBitmap m_b
3、ump; /爆炸位圖變量int mp*,mpy; /表示爆炸位圖的坐標int t; /爆炸次數(shù)/聲明隕石位圖的成員變量為CBitmap類型的變量CBitmap m_stone1,m_stone2,m_stone3,m_stone4,m_stone5;/聲明隕石的坐標變量為int類型: int nstone1*,nstone1y; int nstone2*,nstone2y; int nstone3*,nstone3y; int nstone4*,nstone4y; int nstone5*,nstone5y;再聲明函數(shù)成員void CPlanView:DrawPlane(CDC *pDC);/
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ù)m*=100; my=100; t=0; /賦初值m_plane.LoadBitmap(IDB_BI
5、TMAP1); /飛機位圖調(diào)用m_bomb.LoadBitmap(IDB_BITMAP7); /爆炸位圖調(diào)用/添加隕石初始化操作代碼,隨機產(chǎn)生 nstone1*=rand()%500; / 隕石1 *方向隨機數(shù)0499 nstone1y=10; m_stone1.LoadBitmap(IDB_BITMAP2); nstone2*=rand()%500; / 隕石2 *方向隨機數(shù)0499 nstone2y=10; m_stone2.LoadBitmap(IDB_BITMAP3); nstone3*=rand()%500; / 隕石3 *方向隨機數(shù)0499 nstone3y=10; m_stone
6、3.LoadBitmap(IDB_BITMAP4); nstone4*=rand()%500; / 隕石4 *方向隨機數(shù)0499 nstone4y=10; m_stone4.LoadBitmap(IDB_BITMAP5); nstone5*=rand()%500; / 隕石5 *方向隨機數(shù)0499 nstone5y=10; m_stone5.LoadBitmap(IDB_BITMAP6);2、修改ondraw()函數(shù) 添加 DrawPlane(pDC); /調(diào)用繪制飛機函數(shù)3、添加DrawPlane()和Drawbump()函數(shù)void CPlaneView:DrawPlane(CDC *pD
7、C) CDC MemDC; MemDC.CreatepatibleDC(pDC); BITMAP bm; m_plane.GetObject(sizeof(BITMAP),&bm); CBitmap MemBitmap; MemBitmap.CreatepatibleBitmap(pDC,bm.bmWidth,bm.bmHeight); CBitmap *pOldBitmap; pOldBitmap=(CBitmap*)MemDC.SelectObject(&MemBitmap); MemDC.SelectObject(&m_plane); pDC-BitBlt(m*,my,bm.bmWidt
8、h,bm.bmHeight,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBitmap); Drawbump()函數(shù)如上類似。4)添加鍵盤響應(yīng)處理函數(shù)(OnkeyDown)添加函數(shù),使飛機能隨用戶按下的上下左右方向鍵而移動。在菜單中選擇View-ClassWizard,選中CPlaneView類,在Message Maps選項卡中的Messages欄目選擇WM_KEYDOWN消息,雙擊該項,系統(tǒng)自動生成onKeyDown消息處理函數(shù).在PlaneView.cpp文件中,在系統(tǒng)自動產(chǎn)生的函數(shù)框架里添加如下所示代碼:CClientDC ClientDC(t
9、his);RECT rect;BITMAP bm;m_plane.GetObject(sizeof(BITMAP),&bm);rect.left=m*;rect.top=my;rect.right=rect.left+bm.bmWidth;rect.bottom=rect.top+bm.bmHeight;CBrush brush(GetSysColor(COLOR_WINDOW); / 擦去原來的飛機圖像ClientDC.FillRect(&rect,&brush);if(nChar=VK_UP) /按鍵盤上的向上鍵my=my-8;if(nChar=VK_LEFT) /按鍵盤上的向上鍵m*=m
10、*-8;if(nChar=VK_RIGHT) /按鍵盤上的向上鍵m*=m*+8;if(nChar=VK_DOWN) /按鍵盤上的向上鍵my=my+8;DrawPlane(&ClientDC); /重新繪制飛機圖像CView:OnKeyDown(nChar, nRept, nFlags);5添加自定義的繪制隕石的函數(shù)DrawStone1void CPlaneView:DrawStone1(CDC *pDC) CDC MemDC; MemDC.CreatepatibleDC(pDC); BITMAP bm1; m_stone1.GetObject(sizeof(BITMAP),&bm1); CBi
11、tmap MemBitmap; MemBitmap.CreatepatibleBitmap(pDC,bm1.bmWidth,bm1.bmHeight); CBitmap *pOldBitmap; pOldBitmap=(CBitmap*)MemDC.SelectObject(&MemBitmap); MemDC.SelectObject(&m_stone1); pDC-BitBlt(nstone1*,nstone1y,bm1.bmWidth,bm1.bmHeight,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBitmap); 其余函數(shù)DrawSto
12、ne2、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(this);RECT ClientRect;GetCl
13、ientRect(&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=nstone1*+n;rect1.left=ns1-20;rect1.top=nstone1y-20;rect1.right=rect1.left+bm.bmWidth;rect1.bottom=rect1.top+bm.bmHeight
14、;ClientDC.FillRect(&rect1,&brush);nstone1y=nstone1y+10; / 隕石1 下落的速度 if(nstone1yClientRect.bottom) nstone1y=0;nstone1*=rand()%ClientRect.right; / 隕石落下的位置隨機產(chǎn)生隕石2至隕石5類似if(n3)n=0;DrawStone1(&ClientDC);DrawStone2(&ClientDC);DrawStone3(&ClientDC); DrawStone4(&ClientDC); DrawStone5(&ClientDC);CView:OnTimer
15、(nIDEvent);7)接著添加隕石撞上飛機時彈出提示的函數(shù)if(t=m*-30 & nstone1*=my-30 & nstone1y=my+20) /判斷爆炸條件 mp*=m*; mpy=my; Drawbump(&ClientDC); /顯示爆炸位圖 KillTimer(1); /停頓計時器 MessageBo*(死亡!); /提示框顯示死亡 nstone1y=0;nstone1*=rand()%ClientRect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /開場計時器 t+; elset=0;mp*=m*;mpy=my;Drawbump(&Cli
16、entDC); MessageBo*(Game Over!Press OK to restar!,Notice); /超過3次死亡顯示Game Overif(t=m*-30 & nstone2*=my-30 & nstone2y=my+20) /判斷爆炸條件 mp*=m*; mpy=my; Drawbump(&ClientDC); /顯示爆炸位圖 KillTimer(1); /停頓計時器 MessageBo*(死亡!); /提示框顯示死亡 nstone2y=0;nstone2*=rand()%ClientRect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /
17、開場計時器 t+; elset=0;mp*=m*;mpy=my;Drawbump(&ClientDC);MessageBo*(Game Over!Press OK to restar!,Notice); /超過3次死亡顯示Game Overif(t=m*-30 & nstone3*=my-30 & nstone3y=my+20) /判斷爆炸條件 mp*=m*; mpy=my; Drawbump(&ClientDC); /顯示爆炸位圖 KillTimer(1); /停頓計時器 MessageBo*(死亡!); /提示框顯示死亡 nstone3y=0;nstone3*=rand()%ClientR
18、ect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /開場計時器 t+; elset=0;mp*=m*;mpy=my;Drawbump(&ClientDC);MessageBo*(Game Over!Press OK to restar!,Notice); /超過3次死亡顯示Game Overif(t=m*-30 & nstone4*=my-30 & nstone4y=my+20) /判斷爆炸條件 mp*=m*; mpy=my; Drawbump(&ClientDC); /顯示爆炸位圖 KillTimer(1); /停頓計時器 MessageBo*(死亡!); /提示框顯示死亡 nstone4y=0;nstone4*=rand()%ClientRect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /開場計時器 t+; elset=0;mp*=m*;mpy=my;Drawbump(&Clien
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年倉儲調(diào)味品調(diào)料存儲服務(wù)合同
- 2025年家用電器擔(dān)保協(xié)議
- 2025年家電修理技能合作協(xié)議
- 2025年品牌推廣策略合約
- 2025年代理商區(qū)塊鏈技術(shù)協(xié)議
- 2025年農(nóng)村房產(chǎn)過戶協(xié)議
- 2025年環(huán)境資源贈與合同
- 工地電工2025年度勞動合同規(guī)范范本14篇
- 2024裝修合同中的采購合同范本
- 2025版塑料回收利用項目投資合作合同范本3篇
- GB/T 44888-2024政務(wù)服務(wù)大廳智能化建設(shè)指南
- 2023-2024學(xué)年江西省萍鄉(xiāng)市八年級(上)期末物理試卷
- 四則混合運算100道題四年級上冊及答案
- 四川省高職單招電氣技術(shù)類《電子基礎(chǔ)》歷年考試真題試題庫(含答案)
- 中級半導(dǎo)體分立器件和集成電路裝調(diào)工技能鑒定考試題庫(含答案)
- 2024年江西生物科技職業(yè)學(xué)院單招職業(yè)技能測試題庫帶解析答案
- 橋本甲狀腺炎-90天治療方案
- (2024年)安全注射培訓(xùn)課件
- 2024版《建設(shè)工程開工、停工、復(fù)工安全管理臺賬表格(流程圖、申請表、報審表、考核表、通知單等)》模版
- 部編版《道德與法治》六年級下冊教材分析萬永霞
- 酒店人防管理制度
評論
0/150
提交評論