




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序設(shè)計綜合實(shí)踐報告姓名學(xué)號班級項目名稱飛機(jī)大戰(zhàn)實(shí)習(xí)地點(diǎn)實(shí)習(xí)時間11.2212.4實(shí)習(xí)成績指導(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è)計與詳細(xì)設(shè)計··············&
5、#183;····104.1系統(tǒng)模塊劃分·····················104.2主要功能模塊····················
6、83;104.3擴(kuò)展功能設(shè)計思路···················124.4軟件結(jié)構(gòu)設(shè)計體會···················135編碼實(shí)現(xiàn)······
7、··················136測試情況說明······················196.1戰(zhàn)機(jī)移動及子彈發(fā)射模塊測試·····
8、83;·········196.2爆炸模塊測試·····················197. 實(shí)訓(xùn)中遇到的主要問題及解決方法············208. 實(shí)訓(xùn)收獲與體會
9、183;···················219.濟(jì)南參觀體會·····················211. 概述這次實(shí)訓(xùn)主要做的項目是飛機(jī)大戰(zhàn),主要實(shí)現(xiàn)的功能包括:戰(zhàn)機(jī)敵機(jī)BOSS可以發(fā)射導(dǎo)
10、彈,其中戰(zhàn)機(jī)發(fā)射導(dǎo)彈通過鍵盤上的空格鍵發(fā)射,敵機(jī)的導(dǎo)彈通過判斷與戰(zhàn)機(jī)的距離來自動發(fā)射,BOSS的導(dǎo)彈是一直產(chǎn)生的,對戰(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ī)通過方向鍵控制自由移動且不飛出程序邊界,戰(zhàn)機(jī)具有一定的初始左右上下移動的速度,玩家可以設(shè)置戰(zhàn)機(jī)的速度控制戰(zhàn)機(jī)的移動。敵機(jī)可根據(jù)隨機(jī)函數(shù)隨機(jī)產(chǎn)生,且屏幕的上下方飛入,大Boss可以隨著戰(zhàn)機(jī)移動,或者是實(shí)現(xiàn)自己的移動,客機(jī)從屏幕的右方向左移動,客機(jī)上載著小人,戰(zhàn)機(jī)攻打客機(jī)可以打死小人,小人將從客機(jī)上墜落。戰(zhàn)機(jī)具有吃生命值的功能,游戲過程中會隨機(jī)往下掉落
11、生命值,戰(zhàn)機(jī)吃了之后,生命值會上升。戰(zhàn)機(jī)具有一定的大招,使用大招時戰(zhàn)機(jī)可以發(fā)射導(dǎo)彈,但是其他的不能來攻打戰(zhàn)機(jī),戰(zhàn)機(jī)可以通過使用大招來進(jìn)行破關(guān)。 游戲背景可以移動,這樣戰(zhàn)機(jī)相對于背景來說是相對運(yùn)動的,結(jié)束界面包括游戲勝利的界面和失敗的界面。 游戲有各個關(guān)卡的劃分,實(shí)現(xiàn)達(dá)到一定的條件可以實(shí)現(xiàn)升級,最后到達(dá)一定程度游戲結(jié)束。添加游戲的無敵模式,即戰(zhàn)機(jī)具有無限的生命 打不死,可以持續(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定時器的使用Windows定
12、時器是一種輸入設(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)定時器的程序。同時使用完成后要在OnDestroy中使用KillTimer()將定時器進(jìn)行刪除,否則會有內(nèi)存的泄露導(dǎo)致程序運(yùn)行時速度會越來越慢在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ī)的移動this->SetTimer(2,60,0);/敵機(jī)的產(chǎn)生/敵機(jī)的移動,敵機(jī)與戰(zhàn)機(jī)挨近時敵機(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)生/生命值的移動/BOSS導(dǎo)彈的移動2
14、.2雙緩沖技術(shù) 雙緩沖使用內(nèi)存緩沖區(qū)來解決由多重繪制操作造成的閃爍問題。當(dāng)啟用雙緩沖時,所有繪制操作首先呈現(xiàn)到內(nèi)存緩沖區(qū),而不是屏幕上的繪圖圖面。所有繪制操作完成后,內(nèi)存緩沖區(qū)直接復(fù)制到與其關(guān)聯(lián)的繪圖圖面。因?yàn)樵谏现粓?zhí)行一個圖形操作,所以消除了由復(fù)雜繪制操作造成的圖像閃爍。 CBitmap MemBitmap; CDC MemDC; /在view中定義一個位圖對象在view中定義的CDC*pDC都可以用&hMemDC來進(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)行時窗口才會正常的尺寸,否則戰(zhàn)機(jī)可以處于窗口的外面,兩一方面設(shè)置戰(zhàn)機(jī)移動的條件限制戰(zhàn)機(jī)使其不能一處當(dāng)前窗口尺寸的范圍,通過比較當(dāng)前戰(zhàn)機(jī)的位置與屏幕的位置進(jìn)行比較CRect rect;CPlane pl1;滿足pl1.pos.y>=rect1.top 戰(zhàn)機(jī)才可以向上移動pl1.pos.y<=rect1.Height(
16、)-戰(zhàn)機(jī)的高度 戰(zhàn)機(jī)才可以向下移動pl1.pos.x>=rect1.left 戰(zhàn)機(jī)才可以往左移動pl1.pos.x<=rect1.Width()-戰(zhàn)機(jī)的寬度 戰(zhàn)機(jī)才可以往右移動 2.4透明貼圖技術(shù) 透明貼圖并不是真正意義上的透明,而是圖像不需要顯示的部分顯示出的顏色是當(dāng)前對話框的背景色,也就是說把圖像不需要顯示的顏色當(dāng)成背景色,顯示的部分作為前景色,透明就是把背景換成對話框背景。繪制透明位圖是指在繪制位圖時只繪制除了指定顏色外的其余部分,而指定的顏色就被稱為“透明色”。通過將位圖的背景色指定成“透明色”,在繪制時不繪制帶“透明色”的這部分背景,僅繪制圖像,這樣就可以將圖像透明地繪制
17、到窗口上。先在PS中或者是其他的可以進(jìn)行摳圖的軟件中將所需要的圖片摳出來,在資源視圖中添加上然后圖片展示時使用BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);來進(jìn)行確認(rèn)圖片的位置將圖片的背景色改成透明色,或者是利用TransparentBlt(int x, int y, int nWidth, int nHeight, &memDC,0,0,int nWidth, int nHeight,RGB(0,0,0);來進(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,使用時可以鏈接 Msimg32.lib。消除圖片背景還可以CImageList類中的Draw()函數(shù),該函數(shù)最后一個參數(shù)設(shè)置為ILD_TRANSPARENT,這樣就可以在繪制圖片時輕松消去圖片背景。2.5 MFC類庫的使用 MFC, 是一個微軟公司提供的類庫,以c+類的形式封裝了Windows的API,并且包含一個應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含的類包含大
19、量Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。在界面開發(fā)方面,MFC提供對消息循環(huán)的封裝,使用消息映射來避免虛函數(shù)的開銷。MFC也提供常用WINDOWS通用控件的封裝類。MFC的主要優(yōu)點(diǎn)是可以用面向?qū)ο蟮姆椒▉碚{(diào)用Windows API,以及應(yīng)用程序開發(fā)的邊界。MFC將很多應(yīng)用程序開發(fā)中常用的功能自動化,并且提供了文檔框架視圖結(jié)構(gòu)和活動文檔這樣的便于自定義的應(yīng)用程序框架。同時,在Visual C+內(nèi)部也內(nèi)建了很多對MFC的例如類向?qū)н@樣的支持以減少軟件開發(fā)的時間,使用類向?qū)Э梢陨蓮腍ello World這樣的簡單程序到活動文檔這樣的復(fù)雜程序。MFC的消息映射機(jī)制也避
20、免了使用性能較低的龐大虛函數(shù)表。 在本程序主要使用了Object類。2.6 COblist鏈表 MFC類庫中提供了豐富的CObList類的成員函數(shù),此程序主要用到的成員函數(shù)如下:(1) 構(gòu)造函數(shù),為CObject指針構(gòu)造一個空的列表。(2) AddHead()在列表頭添加一個或一列新元素。在操作前該列表可以為空。返回新插入元素的POSITION值。(3) (),訪問鏈表首部,返回列表中的首元素(列表不能為空)。(4) (),返回列表中尾元素的位置。(5) (),返回列表中首元素的位置。返回用于循環(huán)或使用對象指針獲取的POSITION值,如果列表為空,那么返回NULL。(6) (),從列表中刪除
21、指定位置的元素。(7) (),刪除列表中所有的元素。2.7 CImageList鏈表 CImageList 類提供Windows普通圖象列表控件的功能。CImageList主要是用于設(shè)置兩個爆炸的類中,主要使用的函數(shù)如下:(1) Create()如果成功,則返回非零值,否則為0。需要兩步構(gòu)造一個CImageList。首先調(diào)用構(gòu)造函數(shù),然后調(diào)用Create,創(chuàng)建圖象列表并附加給CImageList對象。(2) Add()如果成功,則為第一個新圖象的基于零的索引,否則為-1。調(diào)用此函數(shù)來添加一個或多個圖象或圖標(biāo)到圖象列表中。(3) Draw( CDC* pdc, int nImage, POINT
22、 pt, UINT nStyle );返回值:如果成功,則返回非零值,否則為0。說明:調(diào)用此函數(shù)繪制在拖放操作中正在被拖動的圖象。2.8 CRect獲得矩形區(qū)域 IntersertRect ( LPCRECT lpRect1, LPCRECT lpRect2 );此函數(shù)使CRect等于兩個現(xiàn)有矩形的交。交是同時包含在兩個現(xiàn)有矩形中的最大矩形,如果兩個源矩形是否有重合的部分。如果有不為空,則返回非零值;否則,返回02.9添加背景 實(shí)現(xiàn)當(dāng)前游戲界面背景的動態(tài)化添加了一個Beijing的類,所有的圖片都放在這個類中,包括游戲的開始圖片,結(jié)束圖片,game over的圖片以及勝利的圖片,在使用時調(diào)用這
23、個類中的各類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ù)成員的使用,同時要進(jìn)行聲明如在CEnemy類中static CImageList imglist;static bool loadimage(void);聲明CImageList CEnemy:imgli
24、st;2.11程序運(yùn)行窗口添加對話列表設(shè)置速度 在資源視圖中插入Dialog在工具箱中添加所有的輸入框,在Menu菜單中設(shè)置,利用右鍵中的添加事件處理程序進(jìn)行添加編輯,消息類型是command類列表選擇view類3. 需求分析(用面向?qū)ο蠓椒ńo出系統(tǒng)的主要需求模型,略寫)3.1功能需求分析 1、戰(zhàn)機(jī)可根據(jù)方向鍵控制自由移動且不飛出程序邊界 2、敵機(jī)可根據(jù)隨機(jī)函數(shù)自動隨機(jī)產(chǎn)生,同時可以從屏幕的上下方飛入 3、戰(zhàn)機(jī)實(shí)現(xiàn)發(fā)射導(dǎo)彈(空格鍵發(fā)射導(dǎo)彈),敵機(jī)實(shí)現(xiàn)發(fā)射子彈 4、大Boss的存在,可以隨著戰(zhàn)機(jī)移動,或者是實(shí)現(xiàn)自己的移動 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ī)具有一定的初始左右上下移動的速度,但是玩家可以通過修改戰(zhàn)機(jī)的速度來控制戰(zhàn)機(jī)的移動。 8、戰(zhàn)機(jī)具有吃生命值的功能,游戲過程中會隨機(jī)往下掉落生命值,戰(zhàn)機(jī)吃了之后,生命值會上升。 9、實(shí)現(xiàn)游戲背景的移動,這樣戰(zhàn)機(jī)相對于背景來說是相對運(yùn)動的 10、游戲的各個等級的劃分,實(shí)現(xiàn)達(dá)到一定的條件可以實(shí)現(xiàn)升級,最后到達(dá)一定程度游戲結(jié)束 11、戰(zhàn)機(jī)具有一定的大招,使用大招時戰(zhàn)機(jī)可以發(fā)射導(dǎo)彈,但是其他的不能來攻打戰(zhàn)機(jī),戰(zhàn)機(jī)可以通過使用大招來進(jìn)行破關(guān) 12、添加游戲的無
26、敵模式,即戰(zhàn)機(jī)具有無限的生命 打不死,可以持續(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ù)需求分析 生命值的大小,成績的大小,到達(dá)一定成績或者是其他條件后可以升級。 (1)戰(zhàn)機(jī):戰(zhàn)機(jī)位置、戰(zhàn)機(jī)的生命值、戰(zhàn)機(jī)的移動速度 (2)敵機(jī):敵機(jī)隨機(jī)產(chǎn)生位置、敵機(jī)的移動速度 (3)戰(zhàn)機(jī)導(dǎo)彈:產(chǎn)生位置、導(dǎo)彈移動速度、導(dǎo)彈的移動速度 (4)敵機(jī)導(dǎo)彈:產(chǎn)生位置、導(dǎo)彈的移動速度 (5)Boss:Boss的產(chǎn)生位置,
27、Boss獲得當(dāng)前戰(zhàn)機(jī)的位置、Boss會隨著戰(zhàn)機(jī)的移動而移動 (6)Boss導(dǎo)彈:Boss導(dǎo)彈的產(chǎn)生位置、并在Boss移動時不間斷的產(chǎn)生、導(dǎo)彈的移動速度 (7)客機(jī):客機(jī)的位置 (8)客機(jī)小人:當(dāng)戰(zhàn)機(jī)打中客機(jī)的時候、小人隨之產(chǎn)生并從客機(jī)上掉落 (9)關(guān)卡:關(guān)卡的編號、關(guān)卡的難度、關(guān)卡的得分3.3 行為需求分析3.3.1戰(zhàn)機(jī)的行為: (1)能夠左右上下的移動同時不飛出游戲窗口的邊框 (2)具有一定的初始生命值,生命值結(jié)束后將會game over (3)戰(zhàn)機(jī)可以打敵機(jī)、大Boss、客機(jī)、并產(chǎn)生爆炸效果 (4)戰(zhàn)機(jī)可以吃隨機(jī)掉落的生命值,吃了之后自身的生命值得以增長 (5)戰(zhàn)機(jī)的成績會隨著打敵機(jī),打B
28、oss得以增長,但是如果被打中的話成績減少 (6)戰(zhàn)機(jī)可以使用大招,躲避開其他的攻擊,同時可以攻擊其他 (7)可以發(fā)射多排導(dǎo)彈3.3.2敵機(jī)的行為: (1)敵機(jī)隨機(jī)產(chǎn)生,將從屏幕的上下方進(jìn)行飛入 (2)敵機(jī)與戰(zhàn)機(jī)的距離到達(dá)一定的值后,敵機(jī)可以針對戰(zhàn)機(jī)發(fā)射導(dǎo)彈,打中后,戰(zhàn)機(jī)的生命值下降,成績下降3.3.3生命值的行為: (1)隨機(jī)產(chǎn)生,同時隨機(jī)從屏幕上方掉落,敵機(jī)吃了之后生命值會得以上升 (2)在屏幕的左上方得以顯示3.3.4大Boss的行為: (1)在游戲的第三關(guān)時產(chǎn)生,并可以發(fā)射多排導(dǎo)彈 (2)對游戲區(qū)域進(jìn)行掃射,敵機(jī)基本上躲不開,不過敵機(jī)可以使用大招(保護(hù)罩)將大Boss打死3.3.5客機(jī)
29、的行為: (1)在游戲第四關(guān)時出現(xiàn),上面載有乘客 (2)客機(jī)不能發(fā)射導(dǎo)彈 (3)客機(jī)一旦被敵機(jī)打中,上面的乘客會往下掉落3.4 其他需求 3.4.1、游戲可重玩 3.4.2、游戲結(jié)束后的提示 3.4.3、游戲的模式,包括無敵模式的設(shè)置3.4.4游戲的關(guān)卡3.4.5游戲的大招4. 總體設(shè)計與詳細(xì)設(shè)計4.1 系統(tǒng)模塊劃分4.2 主要功能模塊4.2.1玩家控制模塊4.2.2關(guān)卡升級模塊4.2.3敵機(jī)攻擊模塊4.2.4BOSS攻擊模塊4.2.5客機(jī)飛行模塊4.3 擴(kuò)展功能設(shè)計思路4.3.1 大BOSS的實(shí)現(xiàn)添加一個CBoss的類,添加Boss圖片的資源,在BOSS類中的draw函數(shù)中實(shí)現(xiàn)了boss在游
30、戲輸出界面的產(chǎn)生,Boss導(dǎo)彈的產(chǎn)生在Cbomb類中設(shè)置產(chǎn)生,設(shè)定Boss在第二關(guān)的時候出現(xiàn),Boss具有發(fā)射多排導(dǎo)彈掃射敵機(jī)的功能,在代碼中隱去的部分實(shí)現(xiàn)了Boss隨戰(zhàn)機(jī)的移動而移動的功能,沒有隱去輸出的部分是Boss的第二種方式,Boss直接從桌面的左邊一直運(yùn)動到桌面的右邊,導(dǎo)彈會不停的產(chǎn)生并移動,兩種方式的區(qū)別在于,第一種方式實(shí)現(xiàn)出來會是游戲的運(yùn)行相對來講比較卡,故此輸出結(jié)果中使用了第二種的方式,相對來講這種方式對于Boss的移動比較簡單,實(shí)現(xiàn)時Boss會通過interrect函數(shù)獲得與戰(zhàn)機(jī)導(dǎo)彈的交互區(qū)域和戰(zhàn)機(jī)與Boss導(dǎo)彈的交互區(qū)域,如果有交互時則產(chǎn)生爆炸效果,由于相對于玩家來講,這個
31、Boss的存在對于通關(guān)來講比較困難,所以給戰(zhàn)機(jī)設(shè)置了大招,戰(zhàn)機(jī)按住T和可以發(fā)射導(dǎo)彈的空格鍵時,敵機(jī)和Boss都不能對戰(zhàn)機(jī)發(fā)射導(dǎo)彈,此時敵機(jī)可以抓住機(jī)會,對Boss進(jìn)行掃射一段時間后得以打死Boss。由于時間有限,游戲中尚未實(shí)現(xiàn)的功能包括,對于大招使用次數(shù)的限制,大招使用場合的限制還不是特別完善。4.3.2客機(jī)的實(shí)現(xiàn)設(shè)置一個CAirplane的類,在資源視圖中添加資源,利用draw函數(shù)在游戲界面中輸出客機(jī)的圖像,客機(jī)在在第四關(guān)中出現(xiàn)的,在游戲界面中是從右向左移動的,客機(jī)對于戰(zhàn)機(jī)敵機(jī)來講是不能發(fā)射導(dǎo)彈的,在游戲中當(dāng)戰(zhàn)機(jī)向客機(jī)發(fā)射導(dǎo)彈時客機(jī)上會自動的向下掉小人,在游戲中的圖片展示是小“心”,客機(jī)的產(chǎn)
32、生和移動是在定時器中產(chǎn)生的,找到客機(jī)的下一個位置在ondraw中實(shí)現(xiàn),客機(jī)中小人的產(chǎn)生也是在定時器中產(chǎn)生,區(qū)別在于當(dāng)客機(jī)與飛機(jī)導(dǎo)彈相撞時才會產(chǎn)生小人,同時小人的移動的是在一個刷新速度更快的一個定時器中存在的,一旦相撞,小人會獲取當(dāng)前的客機(jī)的位置,同時產(chǎn)生并向下移動,在實(shí)現(xiàn)這個功能時出現(xiàn)的問題是小人會產(chǎn)生但是會固定在一個相對的位置不能向下移動,錯誤出現(xiàn)是因?yàn)槎〞r器的時間設(shè)置問題,小人的移動和客機(jī)的移動不能同時放在一個刷新時間相同的計時器中小人的移動的定時器需要更快一旦。4.4 軟件結(jié)構(gòu)設(shè)計體會5. 編碼實(shí)現(xiàn)(1) 游戲的開始和結(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)游戲的各個模式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"長按T鍵啟用保護(hù)罩");hMemDC.TextOutW(0,230,L"按W 進(jìn)入無敵模式");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)游戲中的各個類(5)游戲中的定時器在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ī)的移動this->SetTimer(2,60,0);/敵機(jī)的產(chǎn)生/敵機(jī)的移動,敵機(jī)與戰(zhàn)機(jī)挨近時敵機(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)生/生命值的移動/BOSS導(dǎo)彈的移動(6)游戲結(jié)束后各個參數(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測試情況說明。 6.1戰(zhàn)機(jī)移動及子彈發(fā)射模塊測試用例預(yù)期結(jié)果實(shí)際結(jié)果問題描述修改方案按鍵戰(zhàn)機(jī)向左移動戰(zhàn)機(jī)向左移動按鍵戰(zhàn)機(jī)向右移動戰(zhàn)機(jī)向右移動按鍵戰(zhàn)機(jī)向上移動戰(zhàn)機(jī)向上移動按鍵戰(zhàn)機(jī)向下移動戰(zhàn)機(jī)向下移動6.2爆炸模塊測試用例預(yù)期結(jié)果實(shí)際結(jié)果問題描述修改方案分?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)中遇到的主要問題及解決方法(1) 隨著添加的對象的類越來越多,游戲會運(yùn)行的越來越卡,最終甚至?xí)O聛恚鉀Q方法是需要將一些多余的東西刪除,除了按照之前老師講的,用完定時器之后要將定時器刪除,刪除建立的鏈表之外,還要將游戲東西刪除,包括游戲過程中
44、要將飛出游戲界面的敵機(jī)和敵機(jī)導(dǎo)彈刪除,還有飛出界面的戰(zhàn)機(jī)的導(dǎo)彈,還有如果BOSS沒有被打死但是會飛出界面,這些都需要進(jìn)行刪除。對于定時器將一些相同時間的定時器進(jìn)行合并,只留下必要的定時器,減少定時器的數(shù)量,鏈表可以同時使用的就同時使用,因?yàn)樵O(shè)置太多游戲會卡。(2) 一開始游戲畫面會非常的閃,而且剛開始沒有加入游戲結(jié)束的圖片,使用的刷子進(jìn)行刷屏,閃的會特別的厲害,需要加入雙緩沖來解決(3) 戰(zhàn)機(jī)的移動會移動出游戲界面需要進(jìn)行限制,所以對上下左右鍵要控制戰(zhàn)機(jī)的移動范圍,戰(zhàn)機(jī)的坐標(biāo)是以戰(zhàn)機(jī)的左上角的坐標(biāo)來記錄的,所以在限制范圍的時候邊框右側(cè)要減去戰(zhàn)機(jī)的寬,邊框下側(cè)要減去戰(zhàn)機(jī)的長度。這樣才能保障戰(zhàn)機(jī)完全不飛出游戲邊框。(4) 碰撞時碰撞效果會特別的快,8張碰撞的圖片會特別快的一閃而過,解決方式是要調(diào)整定時器的時間(5) 碰撞時如戰(zhàn)機(jī)和敵機(jī)碰撞的話,要將敵機(jī)刪除,先通過讀取當(dāng)前敵機(jī)的位置,通過每個類中的GetRect()函數(shù)來得到區(qū)域,通過IntersectRect(&rt1,&rt2)來判斷交互區(qū)域,如果有交互的話就產(chǎn)生爆炸效果,將之前保存敵機(jī)位置的變量RemoveAt(pos)進(jìn)行刪除,同時用delete來刪除臨時變量(6) 背景圖片的滾動設(shè)置,實(shí)際上是利用了一張圖片來得以實(shí)現(xiàn)的,利用一個循環(huán),同時將圖片的下坐標(biāo)加
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 瓣膜置換的圍術(shù)期護(hù)理
- 人教A版 (2019)選擇性必修 第一冊3.2 雙曲線獲獎教案
- 2024中鋁共享服務(wù)(天津)有限公司校園招聘1人筆試參考題庫附帶答案詳解
- 鳳仙花的一生(教學(xué)設(shè)計)-2024-2025學(xué)年科學(xué)三年級下冊人教鄂教版
- 人教部編版一年級下冊20 咕咚第2課時教學(xué)設(shè)計
- 人教版(2024)八年級上冊(2024)第4節(jié) 眼睛和眼鏡教案
- 2024中建一局二級公司總工程師公開競聘1人筆試參考題庫附帶答案詳解
- 釘釘使用詳盡培訓(xùn)
- 2024中國郵政福建建省分公司校園招聘預(yù)筆試參考題庫附帶答案詳解
- 人美版三年級下冊第3課 豎彎鉤教案及反思
- 拖掛式房車商業(yè)發(fā)展計劃書
- 09S304衛(wèi)生設(shè)備安裝圖集
- 護(hù)士長招聘筆試題與參考答案(某世界500強(qiáng)集團(tuán))2024年
- 戶外趣味健步走活動設(shè)計方案2024
- 2024年廣東省深圳市光明區(qū)建筑工務(wù)署第二批選聘特聘專干8人歷年高頻500題難、易錯點(diǎn)模擬試題附帶答案詳解
- 成人中心靜脈導(dǎo)管(CVC)堵塞風(fēng)險評估及預(yù)防-2024團(tuán)體標(biāo)準(zhǔn)
- 人教版四年級語文下冊期中考試及答案
- 2024至2030年中國快速成型醫(yī)療器械市場現(xiàn)狀研究分析與發(fā)展前景預(yù)測報告
- 腫瘤??谱o(hù)士考試題 附有答案
- JJG 705-2014液相色譜儀行業(yè)標(biāo)準(zhǔn)
- YY/T 0331-2024脫脂棉紗布、脫脂棉粘膠混紡紗布的性能要求和試驗(yàn)方法
評論
0/150
提交評論