c飛機(jī)大戰(zhàn)實(shí)訓(xùn)報(bào)告附帶碼_第1頁(yè)
c飛機(jī)大戰(zhàn)實(shí)訓(xùn)報(bào)告附帶碼_第2頁(yè)
c飛機(jī)大戰(zhàn)實(shí)訓(xùn)報(bào)告附帶碼_第3頁(yè)
c飛機(jī)大戰(zhàn)實(shí)訓(xùn)報(bào)告附帶碼_第4頁(yè)
c飛機(jī)大戰(zhàn)實(shí)訓(xùn)報(bào)告附帶碼_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

目錄1.概括2實(shí)訓(xùn)項(xiàng)目簡(jiǎn)介.2實(shí)訓(xùn)功能說(shuō)明.2基本功能.2附帶功能.22.有關(guān)技術(shù).3Windows準(zhǔn)時(shí)器技術(shù)3透明貼圖實(shí)現(xiàn)技術(shù).3CObList鏈表4獲得矩形地區(qū).4使用AfxMessageBox顯示游戲過(guò)程中的提示信息4內(nèi)存開(kāi)釋.4CImageList辦理爆炸成效4對(duì)話框的應(yīng)用.43.整體設(shè)計(jì)與詳盡設(shè)計(jì).4系統(tǒng)模塊區(qū)分.4主要功能模塊.5系統(tǒng)對(duì)象類圖.5系統(tǒng)主程序活動(dòng)圖.5系統(tǒng)部分流程圖.54.編碼實(shí)現(xiàn).8繪制游戲背景位圖程序.8飛機(jī)大戰(zhàn)游戲?qū)ο蟮睦L制程序.8飛機(jī)大戰(zhàn)游戲?qū)ο髴?zhàn)機(jī)地點(diǎn)的動(dòng)向控制.8飛機(jī)大戰(zhàn)游戲?qū)ο笾g的碰撞實(shí)現(xiàn).9游戲界面輸出目前信息.95.項(xiàng)目程序測(cè)試.9戰(zhàn)機(jī)挪動(dòng)及子彈發(fā)射模塊測(cè)試.9敵機(jī)及炸彈模塊測(cè)試.20爆炸模塊測(cè)試.206.實(shí)訓(xùn)中碰到的主要問(wèn)題及解決方法.107.實(shí)訓(xùn)領(lǐng)會(huì).111.概括實(shí)訓(xùn)項(xiàng)目簡(jiǎn)介本次實(shí)訓(xùn)項(xiàng)目是做一個(gè)飛機(jī)大戰(zhàn)的游戲,應(yīng)用MFC編程,達(dá)成一個(gè)界面簡(jiǎn)短流利、游戲方式簡(jiǎn)單,玩起來(lái)易于上手的桌面游戲。該飛機(jī)大戰(zhàn)項(xiàng)目運(yùn)用的主要技術(shù)即是MFC編程中的一些函數(shù)、鏈表思想以及貼圖技術(shù)。實(shí)訓(xùn)功能說(shuō)明基本功能1)設(shè)置一個(gè)戰(zhàn)機(jī)擁有必定的速度,經(jīng)過(guò)鍵盤,方向鍵可控制戰(zhàn)機(jī)的地點(diǎn),空格鍵發(fā)射子彈。2)界面中敵機(jī)出現(xiàn)的地點(diǎn),以及敵機(jī)炸彈的發(fā)射均為隨機(jī)的,敵機(jī)與敵機(jī)炸彈均擁有必定的速度,且跟著關(guān)卡難度的增大,數(shù)目和速度均增添。3)關(guān)于隨機(jī)產(chǎn)生的敵機(jī)和敵機(jī)炸彈,若超出矩形地區(qū),則開(kāi)釋該對(duì)象。4)增添爆炸成效,包含戰(zhàn)機(jī)子彈打中敵機(jī)爆炸、敵機(jī)炸彈打中戰(zhàn)機(jī)爆炸、戰(zhàn)機(jī)與敵機(jī)相撞爆炸以及戰(zhàn)機(jī)子彈與敵機(jī)炸彈相撞爆炸四種爆炸成效。且爆炸發(fā)生后敵機(jī)、子彈、炸彈均消逝,戰(zhàn)機(jī)生命值減一。附帶功能1)為游戲界面增添了背景圖片,并在戰(zhàn)機(jī)發(fā)射子彈、戰(zhàn)機(jī)擊中敵機(jī)、敵機(jī)擊中戰(zhàn)機(jī)、以及戰(zhàn)機(jī)敵機(jī)相撞時(shí)均增添了背景音效。2)為游戲設(shè)置了不一樣的關(guān)卡,每個(gè)關(guān)卡難度不一樣,敵機(jī)與敵機(jī)炸彈的速度跟著關(guān)卡增大而加速,進(jìn)入第二關(guān)此后敵機(jī)從上下方均會(huì)隨機(jī)出現(xiàn),且隨機(jī)發(fā)射炸彈。3)第一關(guān)卡敵機(jī)從上方飛出,速度必定,戰(zhàn)機(jī)每打掉向來(lái)敵機(jī)則增添一分,每積十分,則為戰(zhàn)機(jī)增添一個(gè)生命值,當(dāng)戰(zhàn)機(jī)得分超出50分則可進(jìn)入下一關(guān);進(jìn)入第二、三關(guān)時(shí)敵機(jī)速度加速,分別從上下雙方飛出,此時(shí)戰(zhàn)機(jī)每得分20、30分,才會(huì)增添一個(gè)生命值,得分超出100、150分則進(jìn)入下一關(guān)、通關(guān)。(4)在游戲界面輸出目前游戲進(jìn)行信息,包含目前得分、目前關(guān)卡以及擊中敵機(jī)數(shù)目。5)增添了鼠標(biāo)控制戰(zhàn)機(jī)地點(diǎn)這一成效,戰(zhàn)績(jī)的地點(diǎn)跟著鼠標(biāo)的挪動(dòng)而挪動(dòng),而且點(diǎn)擊鼠標(biāo)左鍵可使得戰(zhàn)機(jī)發(fā)射子彈。6)實(shí)現(xiàn)了暫停游戲的功能,玩家可經(jīng)過(guò)鍵盤上的‘Z’鍵,對(duì)游戲進(jìn)行暫停。7)經(jīng)過(guò)對(duì)話框的彈出可提示玩家能否查察游戲說(shuō)明、能否進(jìn)入下一關(guān)、能否從頭開(kāi)始等信息,使得玩家可自己選擇。有關(guān)技術(shù)Windows準(zhǔn)時(shí)器技術(shù)Windows準(zhǔn)時(shí)器是一種輸入設(shè)施,它周期性地在每經(jīng)過(guò)一個(gè)指定的時(shí)間間隔后就通知應(yīng)用程序一次。程序?qū)r(shí)間間隔告訴Windows,而后Windows給您的程序發(fā)送周期性發(fā)生的WM_TIMER信息以表示時(shí)間到了。本程序中使用多個(gè)準(zhǔn)時(shí)器,分別控制不一樣的功能。在MFC的API函數(shù)中使用SetTimer( )函數(shù)設(shè)置準(zhǔn)時(shí)器,設(shè)置系統(tǒng)間隔時(shí)間,在OnTimer( )函數(shù)中實(shí)現(xiàn)響應(yīng)準(zhǔn)時(shí)器的程序。透明貼圖實(shí)現(xiàn)技術(shù)繪制透明位圖的重點(diǎn)就是創(chuàng)立一個(gè)“掩碼”位圖

(maskbitmap)

,這個(gè)“掩碼”位圖是一個(gè)單色位圖,它是位圖中圖像的一個(gè)單色剪影。在詳盡介紹實(shí)現(xiàn)過(guò)程以前先介紹下所使用的繪圖函數(shù)以及函數(shù)參數(shù)所代表的功能;繪制過(guò)程需要使用到BitBlt( )函數(shù)。整個(gè)功能的實(shí)現(xiàn)過(guò)程以下:

整個(gè)創(chuàng)立一張大小與需要繪制圖像同樣的位圖作為“掩碼”位圖;將新創(chuàng)立的“掩碼”位圖儲(chǔ)存至掩碼位圖的設(shè)施描繪表中;把位圖設(shè)施描繪表的背景設(shè)置成“透明色”,不需要顯示的顏色;復(fù)制粘貼位圖到“掩碼”位圖的設(shè)施描繪表中,這個(gè)時(shí)候“掩碼”位圖設(shè)施描繪表中寄存的位圖與位圖設(shè)施描繪表中的位圖同樣;把需要透明繪制的位圖與對(duì)話框繪圖相應(yīng)地區(qū)的背景進(jìn)行邏輯異或操作繪制到對(duì)話框上;把“掩碼”位圖與這個(gè)時(shí)候?qū)υ捒蛳鄳?yīng)地區(qū)的背景進(jìn)行邏輯與的操作;重復(fù)步驟5的操作,把需要透明繪制的位圖與對(duì)話框繪圖相應(yīng)地區(qū)的背景進(jìn)行邏輯異或操作繪制到對(duì)話框上;(8)最后把系統(tǒng)的畫(huà)筆還給系統(tǒng),刪除使用過(guò)的GDIObject,開(kāi)釋非空的指針,最后把新建的設(shè)施描繪表也刪除。CObList鏈表MFC類庫(kù)中供給了豐富的CObList類的成員函數(shù),此程序主要用到的成員函數(shù)以下:結(jié)構(gòu)函數(shù),為CObject指針結(jié)構(gòu)一個(gè)空的列表。GetHead( ),接見(jiàn)鏈表首部,返回列表中的首元素(列表不可以為空)。AddTail( ),在列表尾增添一個(gè)元素或另一個(gè)列表的全部元素。RemoveAll( ),刪除列表中全部的元素。GetNext( ),返回列表中尾元素的地點(diǎn)。GetHeadPosition( ),返回列表中首元素的地點(diǎn)。RemoveAt( ),從列表中刪除指定地點(diǎn)的元素。GetCount( ),返回列表中的元素?cái)?shù)。在文件中申明各游戲?qū)ο笈c游戲?qū)ο箧湵恚海?)資源視圖下,增添Dialog對(duì)話框。而后增添使用到的控件,并改正控件的ID便于后邊的使用。(2).為對(duì)話框增添類,在對(duì)話框模式下,點(diǎn)擊項(xiàng)目,增添類。(3).在類視圖中,為對(duì)話框類增添成員變量(控件變量)。設(shè)置變量的名稱、種類、

以最值等信息。(4).在資源視圖菜單中,選擇相應(yīng)的菜單項(xiàng),右擊增添時(shí)間監(jiān)聽(tīng)程序,設(shè)置函數(shù)辦理程序名稱。(5).在辦理程序函數(shù)中增添相應(yīng)的信息。整體設(shè)計(jì)與詳盡設(shè)計(jì)系統(tǒng)模塊區(qū)分該飛機(jī)大戰(zhàn)游戲程序分為游戲背景位圖繪制模塊、各游戲?qū)ο罄L制模塊、游戲?qū)ο笾g的碰撞模塊、爆炸成效產(chǎn)生模塊、游戲界面輸出玩家得分關(guān)卡信息模塊。此中在游戲?qū)ο罄L制模塊中,

戰(zhàn)機(jī)是獨(dú)一對(duì)象,在游戲開(kāi)始時(shí)產(chǎn)生該對(duì)象,

給予其固定的生命值,當(dāng)其與敵機(jī)對(duì)象、敵機(jī)炸彈碰撞時(shí)使其生命值減一,直至生命值為零,

便刪除戰(zhàn)機(jī)對(duì)象。敵機(jī)對(duì)象與敵機(jī)炸彈對(duì)象的繪制中采納準(zhǔn)時(shí)器技術(shù),

準(zhǔn)時(shí)產(chǎn)生。爆炸對(duì)象初始化為空,當(dāng)游戲過(guò)程中即時(shí)發(fā)生碰撞時(shí),在碰撞地點(diǎn)產(chǎn)生爆炸對(duì)象,增添到爆炸鏈表中。主要功能模塊系統(tǒng)對(duì)象類圖CGameObject是各個(gè)游戲?qū)ο蟮某橄蟾割?,繼承自CObject類,其余的類:戰(zhàn)機(jī)類、敵機(jī)類、爆炸類、子彈類、炸彈類、文字類都繼承了此類。每個(gè)游戲?qū)ο箢愔屑壤^承了來(lái)自父類CGameObject的屬性,又有自己的特有屬性和方法。系統(tǒng)主程序活動(dòng)圖系統(tǒng)部分流程圖該飛機(jī)大戰(zhàn)游戲履行流程圖:炮彈碰撞敵機(jī)玩家得分否進(jìn)入下一關(guān)是游戲初始化

開(kāi)始初始化游戲否子彈碰撞戰(zhàn)機(jī)是戰(zhàn)機(jī)生命減少否生命值為0是結(jié)束游戲結(jié)束利用準(zhǔn)時(shí)器準(zhǔn)時(shí)產(chǎn)生敵機(jī)并繪制敵機(jī)流程圖開(kāi)始是戰(zhàn)機(jī)戰(zhàn)亡準(zhǔn)時(shí)器準(zhǔn)時(shí)產(chǎn)生敵機(jī)并增添到敵機(jī)鏈表中否監(jiān)聽(tīng)敵機(jī)鏈表中是否有敵機(jī)是結(jié)束游戲獲得敵機(jī)在鏈表中的地點(diǎn)是判斷敵機(jī)是否出界否移除鏈表繪制敵機(jī)產(chǎn)生子彈結(jié)束編碼實(shí)現(xiàn)繪制游戲背景位圖程序CDC*pDC=GetDC( );<||enemy->GetPoint( ).x>||enemy->GetPoint( ).y<||enemy->GetPoint( ).y>{(posEn_t);deleteenemy;}+17,enemy->GetPoint( ).y+30,enemy->GetMotion( ));(ball);}<||ball->GetPoint( ).x>||ball->GetPoint( ).y<||ball->GetPoint( ).y>{(posball_t);deleteball;}<myplane->SetPoint(myplane->GetPoint( ).x,;elsemyplane->SetPoint(myplane->GetPoint( ).x,(myplane->GetPoint( ).y-speed));},myplane->GetPoint( ).y,1);(BombOne);CBomb*BombTwo=newCBomb(myplane->GetPoint( ).x+35,myplane->GetPoint( ).y,1);(BombTwo);PlaySound((LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle( ),SND_RESOURCE|SND_ASYNC);},myplane->GetPoint( ).y,1);PlaySound((LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle( ),SND_RESOURCE|SND_ASYNC);(BombOne);CBomb*BombTwo=newCBomb(myplane->GetPoint( ).x+35,myplane->GetPoint( ).y,1);(BombTwo);}}飛機(jī)大戰(zhàn)游戲?qū)ο笾g的碰撞實(shí)現(xiàn)本飛機(jī)大戰(zhàn)游戲中的碰撞考慮了飛機(jī)子彈打中敵機(jī)、敵機(jī)炸彈打中戰(zhàn)機(jī)、戰(zhàn)機(jī)與敵機(jī)相撞、敵機(jī)炸彈與戰(zhàn)機(jī)子彈相撞四種狀況,依據(jù)游戲?qū)ο蟮木匦蔚貐^(qū)能否有交錯(cuò),而確認(rèn)二者能否相撞,而產(chǎn)生爆炸對(duì)象,增添到爆炸鏈表中。以戰(zhàn)機(jī)與敵機(jī)相撞為例:if(myplane!=NULL&&is_Pause==0){POSITIONenemyPos,enemyTemp;for(enemyPos=( );(enemyTemp=enemyPos)!=NULL;){enemy=(CEnemy*)(enemyPos);+18,enemy->GetPoint( ).y+18);PlaySound((LPCTSTR)IDR_WAVE,AfxGetInstanceHandle( ),SND_RESOURCE|SND_ASYNC);(explosion);項(xiàng)目程序測(cè)試戰(zhàn)機(jī)挪動(dòng)及子彈發(fā)射模塊測(cè)試用例預(yù)期結(jié)果實(shí)質(zhì)結(jié)果問(wèn)題描繪改正方案點(diǎn)擊A鍵或鼠標(biāo)左移戰(zhàn)機(jī)向左挪動(dòng)戰(zhàn)機(jī)向左挪動(dòng)點(diǎn)擊D鍵或鼠標(biāo)右移戰(zhàn)機(jī)向右挪動(dòng)戰(zhàn)機(jī)向右挪動(dòng)點(diǎn)擊W鍵或鼠標(biāo)上移戰(zhàn)機(jī)向上挪動(dòng)戰(zhàn)機(jī)向上挪動(dòng)點(diǎn)擊S鍵或鼠標(biāo)上移戰(zhàn)機(jī)向下挪動(dòng)戰(zhàn)機(jī)向下挪動(dòng)敵機(jī)及炸彈模塊測(cè)試用例預(yù)期結(jié)果實(shí)質(zhì)結(jié)果問(wèn)題描繪改正方案玩家得分<50(未敵機(jī)只從上方飛出,速度固定敵機(jī)只從上方飛經(jīng)過(guò)第一關(guān))出,速度固定玩家得分>50(通敵機(jī)從上下雙方向均可飛出,敵機(jī)從上下雙方過(guò)第一關(guān)后)且速度不停增添向均可飛出,且速度不停增添爆炸模塊測(cè)試用例預(yù)期結(jié)果實(shí)質(zhì)結(jié)果問(wèn)題描繪改正方案戰(zhàn)機(jī)子彈打中敵機(jī)敵機(jī)地點(diǎn)處爆炸,敵敵機(jī)地點(diǎn)處爆炸,敵機(jī)機(jī)消逝,戰(zhàn)機(jī)生命-1消逝,戰(zhàn)機(jī)生命-1敵機(jī)炸彈打中戰(zhàn)機(jī)戰(zhàn)機(jī)地點(diǎn)處爆炸,戰(zhàn)戰(zhàn)機(jī)地點(diǎn)處爆炸,戰(zhàn)機(jī)機(jī)生命-1生命-1敵機(jī)戰(zhàn)機(jī)相撞敵機(jī)地點(diǎn)處爆炸,敵敵機(jī)地點(diǎn)處爆炸,敵機(jī)機(jī)消逝,戰(zhàn)機(jī)生命-1消逝,戰(zhàn)機(jī)生命-1戰(zhàn)機(jī)子彈與敵機(jī)炸敵機(jī)炸彈處爆炸,子敵機(jī)炸彈處爆炸,子彈彈相撞彈與炸彈均消逝消逝與炸彈均消逝消逝戰(zhàn)機(jī)生命值==0戰(zhàn)機(jī)消逝,GameOver戰(zhàn)機(jī)消逝,GameOver或許過(guò)關(guān)或許過(guò)關(guān)實(shí)訓(xùn)中碰到的主要問(wèn)題及解決方法(1)因?yàn)閷?duì)C++的面向?qū)ο蟮乃枷牒瓦壿嬎悸凡皇炝?xí),不理解此中的封裝之類的以及多態(tài)的思想,以致開(kāi)始真實(shí)的進(jìn)入實(shí)訓(xùn)接觸到項(xiàng)目時(shí)沒(méi)有開(kāi)發(fā)思路,經(jīng)過(guò)逐漸查問(wèn)書(shū)本整理C++面向?qū)ο缶幊趟悸罚胖饾u理清項(xiàng)目的開(kāi)發(fā)步驟。(2)本飛機(jī)大戰(zhàn)的游戲要求使用鏈表實(shí)現(xiàn)各游戲?qū)ο蟮膬?chǔ)存和開(kāi)釋,因?yàn)殒湵碇R(shí)掌握的不堅(jiān)固,使用起來(lái)老是出現(xiàn)這樣那樣的錯(cuò)誤,給整個(gè)游戲開(kāi)發(fā)帶來(lái)了很大的阻礙,經(jīng)過(guò)不停的調(diào)試改正,最后使程序正確運(yùn)轉(zhuǎn)。3)在繪制各樣游戲?qū)ο蟆獢硻C(jī)和敵機(jī)炸彈時(shí),開(kāi)始使用隨機(jī)函數(shù),畫(huà)出敵機(jī)時(shí)而很少,老是打不到預(yù)約的成效,此后經(jīng)過(guò)改正使用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論