飛機(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頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、山東科技大學(xué)實(shí)習(xí)報(bào)告程序設(shè)計(jì)綜合實(shí)踐實(shí)習(xí)報(bào)告學(xué)院名稱專業(yè)班級學(xué)生姓名學(xué)號指導(dǎo)教師山 東 科 技 大 學(xué)一、實(shí)習(xí)題目: 飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn) 二、實(shí)習(xí)時間:18周 19周 實(shí)習(xí)地點(diǎn): 三、實(shí)習(xí)任務(wù): 1基本功能要求:飛機(jī)大戰(zhàn)游戲必須運(yùn)用透明貼圖、按鍵處理、定時控制、雙緩沖技術(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í)成績 六、指導(dǎo)教師對實(shí)習(xí)的評語: 指導(dǎo)教師(簽章): 2015年 月 日目 錄 1. 概述

2、 4 1.1實(shí)訓(xùn)項(xiàng)目簡介4 1.2實(shí)訓(xùn)項(xiàng)目功能說明42. 相關(guān)技術(shù)5 2.1透明貼圖技術(shù)5 2.2 獲取矩形區(qū)域并判斷兩個矩形區(qū)域是否相撞 5 2.3鼠標(biāo)控制我方戰(zhàn)機(jī)5 2.4 Windows定時器技術(shù)6 2.5 CObList鏈表 6 2.6對話框的應(yīng)用 7 2.7雙緩沖技術(shù) 73.需求分析 7 3.1功能需求分析 .7 3.2 數(shù)據(jù)需求分析 . 7 3.3 行為需求分析 7 3.4 其他需求 74.總體設(shè)計(jì)與詳細(xì)設(shè)計(jì) 8 4.1 系統(tǒng)模塊劃分 8 4.2 主要功能模塊 8 4.2.1系統(tǒng)主要類圖 8 4.2.2飛機(jī)大戰(zhàn)游戲設(shè)計(jì)執(zhí)行流程圖8 4.3 擴(kuò)展功能設(shè)計(jì)思路9 4.4 軟件結(jié)構(gòu)設(shè)計(jì)體

3、會95. 編碼實(shí)現(xiàn)10 5.1繪制游戲背景位圖的程序10 5.2各個游戲?qū)ο蟮睦L制10 5.3我方戰(zhàn)機(jī)位置的動態(tài)控制12 5.4各個游戲?qū)ο笈鲎驳膶?shí)現(xiàn)13 5.5游戲界面輸出當(dāng)前游戲信息156.測試情況說明 17 6.1主要模塊測試情況176.2 主要功能測試情況187. 實(shí)訓(xùn)中遇到的主要問題及解決方法 198. 實(shí)訓(xùn)收獲與體會 191. 概述1.1實(shí)訓(xùn)項(xiàng)目簡介 本次實(shí)訓(xùn)項(xiàng)目是應(yīng)用MFC編程完成一個界面簡潔、運(yùn)行流暢、操作簡單、易于上手的飛機(jī)大戰(zhàn)。該飛機(jī)大戰(zhàn)項(xiàng)目運(yùn)用的主要技術(shù)是MFC編程中的一些函數(shù)、鏈表、貼圖技術(shù)。1.2實(shí)訓(xùn)項(xiàng)目功能說明 1.2.1基本功能 (1)設(shè)定我方戰(zhàn)機(jī)有速度初值,可通

4、過鍵盤方向鍵控制我方戰(zhàn)機(jī)位置,空格鍵控制我方戰(zhàn)機(jī)發(fā)射導(dǎo)彈。 (2)游戲界面中敵機(jī)出現(xiàn)的位置、敵機(jī)導(dǎo)彈的發(fā)射是隨機(jī)的,敵機(jī)有不同的速度。 (3)敵機(jī)以及敵機(jī)發(fā)射的導(dǎo)彈,一旦超出游戲界面邊界,則刪除出界對象。 (4)敵機(jī)導(dǎo)彈擊中我方戰(zhàn)機(jī)、我方戰(zhàn)機(jī)導(dǎo)彈擊中敵機(jī)、我方戰(zhàn)機(jī)與敵機(jī)碰撞均會產(chǎn)生爆炸效果。并且產(chǎn)生爆炸效果后,敵機(jī)、敵機(jī)導(dǎo)彈、我方戰(zhàn)機(jī)、我方戰(zhàn)機(jī)導(dǎo)彈消失,我方戰(zhàn)機(jī)生命值減一,得分加五分。 1.2.2附加功能 (1)為游戲界面添加了背景圖片。 (2)為游戲設(shè)置積分制,每擊落一架敵機(jī)或與敵機(jī)相撞得分加5分。 (3)敵機(jī)從游戲界面上界和下界隨機(jī)飛出。 (4)為游戲設(shè)置關(guān)卡制,每得分增加100分自動進(jìn)入

5、下一關(guān),每進(jìn)入新的一關(guān),通過減緩我方戰(zhàn)機(jī)速度來逐漸增加游戲難度。 (5)添加無敵模式,當(dāng)?shù)梅诌_(dá)到1000分后,按“Z”鍵即可開啟無敵模式。開啟無敵模式后,我方戰(zhàn)機(jī)生命值增加到999,并且被敵方戰(zhàn)機(jī)擊中或與敵方戰(zhàn)機(jī)相撞生命值不減少,擊落敵機(jī)分?jǐn)?shù)繼續(xù)增加。 (6)游戲界面顯示當(dāng)前游戲信息,游戲界面左上角分別顯示“我的分?jǐn)?shù)、戰(zhàn)機(jī)生命值、開啟無敵模式還需殺敵的數(shù)量、關(guān)數(shù)”,右上角顯示“是否開啟了無敵模式”,當(dāng)達(dá)到開啟無敵模式的條件后,右上角顯示“按Z鍵開啟無敵模式”,開啟無敵模式后,右上角變?yōu)椤盁o敵模式已開啟”,右下角顯示開啟無敵模式需達(dá)到的條件,當(dāng)每進(jìn)入新的一關(guān),游戲界面中心顯示“玩的不錯,進(jìn)入第X

6、關(guān)”。 (7)增加鼠標(biāo)左鍵控制我方戰(zhàn)機(jī)發(fā)射導(dǎo)彈的功能。 (8)當(dāng)我方戰(zhàn)機(jī)炸毀后,彈出對話框提示玩家是否重新開始游戲。2. 相關(guān)技術(shù)2.1 透明貼圖技術(shù)繪制透明位圖的關(guān)鍵就是創(chuàng)建一個“掩碼”位圖(mask bitmap),這個“掩碼”位圖是一個單色位圖,它是位圖中圖像的一個單色剪影。(1) DDB可以用MFC中的CBitmap來表示,而DDB一般儲存在資源文件中,在加載時只需通過資源ID號就可以將圖形裝入。(2) BOOL CBitmap:LoadBitmap(UINT nIDResource)可以裝入指定DDB,但是在繪制時必須借助另一個和當(dāng)前繪圖DC兼容的內(nèi)存DC來進(jìn)行。(3) 通過CDC:

7、BitBLT()繪制圖形,同時指定光柵操作的類型。2.2 獲取矩形區(qū)域并判斷兩個矩形區(qū)域是否相撞首先,使用CRect定義一個對象,然后使用GetRect(&對象名)函數(shù),獲取界面的矩形區(qū)域rect.Width() 為矩形區(qū)域的寬度,rect.Height()為矩形區(qū)域的高度。使用IntersectRect(&,&)函數(shù)來判斷兩個源矩形是否有重合的部分。如果有不為空,則返回非零值;否則,返回0。2.3鼠標(biāo)控制我方戰(zhàn)機(jī) LBUTTONDOWN(鼠標(biāo)左鍵被按下)對應(yīng)的函數(shù)為OnLButtonDown (UINT nFlags,CPoint point) 當(dāng)鼠標(biāo)左鍵被按下時,我

8、方戰(zhàn)機(jī)兩翼開始發(fā)射導(dǎo)彈。void CPlaneGameView:OnLButtonDown(UINT nFlags, CPoint point)/ TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值CView:OnLButtonDown(nFlags, point);if( is_Pause = 0)CBomb *BombOne=new CBomb( myplane->GetPoint().x+10, myplane->GetPoint().y+35,1);ListBomb.AddTail(BombOne);CBomb *BombTwo=new CBomb( myplane-&g

9、t;GetPoint().x+70, myplane->GetPoint().y+35,1);ListBomb.AddTail(BombTwo);2.4 Windows定時器技術(shù) Windows定時器是一種輸入設(shè)備,它周期性地在每經(jīng)過一個指定的時間間隔后就通知應(yīng)用程序一次。程序?qū)r間間隔告訴Windows,然后Windows給您的程序發(fā)送周期性發(fā)生的WM_TIMER消息以表示時間到了。本程序中使用多個定時器,分別控制不同的功能。在MFC的API函數(shù)中使用SetTimer()函數(shù)設(shè)置定時器,設(shè)置系統(tǒng)間隔時間,在OnTimer()函數(shù)中實(shí)現(xiàn)響應(yīng)定時器的程序。2.5 CObList鏈表 MFC

10、類庫中提供了豐富的CObList類的成員函數(shù),在CPlaneGameView.h文件中聲明各游戲?qū)ο笈c游戲?qū)ο箧湵恚海?) 創(chuàng)建各游戲?qū)ο螅?創(chuàng)建各游戲?qū)ο驝MyPlane *myplane;CEnemy *enemy;CBomb *bomb;CBall *ball;CExplosion *explosion;(2) 創(chuàng)建儲存各游戲?qū)ο蟮挠螒蜴湵恚?創(chuàng)建存儲游戲?qū)ο蟮膶ο箧湵鞢ObList ListEnemy;CObList ListMe;CObList ListBomb;CObList ListBall;CObList ListPeople;CObList ListExplosion; 2.

11、6對話框的應(yīng)用 當(dāng)我方戰(zhàn)機(jī)炸毀時,彈出是否重新開始游戲的對話框。對話框的應(yīng)用過程如下:(1)資源視圖下,添加Dialog對話框。然后添加使用到的控件,并修改控件的ID。(2)為對話框添加類,在對話框模式下,點(diǎn)擊項(xiàng)目,添加類。(3)在類視圖中,為對話框類添加成員變量(控件變量)。設(shè)置變量的名稱、類型、最值等信息。(4)在資源視圖菜單中,選擇相應(yīng)的菜單項(xiàng),右擊添加時間監(jiān)聽程序,設(shè)置函數(shù)處理程序名稱。(5)在處理程序函數(shù)中添加相應(yīng)的信息。2.7雙緩沖技術(shù)當(dāng)數(shù)據(jù)量很大時,繪圖可能需要幾秒鐘甚至更長的時間,而且有時還會出現(xiàn)閃爍現(xiàn)象,為了解決這些問題,可采用雙緩沖技術(shù)來繪圖。雙緩沖即在內(nèi)存中創(chuàng)建一個與屏幕

12、繪圖區(qū)域一致的對象,先將圖形繪制到內(nèi)存中的這個對象上,再一次性將這個對象上的圖形拷貝到屏幕上,這樣能大大加快繪圖的速度。雙緩沖實(shí)現(xiàn)過程如下:1、在內(nèi)存中創(chuàng)建與畫布一致的緩沖區(qū)2、在緩沖區(qū)畫圖3、將緩沖區(qū)位圖拷貝到當(dāng)前畫布上4、釋放內(nèi)存緩沖區(qū)3.需求分析l 3.1功能需求分析基本功能:鍵盤控制戰(zhàn)機(jī)移動、發(fā)射導(dǎo)彈,戰(zhàn)機(jī)、敵機(jī)爆炸拓展功能:游戲界面背景,鼠標(biāo)控制戰(zhàn)機(jī)發(fā)射導(dǎo)彈,積分制,過關(guān)制,對話框彈出,無敵模式l 3.2 數(shù)據(jù)需求分析我的分?jǐn)?shù)、戰(zhàn)機(jī)生命值、擊落敵機(jī)數(shù)目、關(guān)數(shù)實(shí)時顯示。l 3.3 行為需求分析鍵盤方向鍵控制戰(zhàn)機(jī)移動,空格鍵控制戰(zhàn)機(jī)發(fā)射導(dǎo)彈,鼠標(biāo)左鍵控制戰(zhàn)機(jī)發(fā)射導(dǎo)彈,鍵位之間互不沖突,戰(zhàn)

13、機(jī)移動不卡頓。l 3.4 其他需求游戲界面簡潔,游戲操作簡單易于上手。4. 總體設(shè)計(jì)與詳細(xì)設(shè)計(jì) 4.1 系統(tǒng)模塊劃分游戲系統(tǒng)模塊模塊名稱功能簡介應(yīng)用程序?qū)ο笥螒虺绦虻募虞d、游戲?qū)ο蟮睦L制、游戲規(guī)則的調(diào)用、玩家的鍵盤事件獲取我方戰(zhàn)機(jī)對象戰(zhàn)機(jī)類敵機(jī)對象敵機(jī)類我方戰(zhàn)機(jī)導(dǎo)彈對象我方戰(zhàn)機(jī)導(dǎo)彈類敵機(jī)炸彈對象敵機(jī)炸彈類爆炸對象爆炸類 4.2 主要功能模塊 4.2.1系統(tǒng)主要類圖 4.2.2飛機(jī)大戰(zhàn)游戲設(shè)計(jì)執(zhí)行流程圖. 除實(shí)現(xiàn)最基本的人工智能對戰(zhàn)功能之外,還增加人性化的設(shè)計(jì),使游戲的可玩性更高。 4.3 擴(kuò)展功能設(shè)計(jì)思路 1、為游戲添加背景,是游戲更加美觀。 2、為使畫面更能實(shí)時顯示當(dāng)前游戲信息,為游戲界面添

14、加“我的分?jǐn)?shù)”、“戰(zhàn)機(jī)生命”、“關(guān)數(shù)”等實(shí)時變化的信息。 3、為使游戲更具可玩性,為游戲添加無敵模式。 4.4 軟件結(jié)構(gòu)設(shè)計(jì)體會軟件結(jié)構(gòu)設(shè)計(jì)部分是軟件工程開發(fā)過程的重要部分,設(shè)計(jì)內(nèi)容的好壞關(guān)系到整個軟件的優(yōu)劣,在這次飛機(jī)大戰(zhàn)項(xiàng)目開發(fā)中,對結(jié)構(gòu)設(shè)計(jì)中出現(xiàn)的種種問題以及解決方法,加深了對軟件結(jié)構(gòu)設(shè)計(jì)方法的理解,熟悉了對其的應(yīng)用,從宏觀和細(xì)節(jié)處展示了整個軟件的體系結(jié)構(gòu),使整個軟件更具層次感。5. 編碼實(shí)現(xiàn) 5.1繪制游戲背景位圖的程序CDC *pDC = GetDC();/獲得矩形區(qū)域?qū)ο驝Rect rect;GetClientRect(&rect);/設(shè)備環(huán)境對象類-CDC類。CDC cd

15、c;/內(nèi)存中承載臨時圖像的位圖CBitmap bitmap1;/該函數(shù)創(chuàng)建一個與指定設(shè)備兼容的內(nèi)存設(shè)備上下文環(huán)境(DC)cdc.CreateCompatibleDC(pDC);/該函數(shù)創(chuàng)建與指定的設(shè)備環(huán)境相關(guān)的設(shè)備兼容的位圖。bitmap1.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height();/該函數(shù)選擇一對象到指定的設(shè)備上下文環(huán)境中,該新對象替換先前的相同類型的對象。CBitmap *pOldBit = cdc.SelectObject(&bitmap1);cdc.FillSolidRect(rect, RGB(0, 0,

16、0);/添加背景圖片CBitmap bitmap_BackGround;bitmap_BackGround.LoadBitmap(IDB_BLACKGROUND);BITMAP bimap2;/位圖圖像bitmap_BackGround.GetBitmap(&bimap2);CDC cdc_BackGround;/定義一個兼容的DCcdc_BackGround.CreateCompatibleDC(&cdc);/創(chuàng)建DCCBitmap*Old = cdc_BackGround.SelectObject(&bitmap_BackGround);cdc.StretchBlt

17、(0, 0, rect.Width(), rect.Height(), &cdc_BackGround, 0, 0, bimap2.bmWidth, bimap2.bmHeight, SRCCOPY); 5.2各個游戲?qū)ο蟮睦L制if (GetKeyState(VK_SPACE) < 0)/空格鍵發(fā)射炸彈(后面鼠標(biāo)左鍵)/我方戰(zhàn)機(jī)炸彈/我方戰(zhàn)機(jī)左側(cè)炸彈CBomb *BombOne = new CBomb(myplane->GetPoint().x + 10, myplane->GetPoint().y + 35, 1);ListBomb.AddTail(BombOne)

18、;/我方戰(zhàn)機(jī)右側(cè)炸彈CBomb *BombTwo = new CBomb(myplane->GetPoint().x + 70, myplane->GetPoint().y + 35, 1);ListBomb.AddTail(BombTwo);/敵方戰(zhàn)機(jī),敵方戰(zhàn)機(jī)炸彈if(myplane!=NULL&& is_Pause = 0)switch(nIDEvent)case 2:/產(chǎn)生敵機(jī)int motion1 = 1;/敵方飛機(jī)從上面出CEnemy *enemy1=new CEnemy(motion1);enemy1->SetSpeed_en(rand()%5

19、+1)/* pass_Num*/);ListEnemy.AddTail(enemy1);/產(chǎn)生敵機(jī)int motion2 = -1;/敵方飛機(jī)從下面出CEnemy *enemy2=new CEnemy(motion2);enemy2->SetSpeed_en(rand()%5 +1)/* pass_Num*/);ListEnemy.AddTail(enemy2);/產(chǎn)生敵機(jī)break;/我方戰(zhàn)機(jī)炸彈if( myplane!=NULL&& is_Pause= 0)/戰(zhàn)機(jī)炸彈位置POSITION posBomb=NULL,bombTemp=NULL;posBomb= List

20、Bomb.GetHeadPosition();while(posBomb!=NULL) bombTemp=posBomb; bomb=(CBomb *) ListBomb.GetNext(posBomb); if( bomb->GetPoint().x<rect.left| bomb->GetPoint().x>rect.right| bomb->GetPoint().y<rect.top| bomb->GetPoint().y>rect.bottom)/刪除出界的子彈 ListBomb.RemoveAt(bombTemp);delete bom

21、b;elsebomb->Draw(&cdc,TRUE); 5.3我方戰(zhàn)機(jī)位置的動態(tài)控制/控制我方戰(zhàn)機(jī)if (myplane != NULL)myplane->Draw(&cdc, TRUE);/鍵盤控制我方戰(zhàn)機(jī)if (GetKeyState(VK_UP) < 0)/戰(zhàn)機(jī)上移if (myplane->GetPoint().y < rect.top)myplane->SetPoint(myplane->GetPoint().x, rect.bottom);elsemyplane->SetPoint(myplane->GetPoi

22、nt().x, (myplane->GetPoint().y - speed);/ifif (GetKeyState(VK_DOWN) < 0)/戰(zhàn)機(jī)下移if (myplane->GetPoint().y>rect.bottom)myplane->SetPoint(myplane->GetPoint().x, rect.top);elsemyplane->SetPoint(myplane->GetPoint().x, (myplane->GetPoint().y + speed);/ifif (GetKeyState(VK_LEFT) &l

23、t; 0)/戰(zhàn)機(jī)左移if (myplane->GetPoint().x < rect.left)myplane->SetPoint(rect.right, myplane->GetPoint().y);elsemyplane->SetPoint(myplane->GetPoint().x - speed), myplane->GetPoint().y);/ifif (GetKeyState(VK_RIGHT) < 0)/戰(zhàn)機(jī)右移if (myplane->GetPoint().x > rect.right)myplane->Set

24、Point(rect.left, myplane->GetPoint().y);elsemyplane->SetPoint(myplane->GetPoint().x + speed), myplane->GetPoint().y);/ifif (GetKeyState(VK_SPACE) < 0)/空格鍵發(fā)射炸彈(后面鼠標(biāo)左鍵)/我方戰(zhàn)機(jī)炸彈/我方戰(zhàn)機(jī)左側(cè)炸彈CBomb *BombOne = new CBomb(myplane->GetPoint().x + 10, myplane->GetPoint().y + 35, 1);ListBomb.Ad

25、dTail(BombOne);/我方戰(zhàn)機(jī)右側(cè)炸彈CBomb *BombTwo = new CBomb(myplane->GetPoint().x + 70, myplane->GetPoint().y + 35, 1);ListBomb.AddTail(BombTwo); 5.4各個游戲?qū)ο笈鲎驳膶?shí)現(xiàn)本飛機(jī)大戰(zhàn)游戲中的碰撞考慮了飛機(jī)子彈打中敵機(jī)、敵機(jī)炸彈打中戰(zhàn)機(jī)、戰(zhàn)機(jī)與敵機(jī)相撞、三種情況,根據(jù)游戲?qū)ο蟮木匦螀^(qū)域是否有交叉,而確認(rèn)兩者是否相撞,而產(chǎn)生爆炸對象,添加到爆炸鏈表中。/如果我方戰(zhàn)機(jī)炸彈打中敵機(jī)if( myplane!=NULL/*&& is_Pause= 0

26、*/)POSITION explosionPos;explosionPos = ListExplosion.GetHeadPosition();while(explosionPos!=NULL)explosion = (CExplosion *) ListExplosion.GetNext(explosionPos); explosion->Draw(&cdc,TRUE);/炸彈位置,敵機(jī)位置POSITION bombPos,bombTemp,enemyPos,enemyTemp;for(bombPos= ListBomb.GetHeadPosition();(bombTemp=

27、bombPos)!=NULL;)bomb = (CBomb *) ListBomb.GetNext(bombPos);/獲得戰(zhàn)機(jī)炸彈的矩形區(qū)域CRect bombRect = bomb->GetRect();for(enemyPos= ListEnemy.GetHeadPosition();(enemyTemp=enemyPos)!=NULL;) enemy = (CEnemy *) ListEnemy.GetNext(enemyPos); /獲得敵機(jī)的矩形區(qū)域 CRect enemyRect = enemy->GetRect(); /判斷兩個矩形區(qū)域是否有交接 CRect tem

28、pRect; if(tempRect.IntersectRect(&bombRect,enemyRect)/將爆炸對象添加到爆炸鏈表中CExplosion *explosion=new CExplosion( enemy->GetPoint().x+17),( enemy->GetPoint().y+17);ListExplosion.AddTail(explosion);/后刪除子彈ListBomb.RemoveAt(bombTemp);delete bomb;/刪除敵機(jī)ListEnemy.RemoveAt(enemyTemp);delete enemy;score_Me

29、+=5;break;/如果敵機(jī)炸彈打中我方戰(zhàn)機(jī)if( myplane != NULL/*&& is_Pause= 0*/)POSITION ballPos,ballTemp;for(ballPos= ListBall.GetHeadPosition();(ballTemp=ballPos)!=NULL;) ball = (CBall *) ListBall.GetNext(ballPos); /獲得敵機(jī)炸彈的矩形區(qū)域 CRect ballRect = ball->GetRect(); /獲得戰(zhàn)機(jī)的矩形區(qū)域 CRect myPlaneRect = myplane->G

30、etRect(); CRect tempRect;/如果敵機(jī)炸彈打中我方戰(zhàn)機(jī) if(tempRect.IntersectRect(&ballRect,myPlaneRect) CExplosion *explosion = new CExplosion( myplane->GetPoint().x + 25) , ( myplane->GetPoint().y + 30);ListExplosion.AddTail(explosion);lifeNum_Me-=1;ListBall.RemoveAt(ballTemp);delete ball;if(lifeNum_Me &

31、lt;= 0)/刪除戰(zhàn)機(jī)delete myplane;myplane=NULL;break; 5.5游戲界面輸出當(dāng)前游戲信息 游戲界面上顯示的信息有:游戲界面左上角分別顯示“我的分?jǐn)?shù)、戰(zhàn)機(jī)生命值、開啟無敵模式還需殺敵的數(shù)量、關(guān)數(shù)”,右上角顯示“是否開啟了無敵模式”,當(dāng)達(dá)到開啟無敵模式的條件后,右上角顯示“按Z鍵開啟無敵模式”,開啟無敵模式后,右上角變?yōu)椤盁o敵模式已開啟”,右下角顯示開啟無敵模式需達(dá)到的條件,當(dāng)每進(jìn)入新的一關(guān),游戲界面中心顯示“玩的不錯,進(jìn)入第X關(guān)”。/顯示得分和我方戰(zhàn)機(jī)剩余生命值if(myplane != NULL&& is_Pause= 0)HFONT fon

32、t;font=CreateFont(20,10,0,0,0,0,0,0,0,0,0,10,100,0);cdc.SelectObject(font);CString str;cdc.SetTextColor(RGB(0,255,0);/設(shè)置文字顏色cdc.SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色str.Format(_T("戰(zhàn)機(jī)生命:%d"),lifeNum_Me);cdc.TextOutW(200,5,str);cdc.SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色str.Format(_T("我的分?jǐn)?shù):%d&q

33、uot;),score_Me);cdc.TextOutW(5,5,str);str.Format(_T("關(guān)數(shù):%d"), score_Me/100);cdc.TextOutW(5, 25, str);int n = score_Me / 100;cdc.SetTextColor(RGB(0, 0, 225);/設(shè)置文字顏色str.Format(_T("分?jǐn)?shù)達(dá)到1000");cdc.TextOutW(1000, 600, str);str.Format(_T("按Z鍵可開啟無敵模式");cdc.TextOutW(1000, 618,

34、str);cdc.SetTextColor(RGB(0, 255, 0);/設(shè)置文字顏色/enemy->set(n);/判斷無敵模式剩余殺敵數(shù)if (score_Me <= 1000)cdc.SetBkColor(TRANSPARENT);str.Format(_T("開啟無敵模式還需殺敵:%d"), 200 - score_Me / 5);cdc.SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色cdc.TextOutW(400, 5, str);elsestr.Format(_T("開啟無敵模式還需殺敵:0");cdc.

35、SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色cdc.TextOutW(400, 5, str);/開啟無敵模式if (score_Me >= 1000 && f = 1)cdc.SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色str.Format(_T("按“Z”鍵開啟無敵模式");cdc.TextOutW(1000, 5, str);if (GetKeyState('Z') < 0)f = 0;if (score_Me >= 1000&&f=0 )cdc.SetT

36、extColor(RGB(255, 0, 0);cdc.SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色str.Format(_T("殺敵數(shù)超過200,無敵模式開啟");cdc.TextOutW(1000, 5, str);lifeNum_Me = 999;/玩的不錯,繼續(xù)努力if (score_Me >= 100 && (score_Me % 100 = 0 | score_Me % 100 = 5 | score_Me % 100 = 10 | score_Me % 100 = 15 | score_Me % 100 = 20

37、| score_Me % 100 = 25 | score_Me % 100 = 30)cdc.SetTextColor(RGB(225, 0, 0);cdc.SetBkMode(TRANSPARENT);/設(shè)置文字背景為透明色str.Format(_T("玩的不錯,關(guān)數(shù)%d,繼續(xù)努力!"),score_Me/100);cdc.TextOutW(525,250 , str); 6測試情況說明。l 6.1主要模塊測試情況模塊1、戰(zhàn)機(jī)移動及導(dǎo)彈發(fā)射模塊測試用例預(yù)期結(jié)果實(shí)際結(jié)果問題描述修改方案點(diǎn)擊向左方向鍵戰(zhàn)機(jī)左移戰(zhàn)機(jī)左移點(diǎn)擊向右方向鍵戰(zhàn)機(jī)右移戰(zhàn)機(jī)右移點(diǎn)擊向上方向鍵戰(zhàn)機(jī)上移戰(zhàn)機(jī)上移點(diǎn)擊向下方向鍵戰(zhàn)機(jī)下移戰(zhàn)機(jī)下移點(diǎn)擊空格鍵或點(diǎn)擊鼠標(biāo)左鍵戰(zhàn)機(jī)發(fā)射導(dǎo)彈戰(zhàn)機(jī)發(fā)射導(dǎo)彈 模塊2、敵機(jī)及敵機(jī)炸彈模塊測試用例預(yù)期結(jié)果實(shí)際結(jié)果問題描述修改方案玩家開始游戲敵機(jī)從游戲界面上界和下界隨機(jī)飛出,不同敵機(jī)及導(dǎo)彈速度不同敵機(jī)從游戲界面上界和下界隨機(jī)飛出,不同敵機(jī)及導(dǎo)彈速度不同模塊3、爆炸模塊測試用例預(yù)期

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論