版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、-PAGE . z. / v .一、題目隕石撞飛機(jī)綜合性實(shí)驗(yàn)二、中文摘要用MFC設(shè)計(jì)一個隕石撞飛機(jī)的平面游戲:隕石不斷地向下落,飛機(jī)通過上下左右鍵移動以躲避隕石。當(dāng)隕石碰撞了飛機(jī)時,顯示提示對話框,及飛機(jī)爆炸圖像。確定后在碰撞位置重新開場游戲。三次碰撞后顯示提示對話框,游戲完畢。三、關(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)用程序框架文件。二、添加資源:、飛機(jī)位圖、隕石位圖、爆炸位圖。在插入-資源選擇Bitmap選項(xiàng),單擊新建即可。繪出一個飛機(jī),ID為IDB_BITMAP1、五個隕石IDB_BITMAP2IDB_BITMAP6和一個炸彈位圖IDB_BITMAP7,如下列圖。飛機(jī)位圖 隕石位圖 爆炸位圖 三、在planeView.h頭文件中聲明所需變量和函數(shù)CBitmap m_plane; /聲明一個CBitmap類型的飛機(jī)變量m_planeint m*,my; /表示飛機(jī)坐標(biāo)CBitmap m_b
3、ump; /爆炸位圖變量int mp*,mpy; /表示爆炸位圖的坐標(biāo)int t; /爆炸次數(shù)/聲明隕石位圖的成員變量為CBitmap類型的變量CBitmap m_stone1,m_stone2,m_stone3,m_stone4,m_stone5;/聲明隕石的坐標(biāo)變量為int類型: int nstone1*,nstone1y; int nstone2*,nstone2y; int nstone3*,nstone3y; int nstone4*,nstone4y; int nstone5*,nstone5y;再聲明函數(shù)成員void CPlanView:DrawPlane(CDC *pDC);/
4、飛機(jī)位圖函數(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); /飛機(jī)位圖調(diào)用m_bomb.LoadBitmap(IDB_BITMAP7); /爆炸位圖調(diào)用/添加隕石初始化操作代碼,隨機(jī)產(chǎn)生 nstone1*=rand()%500; / 隕石1 *方向隨機(jī)數(shù)0499 nstone1y=10; m_stone1.LoadBitmap(IDB_BITMAP2); nstone2*=rand()%500; / 隕石2 *方向隨機(jī)數(shù)0499 nstone2y=10; m_stone2.LoadBitmap(IDB_BITMAP3); nstone3*=rand()%500; / 隕石3 *方向隨機(jī)數(shù)0499 nstone3y=10; m_stone
6、3.LoadBitmap(IDB_BITMAP4); nstone4*=rand()%500; / 隕石4 *方向隨機(jī)數(shù)0499 nstone4y=10; m_stone4.LoadBitmap(IDB_BITMAP5); nstone5*=rand()%500; / 隕石5 *方向隨機(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(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ù),使飛機(jī)能隨用戶按下的上下左右方向鍵而移動。在菜單中選擇View-ClassWizard,選中CPlaneView類,在Message Maps選項(xiàng)卡中的Messages欄目選擇WM_KEYDOWN消息,雙擊該項(xiàng),系統(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); / 擦去原來的飛機(jī)圖像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); /重新繪制飛機(jī)圖像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為了實(shí)現(xiàn)隕石的自動下落運(yùn)動,需要添加定時器函數(shù)來控制。選View|ClassWizard菜單項(xiàng),在MFC ClassWizard中,選擇CPlaneView類,在Message Maps選項(xiàng)卡中的Messages欄目選擇WM_TIMER、WM_CREATE消息,分別雙擊該項(xiàng),由系統(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; / 隕石落下的位置隨機(jī)產(chǎn)生隕石2至隕石5類似if(n3)n=0;DrawStone1(&ClientDC);DrawStone2(&ClientDC);DrawStone3(&ClientDC); DrawStone4(&ClientDC); DrawStone5(&ClientDC);CView:OnTimer
15、(nIDEvent);7)接著添加隕石撞上飛機(jī)時彈出提示的函數(shù)if(t=m*-30 & nstone1*=my-30 & nstone1y=my+20) /判斷爆炸條件 mp*=m*; mpy=my; Drawbump(&ClientDC); /顯示爆炸位圖 KillTimer(1); /停頓計(jì)時器 MessageBo*(死亡!); /提示框顯示死亡 nstone1y=0;nstone1*=rand()%ClientRect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /開場計(jì)時器 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); /停頓計(jì)時器 MessageBo*(死亡!); /提示框顯示死亡 nstone2y=0;nstone2*=rand()%ClientRect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /
17、開場計(jì)時器 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); /停頓計(jì)時器 MessageBo*(死亡!); /提示框顯示死亡 nstone3y=0;nstone3*=rand()%ClientR
18、ect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /開場計(jì)時器 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); /停頓計(jì)時器 MessageBo*(死亡!); /提示框顯示死亡 nstone4y=0;nstone4*=rand()%ClientRect.right; /重新產(chǎn)生被撞隕石 SetTimer(1,200,NULL); /開場計(jì)時器 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度供暖服務(wù)續(xù)約協(xié)議
- 2024年度建筑材料研發(fā)與技術(shù)轉(zhuǎn)讓合同
- 2024年城市廢棄物處理設(shè)施租賃合同
- 2024創(chuàng)意拓展訓(xùn)練服務(wù)合同
- 2024年廉潔購銷合同范本
- 2024年度安徽省某縣高速公路路基施工合同
- 2024年度企業(yè)級云存儲服務(wù)合同
- 2024大型活動場地土方平整合同
- 2024年度果皮箱批量采購合同
- 2024年度國際教育培訓(xùn)項(xiàng)目合作合同
- GB/T 27021.1-2017合格評定管理體系審核認(rèn)證機(jī)構(gòu)要求第1部分:要求
- GB/T 22796-2021床上用品
- 中國聯(lián)通LAN工程施工及驗(yàn)收規(guī)范
- 中間表模式接口相關(guān)-住院與his-adt方案
- 臨床PCR檢驗(yàn)的室內(nèi)質(zhì)控方法課件
- 計(jì)算機(jī)解決問題的過程-優(yōu)質(zhì)課課件
- 作文講評-“忘不了……”課件
- 深基坑安全管理(安全培訓(xùn))課件
- 12月4日全國法制宣傳日憲法日憲法知識科普宣教PPT教學(xué)課件
- 血液透析營養(yǎng)管理課件
- 神經(jīng)內(nèi)科醫(yī)療質(zhì)量評價體系考核標(biāo)準(zhǔn)
評論
0/150
提交評論