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

下載本文檔

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

文檔簡介

1、程序設(shè)計(jì)綜合實(shí)踐實(shí)習(xí)報(bào)告學(xué)院名稱信息科學(xué)與工程學(xué)院專業(yè)班級軟件工程20123學(xué)生姓名程大川學(xué)號201201051002指導(dǎo)教師孫紅梅山東科技大學(xué)信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告_、實(shí)習(xí)題目:飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)二、實(shí)習(xí)時(shí)間:7周8周實(shí)習(xí)地點(diǎn):J13-128三、實(shí)習(xí)任務(wù):1. 基本功能要求:飛機(jī)大戰(zhàn)游戲必須運(yùn)用透明貼圖、按鍵處理、定時(shí)控制、雙緩沖技術(shù) 等技術(shù)實(shí)現(xiàn)戰(zhàn)機(jī)(玩家)和敵機(jī)(計(jì)算機(jī))對戰(zhàn)功能2. 擴(kuò)展功能:在完成基本功能基礎(chǔ)上町以增加雙人對戰(zhàn)、游戲積分制、聲音效果、多種 子彈類型、客機(jī)類型、游戲關(guān)卡設(shè)計(jì)、多種類型敵機(jī)、游戲中間結(jié)果存貯等功能四、小組分工說明:此次實(shí)習(xí)項(xiàng)目,所有內(nèi)容均由

2、一人完成五、實(shí)習(xí)成績六、指導(dǎo)教師對實(shí)習(xí)的評語:指導(dǎo)教師(簽章):2014年 月 日信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告1. 概述51.1實(shí)訓(xùn)概述51.2功能概述52. 相關(guān)技術(shù)52.1滾動(dòng)背景技術(shù)52.2透明貝占圖技術(shù)52.3走時(shí)器技術(shù)52.4雙緩沖技術(shù)25連續(xù)按鍵處理技術(shù)2.6童處理技術(shù)2.7鏈表存儲(chǔ)技術(shù)62.8動(dòng)態(tài)效果技術(shù)73.需求分析731功能需求分析73.2數(shù)據(jù)需求分析73.3行為需求分析83.4其他需求84.總體設(shè)計(jì)與詳細(xì)設(shè)計(jì)84.1系纟站聆劃分4.2主要功能槪4.2.1玩家控制模塊設(shè)計(jì)圖信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告4.2.2游戲邏輯模塊窈十圖(包含關(guān)卡控制)104.2.3圖形顯

3、示模塊設(shè)計(jì)(包含敵方生成模塊)124.3主要類圖134.4軟件結(jié)構(gòu)耐體會(huì)135.編碼實(shí)現(xiàn)135.1編碼規(guī)范135.2代碼纟臣只策略145.3關(guān)鍵技術(shù)代碼實(shí)現(xiàn)146 .測試情況說明。226.1主要模塊測試情況22模塊1、碰撞模塊測試22模塊2、滾動(dòng)背景模塊測試23模塊3、關(guān)卡模塊測試236.2主要功能測試情況23功自總1、飛機(jī)控制功育試23功自總2、育E量塊吃取功能試23功自總3、BOSS功能測試23功自總3、顯示功自纟測試237. 實(shí)訓(xùn)中遇到的主要問題及解決方法238. 實(shí)訓(xùn)收獲與體會(huì)24信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告1.概述1.1實(shí)訓(xùn)概述這次實(shí)訓(xùn),目的以Wmdow7+VS 2013為壞境

4、,編寫一個(gè)簡單的飛機(jī)大戰(zhàn)游戲,熟悉軟 件工程的思想,學(xué)習(xí)MFC編程的方法,加深對面向?qū)﹀杷枷氲睦斫?2功能概述用戶可以左右移動(dòng)控制戰(zhàn)機(jī)和發(fā)射子彈,子彈命中敵機(jī)會(huì)造成傷害,敵機(jī)被擊毀可以獲 得積分,枳分達(dá)到一定程度會(huì)出現(xiàn)BOSS, BOSS被擊殺后即可進(jìn)行下一關(guān)。游戲中會(huì)不定期出現(xiàn)道具包,吃取不同的道具包會(huì)有不同的增益效果。2.相關(guān)技術(shù)本項(xiàng)目涉及的兒個(gè)主要技術(shù)介紹和簡要實(shí)現(xiàn)方式如下:2.1滾動(dòng)背景技術(shù)為了讓游戲場景更加逼真,游戲節(jié)奏更加合理,可以通過讓背景滾動(dòng)來提高游戲的場景 效應(yīng),實(shí)現(xiàn)這一技術(shù)時(shí),可以將一張背景圖片復(fù)制為三張,從上到下連續(xù)的拼接在一起,并 將中間的圖片進(jìn)行垂直翻轉(zhuǎn),在輸出圖像時(shí)

5、,每次只輸出合成后圖片的1/3部分,每次輸出 后,將位圖中的縱坐標(biāo)輸出位置增加一個(gè)位移量,當(dāng)輸出位置到達(dá)圖片的2/3部分時(shí),將圖 片的縱坐標(biāo)輸出位置置為0,由于圖片的起始位置和圖片的2/3位置是一致,所以在背景圖 片的顯示中,不會(huì)出現(xiàn)圖片的卡頓和瞬移現(xiàn)彖。2.2透明貼圖技術(shù)在飛機(jī)人戰(zhàn)項(xiàng)目中,需要將很多的EMP圖像貼到畫布上,結(jié)合邏輯處理完成對整個(gè)游 戲的設(shè)計(jì),為了實(shí)現(xiàn)更好的顯示效果,使移動(dòng)元素所用的圖像更加貼合背景,則需要利用透 明貼圖技術(shù),將BMP圖像中的無關(guān)顏色做透明處理,實(shí)現(xiàn)方式為調(diào)用CDC中的 TransparentBlt函數(shù),并且利用函數(shù)的最后一個(gè)參數(shù)填寫RGB信息,實(shí)現(xiàn)對對應(yīng)顏色的

6、透明 化。23定時(shí)器技術(shù)為了實(shí)現(xiàn)屏幕的定時(shí)刷新功能和暫停功能,需要設(shè)置定時(shí)器,當(dāng)設(shè)置好時(shí)間間隔時(shí),每 次經(jīng)過一個(gè)設(shè)置的時(shí)間間隔,Windows都會(huì)向程序發(fā)送一個(gè)WM_TIME&并且調(diào)用相關(guān)函 數(shù),程序執(zhí)行OnTimer函數(shù),并根據(jù)定時(shí)器編號執(zhí)行相應(yīng)的操作。實(shí)現(xiàn)方式為使用SetTmier信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告函數(shù)設(shè)置定時(shí)器標(biāo)識和時(shí)間間隔。另外也可以利用定時(shí)器實(shí)現(xiàn)對連續(xù)按鍵的處理,使子彈發(fā) 射和移動(dòng)效果更加平滑合理。2.4雙緩沖技術(shù)利用普通的繪制函數(shù)對項(xiàng)目中元素進(jìn)行繪圖時(shí),由于繪圖時(shí)機(jī)不一定連續(xù),繪圖效率不 一定統(tǒng)一,會(huì)造成重影和閃屏的不良效果,為了解決這一問題,可以利用雙緩沖技術(shù),先

7、將 要繪制的每部分內(nèi)容存儲(chǔ)到內(nèi)存中的一個(gè)虛擬的繪圖設(shè)備中,當(dāng)所有部分的內(nèi)容都繪制完畢 后,再一次性的將內(nèi)存中的內(nèi)容繪制到真實(shí)屏幕上,實(shí)現(xiàn)這一方式,可以在程序定義一個(gè) CDC指針變量和CBiUnap指針向量實(shí)現(xiàn),在構(gòu)造函數(shù)中為兩個(gè)指針分配內(nèi)存空間,將所有 的圖像繪制完畢后,再利用GetDC函數(shù)取得真實(shí)窗I I CDC指針和BitBlt函數(shù)將內(nèi)存中的內(nèi) 容完整的拷貝至真實(shí)屏幕上。2.5連續(xù)按鍵處理技術(shù)在飛機(jī)大戰(zhàn)項(xiàng)目中,需要根據(jù)鍵盤輸入決定游戲中各種位置的改變和一些變量的內(nèi)容, 在利用戰(zhàn)機(jī)發(fā)射子彈或者進(jìn)行移動(dòng)時(shí),需要按下鍵盤的空格鍵或者方向鍵,在該項(xiàng)目中,如 果利用MFC中提供的默認(rèn)消息處理函數(shù)進(jìn)行

8、按鍵消息的處理,則會(huì)導(dǎo)致子彈發(fā)射頻率過快, 戰(zhàn)機(jī)移動(dòng)過快,甚至程序卡死等嚴(yán)重問題,所以應(yīng)將按鍵消息處理放在OnTmier函數(shù)里, 以達(dá)到平滑的移動(dòng)和發(fā)射子彈效果2.6碰撞處理技術(shù)在該項(xiàng)目中,需要處理對象之間的各種碰撞,比如,戰(zhàn)機(jī)子彈與敵機(jī)的碰撞、敵機(jī)子彈 與戰(zhàn)機(jī)的碰撞、敵機(jī)與戰(zhàn)機(jī)的碰撞、子彈與客機(jī)的碰撞等等。在處理碰撞時(shí),可以為每個(gè)對 象設(shè)置一個(gè)與位圖大小相同的矩形,矩形的位置與對應(yīng)位圖所在位置一直,當(dāng)判斷兩個(gè)元素 是否發(fā)生了碰撞時(shí),只需要利用IntersectRect函數(shù)判斷兩個(gè)矩形是否相交即可。2.7鏈表存儲(chǔ)技術(shù)一局游戲中會(huì)有很多的敵機(jī),敵機(jī)子彈以及戰(zhàn)機(jī)子彈,并且需要其進(jìn)行添加、刪除、遍

9、歷等操作,為了提高程序執(zhí)行效率,選用鏈表存儲(chǔ)這些類型,當(dāng)需要生產(chǎn)一個(gè)敵機(jī)或者敵機(jī) 子彈時(shí),只需要在鏈表尾部添加一個(gè)對應(yīng)的對象即可,時(shí)間復(fù)雜度為0(1),當(dāng)敵機(jī)被擊毀 或者子彈失效時(shí),只需要在鏈表中將對應(yīng)位置的對彖刪除即可,時(shí)間復(fù)雜度為0(1),當(dāng)繪 圖時(shí),需要對所有的對彖進(jìn)行遍歷,此時(shí)只需要從頭至尾遍歷一個(gè)鏈表即可,時(shí)間復(fù)雜度為 O(n),所有的復(fù)雜度已經(jīng)是最低,所以利用CList鏈表存儲(chǔ)項(xiàng)目各種對象,是一個(gè)非常合理信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告的選擇。2.8動(dòng)態(tài)效果技術(shù)在敵機(jī)被擊毀時(shí),需要顯示敵機(jī)爆炸的畫面,這個(gè)動(dòng)態(tài)的畫面是由一組靜態(tài)圖像連續(xù)繪 制形成的,為了實(shí)現(xiàn)這一效果,可以利用MFC

10、中的CIinageList類,將一組由靜態(tài)圖像組成 的連續(xù)位圖按照一定格式轉(zhuǎn)化為CLnageList對象,并為每個(gè)對彖設(shè)置一個(gè)index,在敵機(jī)生 命值為0時(shí),根據(jù)index逐幀播放圖像,實(shí)現(xiàn)敵機(jī)爆炸的動(dòng)態(tài)效呆。3 需求分析3.1功能需求分析飛機(jī)大戰(zhàn)項(xiàng)目需要實(shí)現(xiàn)的主要功能如卞:戰(zhàn)機(jī)在用戶的控制下可以自由移動(dòng),但不可以移動(dòng)到窗體外。戰(zhàn)機(jī)可以連續(xù)發(fā)射子彈,子彈的起始位置和戰(zhàn)機(jī)位置有關(guān)。敵機(jī)在窗II頂部隨機(jī)產(chǎn)生,產(chǎn)生后垂直向卞移動(dòng)。敵機(jī)可以發(fā)射子彈,每個(gè)敵機(jī)在一個(gè)發(fā)射時(shí)刻可以發(fā)射兩枚子彈??蜋C(jī)在窗II頂部隨機(jī)產(chǎn)生,產(chǎn)生后由極慢的速度向下移動(dòng)??蜋C(jī)的犬小十分龐人,遠(yuǎn)大于敵機(jī)和戰(zhàn)機(jī)戰(zhàn)機(jī)子彈由戰(zhàn)機(jī)產(chǎn)生,垂

11、直向上飛行,并且可以擊中敵機(jī)和客機(jī)敵機(jī)子彈由敵機(jī)產(chǎn)生,垂直向下飛行,并且可以擊中戰(zhàn)機(jī)和客機(jī)游戲中會(huì)不定期出現(xiàn)道具包,飛機(jī)經(jīng)過道具包會(huì)出現(xiàn)不同的效果擊毀敵機(jī)可以獲得一定的得分,得分到達(dá)一定數(shù)量會(huì)出現(xiàn)BOSS BOSS產(chǎn)生于頂部,不會(huì)向下移動(dòng),會(huì)被子彈擊中,擊毀后可通過關(guān)卡。通過關(guān)卡后會(huì)使游戲難度增加,通過所有關(guān)卡會(huì)通關(guān),完成游戲。3.2數(shù)據(jù)需求分析飛機(jī)人戰(zhàn)項(xiàng)目中所需要的數(shù)據(jù)有類型數(shù)據(jù)戰(zhàn)機(jī)戰(zhàn)機(jī)位置,戰(zhàn)機(jī)生命值,戰(zhàn)機(jī)傷害值敵機(jī)敵機(jī)位置,敵機(jī)生命值,敵機(jī)傷害值,敵機(jī)的生成速 度,敵機(jī)的移動(dòng)速度戰(zhàn)機(jī)子彈子彈位置,子彈發(fā)射相應(yīng)速度,子彈移動(dòng)速度,子彈 傷害值敵機(jī)子彈子彈位置,子彈發(fā)射生成速度,子彈移動(dòng)速度

12、,子彈7信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告?zhèn)χ档谰甙谰甙愋停谰甙恢?,道具包移?dòng)速度BOSSEOSS位置,EOSS傷害,EOSS生命值關(guān)卡關(guān)卡編號,關(guān)卡難度,得分33行為需求分析飛機(jī)人戰(zhàn)項(xiàng)目中的行為可以用下面的用例圖表示34其他需求背景可以滾動(dòng)4 總體設(shè)計(jì)與詳細(xì)設(shè)計(jì)(介紹游戲的功能模塊劃分,主要類圖、狀態(tài)圖、活動(dòng)圖或順序圖)信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告4.1系統(tǒng)模塊劃分圖形顯示模塊關(guān)卡控制模塊敵方生成模塊游戲邏輯模塊玩家控制模塊飛機(jī)大戰(zhàn)游戲系統(tǒng)4.2主要功能模塊421玩家控制模塊設(shè)計(jì)圖信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告422游戲邏輯模塊設(shè)計(jì)圖(包含關(guān)卡控制)信息科學(xué)與工程學(xué)院軟件

13、實(shí)踐實(shí)訓(xùn)報(bào)告11信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告4.2.3圖形顯示模塊設(shè)計(jì)(包含敵方生成模塊)信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告4.3主要類圖4.4軟件結(jié)構(gòu)設(shè)計(jì)體會(huì)軟件結(jié)構(gòu)設(shè)計(jì)部分是軟件工程開發(fā)過程的重要部分,設(shè)計(jì)內(nèi)容的好壞關(guān)系到整個(gè)軟件的 優(yōu)劣,在這次飛機(jī)人戰(zhàn)項(xiàng)目開發(fā)中,對結(jié)構(gòu)設(shè)計(jì)中出現(xiàn)的種種問題以及解決方法,加深了對 軟件結(jié)構(gòu)設(shè)計(jì)方法的理解,熟悉了對其的應(yīng)用,從系統(tǒng)功能模塊設(shè)計(jì)到主要功能設(shè)計(jì),從類 圖到狀態(tài)圖,都是著軟件開發(fā)的每一個(gè)步驟,從宏觀和細(xì)節(jié)處展示了整個(gè)軟件的體系結(jié)構(gòu), 使整個(gè)軟件更有層次感。5.編碼實(shí)現(xiàn)5.1編碼規(guī)范 在這次飛機(jī)大戰(zhàn)設(shè)計(jì)開發(fā)項(xiàng)目中,涉及到的編碼規(guī)范主要包括 類、

14、對彖、變量、常量、函數(shù)的名稱含義準(zhǔn)確不臃腫 類的命名必須以C開頭。 類的名稱中的單詞首字母大寫。 變量名稱中的單詞首字母大寫。 函數(shù)名稱中的單詞首字母大寫 對彖、變量、常量的定義盡量定義在CPapeiPlaiieDoc里。 函數(shù)定義在CPaperPlaneView里。 對不易理解的部分進(jìn)行注釋13信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告5.2代碼組織策略以MFC代碼標(biāo)準(zhǔn)組織方式為主。5.3關(guān)鍵技術(shù)代碼實(shí)現(xiàn)5.3.1雙緩沖的實(shí)現(xiàn)CDC* pMeniDC;CBitmap* pBitniap;CPapeiPlaiieView:CPaperPlaneView()/ TODO:在此處添加構(gòu)造代碼pMeniDC

15、 = new CDC();pBitmap = new CBitmapQ;DiawBG(pMeniDC);pDC-BitBlt(O, 0, 600. 600, pMeniDC, 0, 0, SRCCOPY);CPaperPlaiieView:CPaperPlaneViewQdelete pMeniDC;delete pBitniap;5.3.2透明貼圖的實(shí)現(xiàn)void CCloud:draw(CDC* pDC)CDC meniDC;meniDC.CreateCompatibleDC(pDC);CBitmap bmpDraw;bmpDraw.LoadBitmap(C loudB itmapNum);

16、meniDC.SelectObject(&b mpDraw);pDC-TranspaientBlt(pos.x, pos.y, 80,50, &meniDC, 0, 0. 80,50、RGB(255, 255, 255); 5.3.3滾動(dòng)背景的實(shí)現(xiàn)DiawBG(pMeniDC);void CPaperPlaneView:DrawBG(CDC* pDC)CPaperPlaneDoc* pDoc = GetDocumentQ;ASSERT_VALID(pDoc);if (!pDoc)return;/*/CBitniap bitmap;14信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告bitinap.LoadB

17、itmap(pDoc-BackGroundNum);BITMAP BitMap;bitmap. GetBitmap (&E itMap);CDC deMem; dcMem.CieateCompatibleDC(pDC); deMem. SelectO bject(&bitmap); pDC-StretchBlt(O, 0, 600, 600, &dcMem, 0, pDoc-BGposY, 600. 600, SRCCOPY); pDoc-BGposY -= 10;if (pDoc-BGposYBGposY = 1200;53.4主要游戲邏輯void CPaperPlaneView:OnTim

18、ei(UINT_PTR nlDEvent)/ TODO:在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值CPapei PlaiieDoc * pDoc = GetDocumentQ;ASSERT_VALID(pDoc);if (!pDoc)return;CDC* pDC = GetDCQ;switch (nlDEvent)case 1:Di a wBG(pMeniDC);CloudIiiPlane(pDoc-myPlaiie.pDoc-enemy);FireIiiCloud(pDoc-FireList,pDoc-enemy);WateiIiiPlaiie(pDoc-WateiList, pDoc-my

19、Plane);PackageIiiPlane(pDoc-package, pDoc-myPlane);FireIiiBusiness(pDoc-FireList, pDoc-business);DrawFire(pDoc-FireList);DrawCloud(pDoc-enemv);DrawWatei(pDoc-WateiList); pDoc-mvPlane.Draw(pMeniDC); pDoc-package.Draw(pMeniDC); pDoc-business.Drav(pMeniDC);DrawTitleQ;if (pDoc-PlaiieScore = pDoc-PassBas

20、e* 100*(3*pDoc-NowLevel-2)+300) KillTmier(l);15信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告if (pDoc-NowLevelNowLevel);if (pDoc-NowLevelPlaiieScore = pDoc-PassBase *100* (3 * pDoc-NowLevel - 2) - 300& pDoc-PlaneScorePassBase * 100*(3 * pDoc-NowLevel - 2)if (pDoc-boss.pos.y = -200)killAllEnemyO;FiieIiiBoss(pDoc-FueList. pDoc-bo

21、ss); pDoc-boss.Draw(pMeniDC);else if (pDoc-PlaneScoie = pDoc-PassBase * 100*(3 * pDoc-NowLevel - 2)if (pDoc-boss.pos.y PlaneScore = pDoc-PassBase * 100 * (3 * pDoc-NowLevel - 2) + 1000;pDoc-boss.DrawUp(pMeniDC);if (pDoc-mvPlane.life PlaneScore = 0;SetLevel(pDoc-NowLevel= 1);SetTimer(l,25.0);elseexit

22、(l);/GetKeyConmiand();if (GetAsyiicKeyState(,P,)KillTmier(l);SetTunei(2,300, 0);if (GetAsyiicKeyState(VK_UP) pDoc-myPlane.up();if (GetAsyiicKeyState(VK_DOWN) pDoc -myPlane. d o wnQ;if (GetAsyiicKeyState(VK_LEFT) pDoc-myPlaiie.left();if (GetAsyiicKeyState(VK_RIGHT) pDoc-myPlane.nghtQ; pDoc-TiinerCnt+

23、;if (pDoc-TmierCnt % (40 / CFiie:FireMakeSpeed) FueList.AddTail(CFiie(pDoc-myPlane.pos + CPoint(25, -20);16信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告if (pDoc-TiinerCnt % (40 / CCloud:CloudMakeSpeed) boss.pos.v enemy.AddTail(CCloud(); ram(pDoc-enemy, pDoc-WateiList);if (pDoc-TmierCnt400&pDoc-TimeiCnt % (800 / CPackage:Packag

24、eMakeSpeed) Vl)pDoc-package.pos.v = 0; pDoc-package.PackType = randQ % 3 + 1;if (pDoc-havePower 0 & pDoc-TuneiCnt - pDoc-havePower 300) CFire: :FiieMakeSpeed = 6;if (pDoc-boss.pos.v -200 & pDoc-TunerCnt % (40 / 1) 1)iiit base = randQ % 200;for (int i = 0; iWaterList.AddTail(CWatei(CPoint(base+i * 20

25、, 200);for (int i = 0; iWaterList.AddTail(CWater(CPoint(base + 300 + i * 20, 200);if (pDoc-TiinerCnt % 4000 busiiiess.pos.x =% 450;pDoc-busiiiess.pos.y = 0;break;case 2:CBitniap bitmap;bitinap.LoadBitmap(IDB_PAUSE);BITMAP BitMap;bitmap. GetBitmap (&BitMap);CDC dcMem;dcMem.CreateCompatibleDC(pMeniDC)

26、;deMem. SelectO bject(&bitmap);pMeniDC-StietcliBlt(0, 0, 600, 600. &deMem, 0, 0, 600. 600, SRCCOPY);if (GetAsyiicKeyState(,P,)KillTmier(2); SetTiinei(l,25,0);if (GetAsyiicKeyState(,Q,) KillTmier(2);信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告SetLevel(pDoc-NowLevel = 1);SetTiinei(l, 25, 0);if (GetAsyiicKeyState(,E,) KillTmier(

27、2);if (AfkMessageEox(L“確定退出游戲? ME_YESNO) = 6) exit(l);elseSetTimer(2,300. 0);pDC-BitBlt(0, 0, 600. 600, pMeniDC, 0, 0, SRCCOPY);ReleaseDC(pDC);C View: OnTunei(nlDEvent);5.3.5碰撞判斷mt CPaperPlaneView:FneIiiCloud(CList& list, CList& enemy) CPapei PlaiieDoc * pDoc = GetDocumentQ;AS SERT_VALID(pDoc);if (!

28、pDoc)retuni 0;POSITION pos = enemy. GetHeadPositionQ;while (pos != NULL) pDoc-PlaiieScore+=enemy.GetNext(pos).beFued(list);return 0;void CPaperPlaneView:FireIiiBoss(CList& list, CBoss& boss)CPapei PlaiieDoc * pDoc = GetDocumentQ;ASSERT_VALID(pDoc);if (!pDoc)retuni;boss.beFiied(list);if (boss.life Pl

29、aiieScore = pDoc-PassBase * 100 * (3 * pDoc-NowLevel - 2); return;mt CPaperPlaneView:WaterInPlane(CList& listCPlane& plane)POSITION ps2,pos = list.GetHeadPosition();while (pos != NULL)信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告ps2 = pos;if (plane.beWateied(list.GetNext(pos)list.RemoveAt(ps2);return 0;mt CPaperPlaneView:Cloud

30、IiiPlane(CPlaiie& plane, CList& enemy)POSITION pos = enemy. GetHeadPositionQ;while (pos != NULL)CCloud& tmp = enemy.GetNext(pos);CRect planeRectl. planeRect2, cloudRect, teniRect;plaiieRect 1 .SetRect(plane.pos + CPoint(10,10), plane.pos + CPoint(60, 30); plaiieRect2.SetRect(plane.pos + CPomt(0, 30)

31、, plane.pos + CPoint(70. 80); cloudRect.SetRect(tmp.pos, tmp.pos + CPomt(80, 50);if (plane.life0 &tmp.life0& (teniRect.IiitersectRect(cloudRect, planeRectl) | teniRec 匚 Ineis 亡 ctRect(cloudRect,plaiieRect2)plane.life -= tmp.damage;tmp.life = plane.damage;return 1;return 0;5.3.6鏈表遍歷mt CPaperPlaneView

32、:FiieIiiCloud(CList& list, CList& enemy)CPapei PlaiieDoc * pDoc = GetDocumentQ;ASSERT_VALID(pDoc);if (!pDoc)return 0;POSITION pos = enemy. GetHeadPositionQ;while (pos != NULL)pDoc-PlaiieScore+=enemy.GetNext(pos).beFued(list);return 0;53.7關(guān)卡設(shè)置void CPaperPlaneView: SetLevel(mt iiLevel)CPapei PlaiieDoc

33、 * pDoc = GetDocumentQ;ASSERT_VALID(pDoc);if (!pDoc) return;switch (nLevel)19信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告case 1:CPlane:PlaneLife = 6;CPlane: TlaneDainage = 1;CPlane: TlaneBitmapNum = IDB_PLANE1;CCloud: :CloudBitmapNum = IDBCLOUDl;CCloud: :CloudBoonuiiapNum = IDB_CLOUDBOOM1;CCloud:CloudLife = 1;CCloud:CloudDama

34、ge = 1;CCloud:CloudMakeSpeed = 1;CCloud: :CloudMoveSpeed = 2;CFire:FireMakeSpeed = 6; /I - 9 CFire:FireMove Speed = 15;CFire: :FireDaniage = 1;CFire: :FireBitniapNum = IDB_FIRE1;C Water: WaterMakePossible = 40;CWater: WaterMoveSpeed =4;C Water: AVaterDamage = 1;C Water: WaterBitmapNum = LDE_VATER1;C

35、Package:PackageMakeSpeed = 3;/every 20s CPackage:PackageMoveSpeed = 2;CBoss:BossBitmapNum = IDB_BOSS1;pDoc-PassBase = 10;pDoc-PlaiieScore = 0;pDoc-boss.pos.v = - 200;pDoc-TiinerCnt = 0;pDoc-BGposY = 0; pDoc-WaterList.RemoveAll(); pDoc-enemy.RemoveAll(); pDoc-FiieList.RemoveAll();pDoc-mvPlane. iiiitQ

36、;pDoc-NowLevel = 1;pDoc-liavePower = 0; pDoc-package.PackType = iand() % 3 + 1; pDoc-BackGroundNum = IDB_B ACKGROUND 1;20信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告pDoc-boss.life = 10; break;case 2:CPlane:PlaneLife = 6;CPlane: TlaneDainage = 1;CPlane: TlaneBitmapNum = IDB_PLANE2;CCloud: :CloudBitmapNum = EDE_CLOUD2;CCloud: :

37、CloudBoonuiiapNum = IDB_CLOUDBOOM1;CCloud:CloudLife = 2;CCloud:CloudDamage = 1;CCloud: :CloudMakeSpeed = 1;CCloud: :CloudMoveSpeed = 2;CFire:FireMakeSpeed = 6; /I - 40CFire:FireMoveSpeed = 15;CFire: :FireDaniage = 1;CFire: :FireBitniapNum = IDB_FIRE2;C Water: WaterMakePossible = 60;CWater: WaterMove

38、Speed = 3;C Water: WaterDamage = 1;C Water: WaterBitmapNum = LDE_WATER2;CPackage:PackageMakeSpeed = 3;/every 20sCPackage:PackageMoveSpeed = 2;CBoss:BossBitmapNum = IDB_BOSS1;pDoc-TiinerCnt = 0; pDoc-PassBase = 10;pDoc-BGposY = 0; pDoc-WaterList.RemoveAll(); pDoc-enemy.RemoveAll(); pDoc-FiieList.Remo

39、veAll();pDoc-mvPlane. iiiitQ;pDoc-liavePower = 0;pDoc-package.PackType = iand() % 3 + 1; pDoc-BackGroundNum = IDB_B ACKGROUND2; pDoc-NowLevel = 2;21信息科學(xué)與工程學(xué)院軟件實(shí)踐實(shí)訓(xùn)報(bào)告pDoc-boss.pos.v = -200;pDoc-boss.life = 3; break;default:KillTmier(l);AfxMessageBox(LM恭喜你,通關(guān)了 !ME_OK);SetTimer(2,300, 0); break;5.3.8子彈

40、生成void CPaperPlaneView:raiii(CList& enemy, CList& list) POSITION pos = enemy. GetHeadPositionQ;POSITION ps2;while (pos != NULL)ps2 = pos;CCloud& tinp = enemy.GetNext(pos);if (tmp.pos.y 600)enemy.RemoveAt(ps2);elseif (rand() % 100 CWater:WateiMakePossible) tmp.ram(list);void CCloud:iaiii(CList& list)list.AddTail(CWater(CPoint(pos.x +13

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論