版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目五:隕石撞飛機(jī)
平面游戲設(shè)計(jì)第14、15、16周完成2010/06/04主講:徐永廣cs_star@163.com輔導(dǎo):黃荔實(shí)驗(yàn)內(nèi)容安排4個(gè)基礎(chǔ)性實(shí)驗(yàn),1個(gè)綜合性實(shí)驗(yàn)基礎(chǔ)回顧(6學(xué)時(shí))+3=9
實(shí)驗(yàn)項(xiàng)目1(A)類與對(duì)象(6學(xué)時(shí))
實(shí)驗(yàn)項(xiàng)目1(B)繼承與派生(3學(xué)時(shí))+3=6實(shí)驗(yàn)項(xiàng)目2多態(tài)性(3學(xué)時(shí))實(shí)驗(yàn)項(xiàng)目3小小圖書館(9學(xué)時(shí))-3=6
實(shí)驗(yàn)項(xiàng)目4簡單計(jì)算器(9學(xué)時(shí))實(shí)驗(yàn)項(xiàng)目5隕石撞飛機(jī)(12學(xué)時(shí))-3=9項(xiàng)目五:隕石撞飛機(jī)一、實(shí)驗(yàn)?zāi)繕?biāo)與要求設(shè)計(jì)一個(gè)隕石撞飛機(jī)的平面游戲:隕石不斷地向下落,飛機(jī)通過上下左右鍵移動(dòng)以躲避隕石。如圖2_1所示。
圖2_1運(yùn)行結(jié)果二、分析
關(guān)鍵知識(shí)點(diǎn):VisualC++6.0中位圖操作,Bitmap類的應(yīng)用,鍵盤響應(yīng)(消息WM_KEYDOWN)處理函數(shù),定時(shí)器。初步實(shí)驗(yàn)步驟分析1.在VisualC++中新建一個(gè)工程,命名為Plane。1)工程類型為:MFCAppWizard[exe]。2)在MFCAppWizard-Step1對(duì)話框中設(shè)置應(yīng)用程序的類型,選擇單文檔結(jié)構(gòu),其余可以采用默認(rèn)選項(xiàng),建立一個(gè)單文檔工程文件,即得到一個(gè)應(yīng)用程序框架文件,并在項(xiàng)目工作區(qū)窗口打開生成的應(yīng)用程序的項(xiàng)目。2.添加資源:隕石位圖、飛機(jī)位圖。1)在ResourceView資源視圖選項(xiàng)卡中,插入或添加新的資源Resource,如圖1所示:
2)在InsertResource(插入資源)對(duì)話框中選擇Bitmap(位圖)選項(xiàng),單擊New(新建)按鈕,如圖2所示:
該位圖的ID默認(rèn)為IDB_BITMAP1.3)在ResourceView資源視圖選項(xiàng)卡中①飛機(jī)制作:雙擊IDB_BITMAP1選項(xiàng),打開資源編輯器中的位圖編輯器,設(shè)計(jì)一個(gè)飛機(jī)位圖文件,如下圖所示。②隕石制作:用前面相同方法,在ResourceView資源視圖選項(xiàng)卡中,新建(或添加)幾個(gè)位圖,用于設(shè)計(jì)幾個(gè)(3~5個(gè))不同的隕石位圖文件(每個(gè)隕石用一幅圖像文件),各個(gè)位圖的ID默認(rèn)為IDB_BITMAP2、IDB_BITMAP3、IDB_BITMAP4、IDB_BITMAP5。3.對(duì)飛機(jī)的處理1)在PlaneView.h中添加:一個(gè)CBitmap類型的變量m_plane;兩個(gè)int類型變量mx,my表示飛機(jī)的坐標(biāo);一個(gè)繪制飛機(jī)圖形的函數(shù)voidDrawPlane();//函數(shù)原型聲明,實(shí)現(xiàn)可放在PlaneView.cpp中。voidDrawPlane(CDC*pDC);以上數(shù)據(jù)成員均為public屬性。2.位圖顯示分兩步:先將圖形加載到內(nèi)存中,再將內(nèi)存中的圖形顯示到屏幕上。通過,在PlaneView.cpp中自行添加一個(gè)函數(shù)來實(shí)現(xiàn)。voidCPlaneView::DrawPlane(CDC*pDC){CDCMemDC;MemDC.CreateCompatibleDC(pDC);
BITMAPbm;m_plane.GetObject(sizeof(BITMAP),&bm);
CBitmapMemBitmap;MemBitmap.CreateCompatibleBitmap(pDC,bm.bmWidth,bm.bmHeight);
CBitmap*pOldBitmap;pOldBitmap=(CBitmap*)MemDC.SelectObject(&MemBitmap);
MemDC.SelectObject(&m_plane);pDC->BitBlt(mx,my,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);MemDC.SelectObject(pOldBitmap);}3.修改構(gòu)造函數(shù)與OnDraw函數(shù)添加代碼:構(gòu)造函數(shù):
mx=100; my=100; m_plane.LoadBitmap(IDB_BITMAP1);OnDraw函數(shù):
DrawPlane(pDC);//調(diào)用繪制飛機(jī)函數(shù)4.添加鍵盤響應(yīng)處理函數(shù)(OnkeyDown)添加函數(shù),使飛機(jī)能隨用戶按下的上下左右方向鍵而移動(dòng)。方法:1)在菜單中選擇View->ClassWizard,選中CPlaneView類,在MessageMaps選項(xiàng)卡中的Messages欄目選擇WM_KEYDOWN消息,雙擊該項(xiàng),系統(tǒng)自動(dòng)生成onKeyDown消息處理函數(shù),如圖示:2)在PlaneView.cpp文件中,在系統(tǒng)自動(dòng)產(chǎn)生的函數(shù)框架里添加如下所示代碼:到此,編譯鏈接運(yùn)行程序得到可執(zhí)行文件Plane.exe,產(chǎn)生如圖示的效果,這時(shí)用上下左右箭頭就可以移動(dòng)飛機(jī)了。試一試!添加的代碼 CClientDCClientDC(this); RECTrect; BITMAPbm; m_plane.GetObject(sizeof(BITMAP),&bm); rect.left=mx; rect.top=my; rect.right=rect.left+bm.bmWidth; rect.bottom=rect.top+bm.bmHeight; CBrushbrush(GetSysColor(COLOR_WINDOW));//擦去原來的飛機(jī)圖像 ClientDC.FillRect(&rect,&brush);
if(nChar==VK_UP)//按鍵盤上的向上鍵"↑" {my=my-3;} if(nChar==VK_LEFT)//按鍵盤上的向上鍵"←" {mx=mx-3;} if(nChar==VK_RIGHT)//按鍵盤上的向上鍵"→" {mx=mx+3;} if(nChar==VK_DOWN)//按鍵盤上的向上鍵"↓" {my=my+3;} DrawPlane(&ClientDC);//重新繪制飛機(jī)圖像下面開始制作下落的隕石1.制作幾張(3~5)不同的隕石位圖文件,方法同上(與制作飛機(jī)位圖文件一樣)。將這3~5塊隕石圖像的ID分別命名為:IDB_BITMAP2、IDB_BITMAP3、IDB_BITMAP4、IDB_BITMAP5、IDB_BITMAP6等等。如圖示:2.在PlaneView.h文件中添加處理隕石的數(shù)據(jù)成員與函數(shù)成員的代碼:同飛機(jī)位圖一樣,如:添加代碼//Attributespublic://聲明隕石位圖的成員變量為CBitmap類型的變量CBitmapm_stone1,m_stone2,m_stone3,m_stone4,m_stone5;//聲明隕石的坐標(biāo)變量為int類型:intnstone1x,nstone1y;intnstone2x,nstone2y;intnstone3x,nstone3y;intnstone4x,nstone4y;intnstone5x,nstone5y;//Operationspublic://聲明繪制隕石的函數(shù)原型:voidDrawStone1(CDC*pDC);voidDrawStone2(CDC*pDC);voidDrawStone3(CDC*pDC);voidDrawStone4(CDC*pDC);voidDrawStone5(CDC*pDC);3.在PlaneView.cpp文件中,修改構(gòu)造函數(shù)CPlaneView::CPlaneView()//添加初始化操作代碼:
nstone1x=rand()%500;//x方向隨機(jī)數(shù)0~499nstone1y=10;m_stone1.LoadBitmap(IDB_BITMAP2);nstone2x=rand()%500;//x方向隨機(jī)數(shù)0~499nstone2y=10;m_stone2.LoadBitmap(IDB_BITMAP3);nstone3x=rand()%500;//x方向隨機(jī)數(shù)0~499nstone3y=10;m_stone3.LoadBitmap(IDB_BITMAP4);nstone4x=rand()%500;//x方向隨機(jī)數(shù)0~499nstone4y=10;m_stone4.LoadBitmap(IDB_BITMAP5);nstone5x=rand()%500;//x方向隨機(jī)數(shù)0~499nstone5y=10;m_stone5.LoadBitmap(IDB_BITMAP6);4.實(shí)現(xiàn)自定義的繪制隕石的函數(shù)DrawStone1方法如下:voidCPlaneView::DrawStone1(CDC*pDC){CDCMemDC;MemDC.CreateCompatibleDC(pDC);
BITMAPbm1;m_stone1.GetObject(sizeof(BITMAP),&bm1);
CBitmapMemBitmap;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(pOldBitmap);}
其余函數(shù)DrawStone2、DrawStone3、DrawStone4、DrawStone5,類似如上的函數(shù)寫法。5.為了實(shí)現(xiàn)隕石的自動(dòng)下落運(yùn)動(dòng),需要添加定時(shí)器函數(shù)來控制。方法:1)選View|ClassWizard菜單項(xiàng),在MFCClassWizard中,選擇CPlaneView類,在MessageMaps選項(xiàng)卡中的Messages欄目選擇WM_TIMER、WM_CREATE消息,分別雙擊該項(xiàng),由系統(tǒng)自動(dòng)生成該對(duì)應(yīng)的消息函數(shù)。如圖示:
2)在CPlaneView類的OnTimer函數(shù)和OnCreate函數(shù)中添加相應(yīng)的代碼,使隕石產(chǎn)生下落的效果。在OnCreate函數(shù)中添加:SetTimer(1,200,NULL);//定時(shí)器在OnTimer函數(shù)中添加: CClientDCClientDC(this); RECTClientRect; GetClientRect(&ClientRect); RECTrect1,rect2,rect3,rect4,rect5; BITMAPbm; m_stone1.GetObject(sizeof(BITMAP),&bm); CBrushbrush(GetSysColor(COLOR_WINDOW));
intn=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.bottom=rect1.top+bm.bmHeight;
ClientDC.FillRect(&rect1,&brush); nstone1y=nstone1y+10;//隕石1下落的速度 if(nstone1y>ClientRect.bottom) {nstone1y=0; nstone1x=rand()%ClientRect.right;//隕石落下的位置隨機(jī)產(chǎn)生 }
ns2=nstone2x+n; rect2.left=ns2-20; rect2.top=nstone2y-20; rect2.right=rect2.left+bm.bmWidth+10; rect2.bottom=rect2.top+bm.bmHeight+10;
ClientDC.FillRect(&rect2,&brush); nstone2y=nstone2y+13; if(nstone2y>ClientRect.bottom) {nstone2y=0; nstone2x=rand()%ClientRect.right; } ns3=nstone3x+n; rect3.left=ns3-20; rect3.top=nstone3y-20; rect3.right=rect3.left+bm.bmWidth+10; rect3.bottom=rect3.top+bm.bmHeight+10;
ClientDC.FillRect(&rect3,&brush); nstone3y=nstone3y+15; if(nstone3y>ClientRect.bottom) {nstone3y=0; nstone3x=rand()%ClientRect.right; } ns4=nstone4x+n; rect4.left=ns4-20; rect4.top=nstone4y-20; rect4.right=rect4.left+bm.bmWidth+10; rect4.bottom=rect4.top+bm.bmHeight+10;
ClientDC.FillRect(&rect4,&brush); nstone4y=nstone4y+17; if(nstone4y>ClientRect.bottom) {nstone4y=0; nstone4x=rand()%ClientRect.right; } ns5=nstone5x+n; rect5.left=ns5-20; rect5.top=nstone5y-20; rect5.right=rect5.left+bm.bmWidth+10; rect5.bottom=rect5.top+bm.bmHeight+10;
ClientDC.FillRect(&rect5,&brush); nstone5y=nstone5y+19; if(nstone5y>ClientRect.bottom) {nstone5y=0; nstone5x=rand()%ClientRect.right; } if(n>3) {n=0;} DrawStone1(&ClientDC); DrawStone2(&ClientDC); DrawStone3(&ClientDC);DrawStone4(&ClientDC);DrawStone5(&ClientDC);最后編譯連接運(yùn)行,測試是否達(dá)到要求的效果。測試與練習(xí)、思考事實(shí)上,目前本程序設(shè)計(jì),只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量檢驗(yàn)員聘用合同格式
- 2024年度醫(yī)療器械代理注冊(cè)合同規(guī)范范本3篇
- 食品安全合同管理流程
- 2025年度五星級(jí)酒店VIP客戶住宿服務(wù)協(xié)議書3篇
- 能源檢測薪資結(jié)構(gòu)
- 語言培訓(xùn)中心外教勞動(dòng)合同樣本
- 2025奧菱達(dá)電梯有限企業(yè)電梯部件供應(yīng)及維修服務(wù)協(xié)議3篇
- 施工成本鋼結(jié)構(gòu)安全協(xié)議
- 投資入伙協(xié)議書范本
- 2025年度口腔醫(yī)療市場營銷合作協(xié)議書3篇
- 高考語文復(fù)習(xí)小說閱讀之人物形象課件54張
- 控制系統(tǒng)的滯后校正設(shè)計(jì)
- 20以內(nèi)加減法口算題100道計(jì)時(shí)精編版(共計(jì)3500道)可直接打印
- 錯(cuò)題資源與利用方式
- 燈會(huì)安全施工方案
- 井下繩索取芯的自動(dòng)化與智能化發(fā)展研究
- CNAS-CL02:2023 醫(yī)學(xué)實(shí)驗(yàn)室質(zhì)量和能力認(rèn)可準(zhǔn)則
- 增值稅發(fā)票銷貨清單
- 溫濕度記錄表
- 痛經(jīng)癥狀量表(CMSS)全
- 水果店應(yīng)急預(yù)案范本
評(píng)論
0/150
提交評(píng)論