版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
目錄1.概括2實訓項目簡介.2實訓功能說明.2基本功能.2附帶功能.22.有關(guān)技術(shù).3Windows準時器技術(shù)3透明貼圖實現(xiàn)技術(shù).3CObList鏈表4獲得矩形地區(qū).4使用AfxMessageBox顯示游戲過程中的提示信息4內(nèi)存開釋.4CImageList辦理爆炸成效4對話框的應(yīng)用.43.整體設(shè)計與詳盡設(shè)計.4系統(tǒng)模塊區(qū)分.4主要功能模塊.5系統(tǒng)對象類圖.5系統(tǒng)主程序活動圖.5系統(tǒng)部分流程圖.54.編碼實現(xiàn).8繪制游戲背景位圖程序.8飛機大戰(zhàn)游戲?qū)ο蟮睦L制程序.8飛機大戰(zhàn)游戲?qū)ο髴?zhàn)機地點的動向控制.8飛機大戰(zhàn)游戲?qū)ο笾g的碰撞實現(xiàn).9游戲界面輸出目前信息.95.項目程序測試.9戰(zhàn)機挪動及子彈發(fā)射模塊測試.9敵機及炸彈模塊測試.20爆炸模塊測試.206.實訓中碰到的主要問題及解決方法.107.實訓領(lǐng)會.111.概括實訓項目簡介本次實訓項目是做一個飛機大戰(zhàn)的游戲,應(yīng)用MFC編程,達成一個界面簡短流利、游戲方式簡單,玩起來易于上手的桌面游戲。該飛機大戰(zhàn)項目運用的主要技術(shù)即是MFC編程中的一些函數(shù)、鏈表思想以及貼圖技術(shù)。實訓功能說明基本功能1)設(shè)置一個戰(zhàn)機擁有必定的速度,經(jīng)過鍵盤,方向鍵可控制戰(zhàn)機的地點,空格鍵發(fā)射子彈。2)界面中敵機出現(xiàn)的地點,以及敵機炸彈的發(fā)射均為隨機的,敵機與敵機炸彈均擁有必定的速度,且跟著關(guān)卡難度的增大,數(shù)目和速度均增添。3)關(guān)于隨機產(chǎn)生的敵機和敵機炸彈,若超出矩形地區(qū),則開釋該對象。4)增添爆炸成效,包含戰(zhàn)機子彈打中敵機爆炸、敵機炸彈打中戰(zhàn)機爆炸、戰(zhàn)機與敵機相撞爆炸以及戰(zhàn)機子彈與敵機炸彈相撞爆炸四種爆炸成效。且爆炸發(fā)生后敵機、子彈、炸彈均消逝,戰(zhàn)機生命值減一。附帶功能1)為游戲界面增添了背景圖片,并在戰(zhàn)機發(fā)射子彈、戰(zhàn)機擊中敵機、敵機擊中戰(zhàn)機、以及戰(zhàn)機敵機相撞時均增添了背景音效。2)為游戲設(shè)置了不一樣的關(guān)卡,每個關(guān)卡難度不一樣,敵機與敵機炸彈的速度跟著關(guān)卡增大而加速,進入第二關(guān)此后敵機從上下方均會隨機出現(xiàn),且隨機發(fā)射炸彈。3)第一關(guān)卡敵機從上方飛出,速度必定,戰(zhàn)機每打掉向來敵機則增添一分,每積十分,則為戰(zhàn)機增添一個生命值,當戰(zhàn)機得分超出50分則可進入下一關(guān);進入第二、三關(guān)時敵機速度加速,分別從上下雙方飛出,此時戰(zhàn)機每得分20、30分,才會增添一個生命值,得分超出100、150分則進入下一關(guān)、通關(guān)。(4)在游戲界面輸出目前游戲進行信息,包含目前得分、目前關(guān)卡以及擊中敵機數(shù)目。5)增添了鼠標控制戰(zhàn)機地點這一成效,戰(zhàn)績的地點跟著鼠標的挪動而挪動,而且點擊鼠標左鍵可使得戰(zhàn)機發(fā)射子彈。6)實現(xiàn)了暫停游戲的功能,玩家可經(jīng)過鍵盤上的‘Z’鍵,對游戲進行暫停。7)經(jīng)過對話框的彈出可提示玩家能否查察游戲說明、能否進入下一關(guān)、能否從頭開始等信息,使得玩家可自己選擇。有關(guān)技術(shù)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ù)中實現(xiàn)響應(yīng)準時器的程序。透明貼圖實現(xiàn)技術(shù)繪制透明位圖的重點就是創(chuàng)立一個“掩碼”位圖
(maskbitmap)
,這個“掩碼”位圖是一個單色位圖,它是位圖中圖像的一個單色剪影。在詳盡介紹實現(xiàn)過程以前先介紹下所使用的繪圖函數(shù)以及函數(shù)參數(shù)所代表的功能;繪制過程需要使用到BitBlt( )函數(shù)。整個功能的實現(xiàn)過程以下:
整個創(chuàng)立一張大小與需要繪制圖像同樣的位圖作為“掩碼”位圖;將新創(chuàng)立的“掩碼”位圖儲存至掩碼位圖的設(shè)施描繪表中;把位圖設(shè)施描繪表的背景設(shè)置成“透明色”,不需要顯示的顏色;復(fù)制粘貼位圖到“掩碼”位圖的設(shè)施描繪表中,這個時候“掩碼”位圖設(shè)施描繪表中寄存的位圖與位圖設(shè)施描繪表中的位圖同樣;把需要透明繪制的位圖與對話框繪圖相應(yīng)地區(qū)的背景進行邏輯異或操作繪制到對話框上;把“掩碼”位圖與這個時候?qū)υ捒蛳鄳?yīng)地區(qū)的背景進行邏輯與的操作;重復(fù)步驟5的操作,把需要透明繪制的位圖與對話框繪圖相應(yīng)地區(qū)的背景進行邏輯異或操作繪制到對話框上;(8)最后把系統(tǒng)的畫筆還給系統(tǒng),刪除使用過的GDIObject,開釋非空的指針,最后把新建的設(shè)施描繪表也刪除。CObList鏈表MFC類庫中供給了豐富的CObList類的成員函數(shù),此程序主要用到的成員函數(shù)以下:結(jié)構(gòu)函數(shù),為CObject指針結(jié)構(gòu)一個空的列表。GetHead( ),接見鏈表首部,返回列表中的首元素(列表不可以為空)。AddTail( ),在列表尾增添一個元素或另一個列表的全部元素。RemoveAll( ),刪除列表中全部的元素。GetNext( ),返回列表中尾元素的地點。GetHeadPosition( ),返回列表中首元素的地點。RemoveAt( ),從列表中刪除指定地點的元素。GetCount( ),返回列表中的元素數(shù)。在文件中申明各游戲?qū)ο笈c游戲?qū)ο箧湵恚海?)資源視圖下,增添Dialog對話框。而后增添使用到的控件,并改正控件的ID便于后邊的使用。(2).為對話框增添類,在對話框模式下,點擊項目,增添類。(3).在類視圖中,為對話框類增添成員變量(控件變量)。設(shè)置變量的名稱、種類、
以最值等信息。(4).在資源視圖菜單中,選擇相應(yīng)的菜單項,右擊增添時間監(jiān)聽程序,設(shè)置函數(shù)辦理程序名稱。(5).在辦理程序函數(shù)中增添相應(yīng)的信息。整體設(shè)計與詳盡設(shè)計系統(tǒng)模塊區(qū)分該飛機大戰(zhàn)游戲程序分為游戲背景位圖繪制模塊、各游戲?qū)ο罄L制模塊、游戲?qū)ο笾g的碰撞模塊、爆炸成效產(chǎn)生模塊、游戲界面輸出玩家得分關(guān)卡信息模塊。此中在游戲?qū)ο罄L制模塊中,
戰(zhàn)機是獨一對象,在游戲開始時產(chǎn)生該對象,
給予其固定的生命值,當其與敵機對象、敵機炸彈碰撞時使其生命值減一,直至生命值為零,
便刪除戰(zhàn)機對象。敵機對象與敵機炸彈對象的繪制中采納準時器技術(shù),
準時產(chǎn)生。爆炸對象初始化為空,當游戲過程中即時發(fā)生碰撞時,在碰撞地點產(chǎn)生爆炸對象,增添到爆炸鏈表中。主要功能模塊系統(tǒng)對象類圖CGameObject是各個游戲?qū)ο蟮某橄蟾割?,繼承自CObject類,其余的類:戰(zhàn)機類、敵機類、爆炸類、子彈類、炸彈類、文字類都繼承了此類。每個游戲?qū)ο箢愔屑壤^承了來自父類CGameObject的屬性,又有自己的特有屬性和方法。系統(tǒng)主程序活動圖系統(tǒng)部分流程圖該飛機大戰(zhàn)游戲履行流程圖:炮彈碰撞敵機玩家得分否進入下一關(guān)是游戲初始化
開始初始化游戲否子彈碰撞戰(zhàn)機是戰(zhàn)機生命減少否生命值為0是結(jié)束游戲結(jié)束利用準時器準時產(chǎn)生敵機并繪制敵機流程圖開始是戰(zhàn)機戰(zhàn)亡準時器準時產(chǎn)生敵機并增添到敵機鏈表中否監(jiān)聽敵機鏈表中是否有敵機是結(jié)束游戲獲得敵機在鏈表中的地點是判斷敵機是否出界否移除鏈表繪制敵機產(chǎn)生子彈結(jié)束編碼實現(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);}}飛機大戰(zhàn)游戲?qū)ο笾g的碰撞實現(xiàn)本飛機大戰(zhàn)游戲中的碰撞考慮了飛機子彈打中敵機、敵機炸彈打中戰(zhàn)機、戰(zhàn)機與敵機相撞、敵機炸彈與戰(zhàn)機子彈相撞四種狀況,依據(jù)游戲?qū)ο蟮木匦蔚貐^(qū)能否有交錯,而確認二者能否相撞,而產(chǎn)生爆炸對象,增添到爆炸鏈表中。以戰(zhàn)機與敵機相撞為例: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);項目程序測試戰(zhàn)機挪動及子彈發(fā)射模塊測試用例預(yù)期結(jié)果實質(zhì)結(jié)果問題描繪改正方案點擊A鍵或鼠標左移戰(zhàn)機向左挪動戰(zhàn)機向左挪動點擊D鍵或鼠標右移戰(zhàn)機向右挪動戰(zhàn)機向右挪動點擊W鍵或鼠標上移戰(zhàn)機向上挪動戰(zhàn)機向上挪動點擊S鍵或鼠標上移戰(zhàn)機向下挪動戰(zhàn)機向下挪動敵機及炸彈模塊測試用例預(yù)期結(jié)果實質(zhì)結(jié)果問題描繪改正方案玩家得分<50(未敵機只從上方飛出,速度固定敵機只從上方飛經(jīng)過第一關(guān))出,速度固定玩家得分>50(通敵機從上下雙方向均可飛出,敵機從上下雙方過第一關(guān)后)且速度不停增添向均可飛出,且速度不停增添爆炸模塊測試用例預(yù)期結(jié)果實質(zhì)結(jié)果問題描繪改正方案戰(zhàn)機子彈打中敵機敵機地點處爆炸,敵敵機地點處爆炸,敵機機消逝,戰(zhàn)機生命-1消逝,戰(zhàn)機生命-1敵機炸彈打中戰(zhàn)機戰(zhàn)機地點處爆炸,戰(zhàn)戰(zhàn)機地點處爆炸,戰(zhàn)機機生命-1生命-1敵機戰(zhàn)機相撞敵機地點處爆炸,敵敵機地點處爆炸,敵機機消逝,戰(zhàn)機生命-1消逝,戰(zhàn)機生命-1戰(zhàn)機子彈與敵機炸敵機炸彈處爆炸,子敵機炸彈處爆炸,子彈彈相撞彈與炸彈均消逝消逝與炸彈均消逝消逝戰(zhàn)機生命值==0戰(zhàn)機消逝,GameOver戰(zhàn)機消逝,GameOver或許過關(guān)或許過關(guān)實訓中碰到的主要問題及解決方法(1)因為對C++的面向?qū)ο蟮乃枷牒瓦壿嬎悸凡皇炝?,不理解此中的封裝之類的以及多態(tài)的思想,以致開始真實的進入實訓接觸到項目時沒有開發(fā)思路,經(jīng)過逐漸查問書本整理C++面向?qū)ο缶幊趟悸?,才逐漸理清項目的開發(fā)步驟。(2)本飛機大戰(zhàn)的游戲要求使用鏈表實現(xiàn)各游戲?qū)ο蟮膬Υ婧烷_釋,因為鏈表知識掌握的不堅固,使用起來老是出現(xiàn)這樣那樣的錯誤,給整個游戲開發(fā)帶來了很大的阻礙,經(jīng)過不停的調(diào)試改正,最后使程序正確運轉(zhuǎn)。3)在繪制各樣游戲?qū)ο蟆獢硻C和敵機炸彈時,開始使用隨機函數(shù),畫出敵機時而很少,老是打不到預(yù)約的成效,此后經(jīng)過改正使用
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度山西省高校教師資格證之高等教育法規(guī)全真模擬考試試卷A卷含答案
- 2023年冷墩鋼投資申請報告
- 金融崗位招聘筆試題及解答(某大型央企)2024年
- 2025年教師資格考試小學面試社會試題及解答參考
- 2024專業(yè)運動服裝訂貨協(xié)議
- 2024年油品儲備設(shè)施租賃協(xié)議范本
- 2024年度建筑項目施工責任擔保協(xié)議
- 2024年樓宇外墻面刷新工程協(xié)議樣本
- 2024商鋪轉(zhuǎn)租協(xié)議格式
- 文書模板-競業(yè)協(xié)議核實流程
- 2023屆高三化學二輪復(fù)習 基于思維模型建構(gòu)的信息型無機制備實驗難點突破 利用信息“防”得其所發(fā)言 課件
- 授課計劃表(模板)
- GB/T 23794-2023企業(yè)信用評價指標
- 浙江工商大學論文開題報告PPT模板
- 高考歷史考點命題雙向細目表(很實用)
- 高考英語創(chuàng)設(shè)語境記憶3500詞匯(短文語境、配套練習)05篇
- YY/T 1833.3-2022人工智能醫(yī)療器械質(zhì)量要求和評價第3部分:數(shù)據(jù)標注通用要求
- 博物館教育資源與當前語文課程融合的探究
- 地源熱泵監(jiān)理細則
- 小學一年級上冊 綜合實踐教學課件
- 設(shè)備部-工作總結(jié)及-計劃-課件
評論
0/150
提交評論