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

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序設(shè)計(jì)綜合實(shí)踐報(bào)告姓名學(xué)號(hào)班級(jí)項(xiàng)目名稱(chēng)飛機(jī)大戰(zhàn)實(shí)習(xí)地點(diǎn)實(shí)習(xí)時(shí)間11.2212.4實(shí)習(xí)成績(jī)指導(dǎo)教師簽字信息科學(xué)與工程學(xué)院 2015年 12月 04日 目 錄1概述··························32相關(guān)技術(shù)·······&#

2、183;················33需求分析························73.1功能需求分析······

3、3;··············73.2數(shù)據(jù)需求分析·····················83.3行為需求分析···········&#

4、183;·········83.4其他需求·······················94總體設(shè)計(jì)與詳細(xì)設(shè)計(jì)··············&

5、#183;····104.1系統(tǒng)模塊劃分·····················104.2主要功能模塊····················

6、83;104.3擴(kuò)展功能設(shè)計(jì)思路···················124.4軟件結(jié)構(gòu)設(shè)計(jì)體會(huì)···················135編碼實(shí)現(xiàn)······

7、··················136測(cè)試情況說(shuō)明······················196.1戰(zhàn)機(jī)移動(dòng)及子彈發(fā)射模塊測(cè)試·····

8、83;·········196.2爆炸模塊測(cè)試·····················197. 實(shí)訓(xùn)中遇到的主要問(wèn)題及解決方法············208. 實(shí)訓(xùn)收獲與體會(huì)&#

9、183;···················219.濟(jì)南參觀體會(huì)·····················211. 概述這次實(shí)訓(xùn)主要做的項(xiàng)目是飛機(jī)大戰(zhàn),主要實(shí)現(xiàn)的功能包括:戰(zhàn)機(jī)敵機(jī)BOSS可以發(fā)射導(dǎo)

10、彈,其中戰(zhàn)機(jī)發(fā)射導(dǎo)彈通過(guò)鍵盤(pán)上的空格鍵發(fā)射,敵機(jī)的導(dǎo)彈通過(guò)判斷與戰(zhàn)機(jī)的距離來(lái)自動(dòng)發(fā)射,BOSS的導(dǎo)彈是一直產(chǎn)生的,對(duì)戰(zhàn)機(jī)進(jìn)行掃射。戰(zhàn)機(jī)導(dǎo)彈與敵機(jī)相撞,戰(zhàn)機(jī)與敵機(jī)相撞,敵機(jī)導(dǎo)彈與戰(zhàn)機(jī)相撞,戰(zhàn)機(jī)導(dǎo)彈與BOSS相撞,戰(zhàn)機(jī)與BOSS相撞都能實(shí)現(xiàn)爆炸效果。戰(zhàn)機(jī)通過(guò)方向鍵控制自由移動(dòng)且不飛出程序邊界,戰(zhàn)機(jī)具有一定的初始左右上下移動(dòng)的速度,玩家可以設(shè)置戰(zhàn)機(jī)的速度控制戰(zhàn)機(jī)的移動(dòng)。敵機(jī)可根據(jù)隨機(jī)函數(shù)隨機(jī)產(chǎn)生,且屏幕的上下方飛入,大Boss可以隨著戰(zhàn)機(jī)移動(dòng),或者是實(shí)現(xiàn)自己的移動(dòng),客機(jī)從屏幕的右方向左移動(dòng),客機(jī)上載著小人,戰(zhàn)機(jī)攻打客機(jī)可以打死小人,小人將從客機(jī)上墜落。戰(zhàn)機(jī)具有吃生命值的功能,游戲過(guò)程中會(huì)隨機(jī)往下掉落

11、生命值,戰(zhàn)機(jī)吃了之后,生命值會(huì)上升。戰(zhàn)機(jī)具有一定的大招,使用大招時(shí)戰(zhàn)機(jī)可以發(fā)射導(dǎo)彈,但是其他的不能來(lái)攻打戰(zhàn)機(jī),戰(zhàn)機(jī)可以通過(guò)使用大招來(lái)進(jìn)行破關(guān)。 游戲背景可以移動(dòng),這樣戰(zhàn)機(jī)相對(duì)于背景來(lái)說(shuō)是相對(duì)運(yùn)動(dòng)的,結(jié)束界面包括游戲勝利的界面和失敗的界面。 游戲有各個(gè)關(guān)卡的劃分,實(shí)現(xiàn)達(dá)到一定的條件可以實(shí)現(xiàn)升級(jí),最后到達(dá)一定程度游戲結(jié)束。添加游戲的無(wú)敵模式,即戰(zhàn)機(jī)具有無(wú)限的生命 打不死,可以持續(xù)玩。添加游戲game over之后可以按鍵重玩的功能。在游戲界面輸出當(dāng)前游戲進(jìn)行信息,包括當(dāng)前得分、戰(zhàn)機(jī)生命值、敵機(jī)生命值、大Boss的生命值、當(dāng)前關(guān)卡,以及當(dāng)前的游戲模式。2. 相關(guān)技術(shù)2.1定時(shí)器的使用Windows定

12、時(shí)器是一種輸入設(shè)備,它周期性地在每經(jīng)過(guò)一個(gè)指定的 時(shí)間間隔后就通知應(yīng)用程序一次。程序?qū)r(shí)間間隔告訴Windows,然后Windows給您的程序發(fā)送周期性發(fā)生的WM_TIMER消息以表示時(shí)間到了。本程序中使用多個(gè)定時(shí)器,分別控制不同的功能。在MFC的API函數(shù)中使用SetTimer()函數(shù)設(shè)置定時(shí)器,設(shè)置系統(tǒng)間隔時(shí)間,在OnTimer()函數(shù)中實(shí)現(xiàn)響應(yīng)定時(shí)器的程序。同時(shí)使用完成后要在OnDestroy中使用KillTimer()將定時(shí)器進(jìn)行刪除,否則會(huì)有內(nèi)存的泄露導(dǎo)致程序運(yùn)行時(shí)速度會(huì)越來(lái)越慢在OnInitialUpdate()函數(shù)中設(shè)置this->SetTimer(10,100,0);/背

13、景圖片的產(chǎn)生在OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)函數(shù)中設(shè)置this->SetTimer(1,10,0);/飛機(jī)的/飛機(jī)導(dǎo)彈的/客機(jī)的移動(dòng)this->SetTimer(2,60,0);/敵機(jī)的產(chǎn)生/敵機(jī)的移動(dòng),敵機(jī)與戰(zhàn)機(jī)挨近時(shí)敵機(jī)產(chǎn)生炸彈/BOSS的產(chǎn)生/敵機(jī)的導(dǎo)彈this->SetTimer(3,50,0);/敵機(jī)與戰(zhàn)機(jī)爆炸/生命值與戰(zhàn)機(jī)相撞/戰(zhàn)機(jī)與飛機(jī)導(dǎo)彈相撞爆炸/BOSS與飛機(jī)導(dǎo)彈相撞/敵機(jī)的導(dǎo)彈與戰(zhàn)機(jī)相撞 this->SetTimer(4,100,0);/生命值的產(chǎn)生/生命值的移動(dòng)/BOSS導(dǎo)彈的移動(dòng)2

14、.2雙緩沖技術(shù) 雙緩沖使用內(nèi)存緩沖區(qū)來(lái)解決由多重繪制操作造成的閃爍問(wèn)題。當(dāng)啟用雙緩沖時(shí),所有繪制操作首先呈現(xiàn)到內(nèi)存緩沖區(qū),而不是屏幕上的繪圖圖面。所有繪制操作完成后,內(nèi)存緩沖區(qū)直接復(fù)制到與其關(guān)聯(lián)的繪圖圖面。因?yàn)樵谏现粓?zhí)行一個(gè)圖形操作,所以消除了由復(fù)雜繪制操作造成的圖像閃爍。 CBitmap MemBitmap; CDC MemDC; /在view中定義一個(gè)位圖對(duì)象在view中定義的CDC*pDC都可以用&hMemDC來(lái)進(jìn)行替換添加WM_ERASEBKGND響應(yīng)函數(shù),并清除響應(yīng)函數(shù)BOOL OnEraseBkgnd(CDC* pDC)/return CDialog:OnEraseBkgn

15、d(pDC);return FALSE;在繪圖完成后的清理MemBitmap.DeleteObject();MemDC.DeleteDC();2.3獲取窗口大小 利用this->GetClientRect(&rect1);函數(shù)取得屏幕窗口的大小,這樣在程序運(yùn)行時(shí)窗口才會(huì)正常的尺寸,否則戰(zhàn)機(jī)可以處于窗口的外面,兩一方面設(shè)置戰(zhàn)機(jī)移動(dòng)的條件限制戰(zhàn)機(jī)使其不能一處當(dāng)前窗口尺寸的范圍,通過(guò)比較當(dāng)前戰(zhàn)機(jī)的位置與屏幕的位置進(jìn)行比較CRect rect;CPlane pl1;滿(mǎn)足pl1.pos.y>=rect1.top 戰(zhàn)機(jī)才可以向上移動(dòng)pl1.pos.y<=rect1.Height(

16、)-戰(zhàn)機(jī)的高度 戰(zhàn)機(jī)才可以向下移動(dòng)pl1.pos.x>=rect1.left 戰(zhàn)機(jī)才可以往左移動(dòng)pl1.pos.x<=rect1.Width()-戰(zhàn)機(jī)的寬度 戰(zhàn)機(jī)才可以往右移動(dòng) 2.4透明貼圖技術(shù) 透明貼圖并不是真正意義上的透明,而是圖像不需要顯示的部分顯示出的顏色是當(dāng)前對(duì)話(huà)框的背景色,也就是說(shuō)把圖像不需要顯示的顏色當(dāng)成背景色,顯示的部分作為前景色,透明就是把背景換成對(duì)話(huà)框背景。繪制透明位圖是指在繪制位圖時(shí)只繪制除了指定顏色外的其余部分,而指定的顏色就被稱(chēng)為“透明色”。通過(guò)將位圖的背景色指定成“透明色”,在繪制時(shí)不繪制帶“透明色”的這部分背景,僅繪制圖像,這樣就可以將圖像透明地繪制

17、到窗口上。先在PS中或者是其他的可以進(jìn)行摳圖的軟件中將所需要的圖片摳出來(lái),在資源視圖中添加上然后圖片展示時(shí)使用BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);來(lái)進(jìn)行確認(rèn)圖片的位置將圖片的背景色改成透明色,或者是利用TransparentBlt(int x, int y, int nWidth, int nHeight, &memDC,0,0,int nWidth, int nHeight,RGB(0,0,0);來(lái)進(jìn)行實(shí)現(xiàn)。Transparen

18、tBlt()函數(shù)從指定源設(shè)備上下文中的矩形區(qū)域中像素的色彩信息轉(zhuǎn)化為目標(biāo)設(shè)備上下文中。TransparentBlt()函數(shù)在Windows98/Windows2000以上版本運(yùn)行,系統(tǒng)中需要包含 Msimg32.dll,使用時(shí)可以鏈接 Msimg32.lib。消除圖片背景還可以CImageList類(lèi)中的Draw()函數(shù),該函數(shù)最后一個(gè)參數(shù)設(shè)置為ILD_TRANSPARENT,這樣就可以在繪制圖片時(shí)輕松消去圖片背景。2.5 MFC類(lèi)庫(kù)的使用 MFC, 是一個(gè)微軟公司提供的類(lèi)庫(kù),以c+類(lèi)的形式封裝了Windows的API,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開(kāi)發(fā)人員的工作量。其中包含的類(lèi)包含大

19、量Windows句柄封裝類(lèi)和很多Windows的內(nèi)建控件和組件的封裝類(lèi)。在界面開(kāi)發(fā)方面,MFC提供對(duì)消息循環(huán)的封裝,使用消息映射來(lái)避免虛函數(shù)的開(kāi)銷(xiāo)。MFC也提供常用WINDOWS通用控件的封裝類(lèi)。MFC的主要優(yōu)點(diǎn)是可以用面向?qū)ο蟮姆椒▉?lái)調(diào)用Windows API,以及應(yīng)用程序開(kāi)發(fā)的邊界。MFC將很多應(yīng)用程序開(kāi)發(fā)中常用的功能自動(dòng)化,并且提供了文檔框架視圖結(jié)構(gòu)和活動(dòng)文檔這樣的便于自定義的應(yīng)用程序框架。同時(shí),在Visual C+內(nèi)部也內(nèi)建了很多對(duì)MFC的例如類(lèi)向?qū)н@樣的支持以減少軟件開(kāi)發(fā)的時(shí)間,使用類(lèi)向?qū)Э梢陨蓮腍ello World這樣的簡(jiǎn)單程序到活動(dòng)文檔這樣的復(fù)雜程序。MFC的消息映射機(jī)制也避

20、免了使用性能較低的龐大虛函數(shù)表。 在本程序主要使用了Object類(lèi)。2.6 COblist鏈表 MFC類(lèi)庫(kù)中提供了豐富的CObList類(lèi)的成員函數(shù),此程序主要用到的成員函數(shù)如下:(1) 構(gòu)造函數(shù),為CObject指針構(gòu)造一個(gè)空的列表。(2) AddHead()在列表頭添加一個(gè)或一列新元素。在操作前該列表可以為空。返回新插入元素的POSITION值。(3) (),訪(fǎng)問(wèn)鏈表首部,返回列表中的首元素(列表不能為空)。(4) (),返回列表中尾元素的位置。(5) (),返回列表中首元素的位置。返回用于循環(huán)或使用對(duì)象指針獲取的POSITION值,如果列表為空,那么返回NULL。(6) (),從列表中刪除

21、指定位置的元素。(7) (),刪除列表中所有的元素。2.7 CImageList鏈表 CImageList 類(lèi)提供Windows普通圖象列表控件的功能。CImageList主要是用于設(shè)置兩個(gè)爆炸的類(lèi)中,主要使用的函數(shù)如下:(1) Create()如果成功,則返回非零值,否則為0。需要兩步構(gòu)造一個(gè)CImageList。首先調(diào)用構(gòu)造函數(shù),然后調(diào)用Create,創(chuàng)建圖象列表并附加給CImageList對(duì)象。(2) Add()如果成功,則為第一個(gè)新圖象的基于零的索引,否則為-1。調(diào)用此函數(shù)來(lái)添加一個(gè)或多個(gè)圖象或圖標(biāo)到圖象列表中。(3) Draw( CDC* pdc, int nImage, POINT

22、 pt, UINT nStyle );返回值:如果成功,則返回非零值,否則為0。說(shuō)明:調(diào)用此函數(shù)繪制在拖放操作中正在被拖動(dòng)的圖象。2.8 CRect獲得矩形區(qū)域 IntersertRect ( LPCRECT lpRect1, LPCRECT lpRect2 );此函數(shù)使CRect等于兩個(gè)現(xiàn)有矩形的交。交是同時(shí)包含在兩個(gè)現(xiàn)有矩形中的最大矩形,如果兩個(gè)源矩形是否有重合的部分。如果有不為空,則返回非零值;否則,返回02.9添加背景 實(shí)現(xiàn)當(dāng)前游戲界面背景的動(dòng)態(tài)化添加了一個(gè)Beijing的類(lèi),所有的圖片都放在這個(gè)類(lèi)中,包括游戲的開(kāi)始圖片,結(jié)束圖片,game over的圖片以及勝利的圖片,在使用時(shí)調(diào)用這

23、個(gè)類(lèi)中的各類(lèi)draw函數(shù)bool CBeijing:drawbj(CDC* pDC,CRect rect)bool CBeijing:drawksbj(CDC* pDC,CRect rect)bool CBeijing:drawjsbj(CDC* pDC,CRect rect)bool CBeijing:drawwin(CDC* pDC,CRect rect)2.10靜態(tài)數(shù)據(jù)成員的使用靜態(tài)數(shù)據(jù)成員的使用,同時(shí)要進(jìn)行聲明如在CEnemy類(lèi)中static CImageList imglist;static bool loadimage(void);聲明CImageList CEnemy:imgli

24、st;2.11程序運(yùn)行窗口添加對(duì)話(huà)列表設(shè)置速度 在資源視圖中插入Dialog在工具箱中添加所有的輸入框,在Menu菜單中設(shè)置,利用右鍵中的添加事件處理程序進(jìn)行添加編輯,消息類(lèi)型是command類(lèi)列表選擇view類(lèi)3. 需求分析(用面向?qū)ο蠓椒ńo出系統(tǒng)的主要需求模型,略寫(xiě))3.1功能需求分析 1、戰(zhàn)機(jī)可根據(jù)方向鍵控制自由移動(dòng)且不飛出程序邊界 2、敵機(jī)可根據(jù)隨機(jī)函數(shù)自動(dòng)隨機(jī)產(chǎn)生,同時(shí)可以從屏幕的上下方飛入 3、戰(zhàn)機(jī)實(shí)現(xiàn)發(fā)射導(dǎo)彈(空格鍵發(fā)射導(dǎo)彈),敵機(jī)實(shí)現(xiàn)發(fā)射子彈 4、大Boss的存在,可以隨著戰(zhàn)機(jī)移動(dòng),或者是實(shí)現(xiàn)自己的移動(dòng) 5、客機(jī)的存在,客機(jī)上載著小人,戰(zhàn)機(jī)攻打客機(jī)可以打死小人,小人將從客機(jī)上墜

25、落 6、實(shí)現(xiàn)六種爆炸效果:戰(zhàn)機(jī)導(dǎo)彈與敵機(jī)、敵機(jī)子彈與戰(zhàn)機(jī)、戰(zhàn)機(jī)與敵機(jī)相撞,戰(zhàn)機(jī)導(dǎo)彈與Boss相撞,Boss導(dǎo)彈與戰(zhàn)機(jī)相撞,戰(zhàn)機(jī)導(dǎo)彈與客機(jī)相撞 7、戰(zhàn)機(jī)具有一定的初始左右上下移動(dòng)的速度,但是玩家可以通過(guò)修改戰(zhàn)機(jī)的速度來(lái)控制戰(zhàn)機(jī)的移動(dòng)。 8、戰(zhàn)機(jī)具有吃生命值的功能,游戲過(guò)程中會(huì)隨機(jī)往下掉落生命值,戰(zhàn)機(jī)吃了之后,生命值會(huì)上升。 9、實(shí)現(xiàn)游戲背景的移動(dòng),這樣戰(zhàn)機(jī)相對(duì)于背景來(lái)說(shuō)是相對(duì)運(yùn)動(dòng)的 10、游戲的各個(gè)等級(jí)的劃分,實(shí)現(xiàn)達(dá)到一定的條件可以實(shí)現(xiàn)升級(jí),最后到達(dá)一定程度游戲結(jié)束 11、戰(zhàn)機(jī)具有一定的大招,使用大招時(shí)戰(zhàn)機(jī)可以發(fā)射導(dǎo)彈,但是其他的不能來(lái)攻打戰(zhàn)機(jī),戰(zhàn)機(jī)可以通過(guò)使用大招來(lái)進(jìn)行破關(guān) 12、添加游戲的無(wú)

26、敵模式,即戰(zhàn)機(jī)具有無(wú)限的生命 打不死,可以持續(xù)玩 13、添加游戲game over之后可以按鍵重玩的功能 14、在游戲界面輸出當(dāng)前游戲進(jìn)行信息,包括當(dāng)前得分、戰(zhàn)機(jī)生命值、敵機(jī)生命值、大Boss的生命值、當(dāng)前關(guān)卡,以及當(dāng)前的游戲模式 15、添加結(jié)束界面包括游戲勝利的界面和失敗的界面3.2 數(shù)據(jù)需求分析 生命值的大小,成績(jī)的大小,到達(dá)一定成績(jī)或者是其他條件后可以升級(jí)。 (1)戰(zhàn)機(jī):戰(zhàn)機(jī)位置、戰(zhàn)機(jī)的生命值、戰(zhàn)機(jī)的移動(dòng)速度 (2)敵機(jī):敵機(jī)隨機(jī)產(chǎn)生位置、敵機(jī)的移動(dòng)速度 (3)戰(zhàn)機(jī)導(dǎo)彈:產(chǎn)生位置、導(dǎo)彈移動(dòng)速度、導(dǎo)彈的移動(dòng)速度 (4)敵機(jī)導(dǎo)彈:產(chǎn)生位置、導(dǎo)彈的移動(dòng)速度 (5)Boss:Boss的產(chǎn)生位置,

27、Boss獲得當(dāng)前戰(zhàn)機(jī)的位置、Boss會(huì)隨著戰(zhàn)機(jī)的移動(dòng)而移動(dòng) (6)Boss導(dǎo)彈:Boss導(dǎo)彈的產(chǎn)生位置、并在Boss移動(dòng)時(shí)不間斷的產(chǎn)生、導(dǎo)彈的移動(dòng)速度 (7)客機(jī):客機(jī)的位置 (8)客機(jī)小人:當(dāng)戰(zhàn)機(jī)打中客機(jī)的時(shí)候、小人隨之產(chǎn)生并從客機(jī)上掉落 (9)關(guān)卡:關(guān)卡的編號(hào)、關(guān)卡的難度、關(guān)卡的得分3.3 行為需求分析3.3.1戰(zhàn)機(jī)的行為: (1)能夠左右上下的移動(dòng)同時(shí)不飛出游戲窗口的邊框 (2)具有一定的初始生命值,生命值結(jié)束后將會(huì)game over (3)戰(zhàn)機(jī)可以打敵機(jī)、大Boss、客機(jī)、并產(chǎn)生爆炸效果 (4)戰(zhàn)機(jī)可以吃隨機(jī)掉落的生命值,吃了之后自身的生命值得以增長(zhǎng) (5)戰(zhàn)機(jī)的成績(jī)會(huì)隨著打敵機(jī),打B

28、oss得以增長(zhǎng),但是如果被打中的話(huà)成績(jī)減少 (6)戰(zhàn)機(jī)可以使用大招,躲避開(kāi)其他的攻擊,同時(shí)可以攻擊其他 (7)可以發(fā)射多排導(dǎo)彈3.3.2敵機(jī)的行為: (1)敵機(jī)隨機(jī)產(chǎn)生,將從屏幕的上下方進(jìn)行飛入 (2)敵機(jī)與戰(zhàn)機(jī)的距離到達(dá)一定的值后,敵機(jī)可以針對(duì)戰(zhàn)機(jī)發(fā)射導(dǎo)彈,打中后,戰(zhàn)機(jī)的生命值下降,成績(jī)下降3.3.3生命值的行為: (1)隨機(jī)產(chǎn)生,同時(shí)隨機(jī)從屏幕上方掉落,敵機(jī)吃了之后生命值會(huì)得以上升 (2)在屏幕的左上方得以顯示3.3.4大Boss的行為: (1)在游戲的第三關(guān)時(shí)產(chǎn)生,并可以發(fā)射多排導(dǎo)彈 (2)對(duì)游戲區(qū)域進(jìn)行掃射,敵機(jī)基本上躲不開(kāi),不過(guò)敵機(jī)可以使用大招(保護(hù)罩)將大Boss打死3.3.5客機(jī)

29、的行為: (1)在游戲第四關(guān)時(shí)出現(xiàn),上面載有乘客 (2)客機(jī)不能發(fā)射導(dǎo)彈 (3)客機(jī)一旦被敵機(jī)打中,上面的乘客會(huì)往下掉落3.4 其他需求 3.4.1、游戲可重玩 3.4.2、游戲結(jié)束后的提示 3.4.3、游戲的模式,包括無(wú)敵模式的設(shè)置3.4.4游戲的關(guān)卡3.4.5游戲的大招4. 總體設(shè)計(jì)與詳細(xì)設(shè)計(jì)4.1 系統(tǒng)模塊劃分4.2 主要功能模塊4.2.1玩家控制模塊4.2.2關(guān)卡升級(jí)模塊4.2.3敵機(jī)攻擊模塊4.2.4BOSS攻擊模塊4.2.5客機(jī)飛行模塊4.3 擴(kuò)展功能設(shè)計(jì)思路4.3.1 大BOSS的實(shí)現(xiàn)添加一個(gè)CBoss的類(lèi),添加Boss圖片的資源,在BOSS類(lèi)中的draw函數(shù)中實(shí)現(xiàn)了boss在游

30、戲輸出界面的產(chǎn)生,Boss導(dǎo)彈的產(chǎn)生在Cbomb類(lèi)中設(shè)置產(chǎn)生,設(shè)定Boss在第二關(guān)的時(shí)候出現(xiàn),Boss具有發(fā)射多排導(dǎo)彈掃射敵機(jī)的功能,在代碼中隱去的部分實(shí)現(xiàn)了Boss隨戰(zhàn)機(jī)的移動(dòng)而移動(dòng)的功能,沒(méi)有隱去輸出的部分是Boss的第二種方式,Boss直接從桌面的左邊一直運(yùn)動(dòng)到桌面的右邊,導(dǎo)彈會(huì)不停的產(chǎn)生并移動(dòng),兩種方式的區(qū)別在于,第一種方式實(shí)現(xiàn)出來(lái)會(huì)是游戲的運(yùn)行相對(duì)來(lái)講比較卡,故此輸出結(jié)果中使用了第二種的方式,相對(duì)來(lái)講這種方式對(duì)于Boss的移動(dòng)比較簡(jiǎn)單,實(shí)現(xiàn)時(shí)Boss會(huì)通過(guò)interrect函數(shù)獲得與戰(zhàn)機(jī)導(dǎo)彈的交互區(qū)域和戰(zhàn)機(jī)與Boss導(dǎo)彈的交互區(qū)域,如果有交互時(shí)則產(chǎn)生爆炸效果,由于相對(duì)于玩家來(lái)講,這個(gè)

31、Boss的存在對(duì)于通關(guān)來(lái)講比較困難,所以給戰(zhàn)機(jī)設(shè)置了大招,戰(zhàn)機(jī)按住T和可以發(fā)射導(dǎo)彈的空格鍵時(shí),敵機(jī)和Boss都不能對(duì)戰(zhàn)機(jī)發(fā)射導(dǎo)彈,此時(shí)敵機(jī)可以抓住機(jī)會(huì),對(duì)Boss進(jìn)行掃射一段時(shí)間后得以打死Boss。由于時(shí)間有限,游戲中尚未實(shí)現(xiàn)的功能包括,對(duì)于大招使用次數(shù)的限制,大招使用場(chǎng)合的限制還不是特別完善。4.3.2客機(jī)的實(shí)現(xiàn)設(shè)置一個(gè)CAirplane的類(lèi),在資源視圖中添加資源,利用draw函數(shù)在游戲界面中輸出客機(jī)的圖像,客機(jī)在在第四關(guān)中出現(xiàn)的,在游戲界面中是從右向左移動(dòng)的,客機(jī)對(duì)于戰(zhàn)機(jī)敵機(jī)來(lái)講是不能發(fā)射導(dǎo)彈的,在游戲中當(dāng)戰(zhàn)機(jī)向客機(jī)發(fā)射導(dǎo)彈時(shí)客機(jī)上會(huì)自動(dòng)的向下掉小人,在游戲中的圖片展示是小“心”,客機(jī)的產(chǎn)

32、生和移動(dòng)是在定時(shí)器中產(chǎn)生的,找到客機(jī)的下一個(gè)位置在ondraw中實(shí)現(xiàn),客機(jī)中小人的產(chǎn)生也是在定時(shí)器中產(chǎn)生,區(qū)別在于當(dāng)客機(jī)與飛機(jī)導(dǎo)彈相撞時(shí)才會(huì)產(chǎn)生小人,同時(shí)小人的移動(dòng)的是在一個(gè)刷新速度更快的一個(gè)定時(shí)器中存在的,一旦相撞,小人會(huì)獲取當(dāng)前的客機(jī)的位置,同時(shí)產(chǎn)生并向下移動(dòng),在實(shí)現(xiàn)這個(gè)功能時(shí)出現(xiàn)的問(wèn)題是小人會(huì)產(chǎn)生但是會(huì)固定在一個(gè)相對(duì)的位置不能向下移動(dòng),錯(cuò)誤出現(xiàn)是因?yàn)槎〞r(shí)器的時(shí)間設(shè)置問(wèn)題,小人的移動(dòng)和客機(jī)的移動(dòng)不能同時(shí)放在一個(gè)刷新時(shí)間相同的計(jì)時(shí)器中小人的移動(dòng)的定時(shí)器需要更快一旦。4.4 軟件結(jié)構(gòu)設(shè)計(jì)體會(huì)5. 編碼實(shí)現(xiàn)(1) 游戲的開(kāi)始和結(jié)束if(nIDEvent=10) BJ.drawksbj(&

33、hMemDC,rect1);if(life<=0) BJ.drawjsbj(&hMemDC,rect1);plist.RemoveAll();plist2.RemoveAll();plist3.RemoveAll(); plist4.RemoveAll();plist5.RemoveAll();plist6.RemoveAll();plist7.RemoveAll();plist8.RemoveAll();(2)游戲的初始參數(shù)的設(shè)置static int life=10;static int score=100; static int pass=1;static int bossl

34、ife=50;static int wudiscore=0;(3)游戲關(guān)卡的設(shè)置if(score>=200)hMemDC.SetBkColor(RGB(255,255,255);hMemDC.SetTextColor(RGB(255,0,0);hMemDC.TextOutW(0,150,L"按G進(jìn)入第二關(guān)");if(GetKeyState('G')<0) pass=2;if(pass=2)BO.drawboss(&hMemDC);POSITION bo; for( bo = plist7.GetHeadPosition(); bo !=

35、NULL; ) CBomb *temp=(CBomb*)plist7.GetNext(bo); temp->drawbossbomb(&hMemDC);/進(jìn)入第二關(guān)/ if(bosslife=0)BO.posboss.x=-255;BO.posboss.y=-300;hMemDC.SetBkColor(RGB(255,255,255); hMemDC.SetTextColor(RGB(255,0,0);hMemDC.TextOutW(0,170,L"按Q進(jìn)入第三¨關(guān)"); if(GetKeyState('Q')<0) pass=

36、3; /進(jìn)入第三關(guān)/if(score>=600)hMemDC.SetBkColor(RGB(255,255,255); hMemDC.SetTextColor(RGB(255,0,0);hMemDC.TextOutW(0,190,L"按M進(jìn)入¨第四關(guān)"); if(GetKeyState('M')<0) pass=4; if(pass=4) AI.drawair(&hMemDC);(4)游戲的各個(gè)模式if(GetKeyState('W')<0)life=;score=0;if(life>0)BJ.dra

37、wbj(&hMemDC,rect1);hMemDC.SetBkMode(TRANSPARENT);CString str1,str2,str3,str4;hMemDC.SetTextColor(RGB(255,255,255); str1.Format(L"戰(zhàn)機(jī)所剩生命值: %d",life);str2.Format(L"boss所剩生命值:%d",bosslife);str3.Format(L"所得分?jǐn)?shù):%d",score);str4.Format(L"當(dāng)前關(guān)卡:%d",pass);hMemDC.Text

38、OutW(0,10,str1);hMemDC.TextOutW(0,30,str2);hMemDC.TextOutW(0,50,str3);hMemDC.TextOutW(0,70,str4);hMemDC.TextOutW(0,90,L"戰(zhàn)機(jī)獲取能源生命值UP");hMemDC.TextOutW(0,130,L"長(zhǎng)按T鍵啟用保護(hù)罩");hMemDC.TextOutW(0,230,L"按W 進(jìn)入無(wú)敵模式");if(life<=0) if(GetKeyState('N')<0)life=10;score=10

39、0;elseBJ.drawjsbj(&hMemDC,rect1);plist.RemoveAll();plist2.RemoveAll();plist3.RemoveAll(); plist4.RemoveAll();plist5.RemoveAll();plist6.RemoveAll();plist7.RemoveAll();plist8.RemoveAll();if(GetKeyState('T')<0)/保À¡ê護(hù)¡è罩?pl1.DRAWprotect(&hMemDC);plist3.RemoveA

40、ll(); plist4.RemoveAll();plist7.RemoveAll();(4)游戲中的各個(gè)類(lèi)(5)游戲中的定時(shí)器在OnInitialUpdate()函數(shù)中設(shè)置this->SetTimer(10,100,0);/背景圖片的產(chǎn)生在OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)函數(shù)中設(shè)置this->SetTimer(1,10,0);/飛機(jī)的/飛機(jī)導(dǎo)彈的/客機(jī)的移動(dòng)this->SetTimer(2,60,0);/敵機(jī)的產(chǎn)生/敵機(jī)的移動(dòng),敵機(jī)與戰(zhàn)機(jī)挨近時(shí)敵機(jī)產(chǎn)生炸彈/BOSS的產(chǎn)生/敵機(jī)的導(dǎo)彈this->SetTi

41、mer(3,50,0);/敵機(jī)與戰(zhàn)機(jī)爆炸/生命值與戰(zhàn)機(jī)相撞/戰(zhàn)機(jī)與飛機(jī)導(dǎo)彈相撞爆炸/BOSS與飛機(jī)導(dǎo)彈相撞/敵機(jī)的導(dǎo)彈與戰(zhàn)機(jī)相撞 this->SetTimer(4,100,0);/生命值的產(chǎn)生/生命值的移動(dòng)/BOSS導(dǎo)彈的移動(dòng)(6)游戲結(jié)束后各個(gè)參數(shù)的刪除this->KillTimer(1);this->KillTimer(2);this->KillTimer(3);this->KillTimer(4);plist.RemoveAll();plist2.RemoveAll();plist3.RemoveAll();plist4.RemoveAll();plist5

42、.RemoveAll();plist6.RemoveAll();plist7.RemoveAll();plist8.RemoveAll();6測(cè)試情況說(shuō)明。 6.1戰(zhàn)機(jī)移動(dòng)及子彈發(fā)射模塊測(cè)試用例預(yù)期結(jié)果實(shí)際結(jié)果問(wèn)題描述修改方案按鍵戰(zhàn)機(jī)向左移動(dòng)戰(zhàn)機(jī)向左移動(dòng)按鍵戰(zhàn)機(jī)向右移動(dòng)戰(zhàn)機(jī)向右移動(dòng)按鍵戰(zhàn)機(jī)向上移動(dòng)戰(zhàn)機(jī)向上移動(dòng)按鍵戰(zhàn)機(jī)向下移動(dòng)戰(zhàn)機(jī)向下移動(dòng)6.2爆炸模塊測(cè)試用例預(yù)期結(jié)果實(shí)際結(jié)果問(wèn)題描述修改方案分?jǐn)?shù)增加戰(zhàn)機(jī)擊中敵機(jī)分?jǐn)?shù)加10,敵機(jī)打中BOSS分?jǐn)?shù)加10,戰(zhàn)機(jī)與敵機(jī)相撞分?jǐn)?shù)減少10,戰(zhàn)機(jī)被敵機(jī)擊中分?jǐn)?shù)減10戰(zhàn)機(jī)擊中敵機(jī)分?jǐn)?shù)加10,敵機(jī)打中BOSS分?jǐn)?shù)加10,戰(zhàn)機(jī)與敵機(jī)相撞分?jǐn)?shù)減少1,戰(zhàn)機(jī)被敵機(jī)擊中分?jǐn)?shù)

43、減1生命值減少敵機(jī)子彈擊中戰(zhàn)機(jī)生命值減1,戰(zhàn)機(jī)與敵機(jī)相撞生命值減1,BOSS擊中戰(zhàn)機(jī)生命值減1.戰(zhàn)機(jī)吃了生命值,生命值加1敵機(jī)子彈擊中戰(zhàn)機(jī)生命值減1,戰(zhàn)機(jī)與敵機(jī)相撞生命值減1,BOSS擊中戰(zhàn)機(jī)生命值減1.戰(zhàn)機(jī)吃了生命值,生命值加1戰(zhàn)機(jī)生命值等于0戰(zhàn)機(jī)消失,出現(xiàn)結(jié)束界面,出現(xiàn)結(jié)束界面戰(zhàn)機(jī)達(dá)到一定的分?jǐn)?shù)值游戲結(jié)束,出現(xiàn)勝利界面游戲結(jié)束,出現(xiàn)勝利界面7. 實(shí)訓(xùn)中遇到的主要問(wèn)題及解決方法(1) 隨著添加的對(duì)象的類(lèi)越來(lái)越多,游戲會(huì)運(yùn)行的越來(lái)越卡,最終甚至?xí)O聛?lái),解決方法是需要將一些多余的東西刪除,除了按照之前老師講的,用完定時(shí)器之后要將定時(shí)器刪除,刪除建立的鏈表之外,還要將游戲東西刪除,包括游戲過(guò)程中

44、要將飛出游戲界面的敵機(jī)和敵機(jī)導(dǎo)彈刪除,還有飛出界面的戰(zhàn)機(jī)的導(dǎo)彈,還有如果BOSS沒(méi)有被打死但是會(huì)飛出界面,這些都需要進(jìn)行刪除。對(duì)于定時(shí)器將一些相同時(shí)間的定時(shí)器進(jìn)行合并,只留下必要的定時(shí)器,減少定時(shí)器的數(shù)量,鏈表可以同時(shí)使用的就同時(shí)使用,因?yàn)樵O(shè)置太多游戲會(huì)卡。(2) 一開(kāi)始游戲畫(huà)面會(huì)非常的閃,而且剛開(kāi)始沒(méi)有加入游戲結(jié)束的圖片,使用的刷子進(jìn)行刷屏,閃的會(huì)特別的厲害,需要加入雙緩沖來(lái)解決(3) 戰(zhàn)機(jī)的移動(dòng)會(huì)移動(dòng)出游戲界面需要進(jìn)行限制,所以對(duì)上下左右鍵要控制戰(zhàn)機(jī)的移動(dòng)范圍,戰(zhàn)機(jī)的坐標(biāo)是以戰(zhàn)機(jī)的左上角的坐標(biāo)來(lái)記錄的,所以在限制范圍的時(shí)候邊框右側(cè)要減去戰(zhàn)機(jī)的寬,邊框下側(cè)要減去戰(zhàn)機(jī)的長(zhǎng)度。這樣才能保障戰(zhàn)機(jī)完全不飛出游戲邊框。(4) 碰撞時(shí)碰撞效果會(huì)特別的快,8張碰撞的圖片會(huì)特別快的一閃而過(guò),解決方式是要調(diào)整定時(shí)器的時(shí)間(5) 碰撞時(shí)如戰(zhàn)機(jī)和敵機(jī)碰撞的話(huà),要將敵機(jī)刪除,先通過(guò)讀取當(dāng)前敵機(jī)的位置,通過(guò)每個(gè)類(lèi)中的GetRect()函數(shù)來(lái)得到區(qū)域,通過(guò)IntersectRect(&rt1,&rt2)來(lái)判斷交互區(qū)域,如果有交互的話(huà)就產(chǎn)生爆炸效果,將之前保存敵機(jī)位置的變量RemoveAt(pos)進(jìn)行刪除,同時(shí)用delete來(lái)刪除臨時(shí)變量(6) 背景圖片的滾動(dòng)設(shè)置,實(shí)際上是利用了一張圖片來(lái)得以實(shí)現(xiàn)的,利用一個(gè)循環(huán),同時(shí)將圖片的下坐標(biāo)加

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論