c飛機大戰實訓報告附帶碼_第1頁
c飛機大戰實訓報告附帶碼_第2頁
c飛機大戰實訓報告附帶碼_第3頁
c飛機大戰實訓報告附帶碼_第4頁
c飛機大戰實訓報告附帶碼_第5頁
已閱讀5頁,還剩6頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

目錄1.概括2實訓項目簡介.2實訓功能說明.2基本功能.2附帶功能.22.有關技術.3Windows準時器技術3透明貼圖實現技術.3CObList鏈表4獲得矩形地區.4使用AfxMessageBox顯示游戲過程中的提示信息4內存開釋.4CImageList辦理爆炸成效4對話框的應用.43.整體設計與詳盡設計.4系統模塊區分.4主要功能模塊.5系統對象類圖.5系統主程序活動圖.5系統部分流程圖.54.編碼實現.8繪制游戲背景位圖程序.8飛機大戰游戲對象的繪制程序.8飛機大戰游戲對象戰機地點的動向控制.8飛機大戰游戲對象之間的碰撞實現.9游戲界面輸出目前信息.95.項目程序測試.9戰機挪動及子彈發射模塊測試.9敵機及炸彈模塊測試.20爆炸模塊測試.206.實訓中碰到的主要問題及解決方法.107.實訓領會.111.概括實訓項目簡介本次實訓項目是做一個飛機大戰的游戲,應用MFC編程,達成一個界面簡短流利、游戲方式簡單,玩起來易于上手的桌面游戲。該飛機大戰項目運用的主要技術即是MFC編程中的一些函數、鏈表思想以及貼圖技術。實訓功能說明基本功能1)設置一個戰機擁有必定的速度,經過鍵盤,方向鍵可控制戰機的地點,空格鍵發射子彈。2)界面中敵機出現的地點,以及敵機炸彈的發射均為隨機的,敵機與敵機炸彈均擁有必定的速度,且跟著關卡難度的增大,數目和速度均增添。3)關于隨機產生的敵機和敵機炸彈,若超出矩形地區,則開釋該對象。4)增添爆炸成效,包含戰機子彈打中敵機爆炸、敵機炸彈打中戰機爆炸、戰機與敵機相撞爆炸以及戰機子彈與敵機炸彈相撞爆炸四種爆炸成效。且爆炸發生后敵機、子彈、炸彈均消逝,戰機生命值減一。附帶功能1)為游戲界面增添了背景圖片,并在戰機發射子彈、戰機擊中敵機、敵機擊中戰機、以及戰機敵機相撞時均增添了背景音效。2)為游戲設置了不一樣的關卡,每個關卡難度不一樣,敵機與敵機炸彈的速度跟著關卡增大而加速,進入第二關此后敵機從上下方均會隨機出現,且隨機發射炸彈。3)第一關卡敵機從上方飛出,速度必定,戰機每打掉向來敵機則增添一分,每積十分,則為戰機增添一個生命值,當戰機得分超出50分則可進入下一關;進入第二、三關時敵機速度加速,分別從上下雙方飛出,此時戰機每得分20、30分,才會增添一個生命值,得分超出100、150分則進入下一關、通關。(4)在游戲界面輸出目前游戲進行信息,包含目前得分、目前關卡以及擊中敵機數目。5)增添了鼠標控制戰機地點這一成效,戰績的地點跟著鼠標的挪動而挪動,而且點擊鼠標左鍵可使得戰機發射子彈。6)實現了暫停游戲的功能,玩家可經過鍵盤上的‘Z’鍵,對游戲進行暫停。7)經過對話框的彈出可提示玩家能否查察游戲說明、能否進入下一關、能否從頭開始等信息,使得玩家可自己選擇。有關技術Windows準時器技術Windows準時器是一種輸入設施,它周期性地在每經過一個指定的時間間隔后就通知應用程序一次。程序將時間間隔告訴Windows,而后Windows給您的程序發送周期性發生的WM_TIMER信息以表示時間到了。本程序中使用多個準時器,分別控制不一樣的功能。在MFC的API函數中使用SetTimer( )函數設置準時器,設置系統間隔時間,在OnTimer( )函數中實現響應準時器的程序。透明貼圖實現技術繪制透明位圖的重點就是創立一個“掩碼”位圖

(maskbitmap)

,這個“掩碼”位圖是一個單色位圖,它是位圖中圖像的一個單色剪影。在詳盡介紹實現過程以前先介紹下所使用的繪圖函數以及函數參數所代表的功能;繪制過程需要使用到BitBlt( )函數。整個功能的實現過程以下:

整個創立一張大小與需要繪制圖像同樣的位圖作為“掩碼”位圖;將新創立的“掩碼”位圖儲存至掩碼位圖的設施描繪表中;把位圖設施描繪表的背景設置成“透明色”,不需要顯示的顏色;復制粘貼位圖到“掩碼”位圖的設施描繪表中,這個時候“掩碼”位圖設施描繪表中寄存的位圖與位圖設施描繪表中的位圖同樣;把需要透明繪制的位圖與對話框繪圖相應地區的背景進行邏輯異或操作繪制到對話框上;把“掩碼”位圖與這個時候對話框相應地區的背景進行邏輯與的操作;重復步驟5的操作,把需要透明繪制的位圖與對話框繪圖相應地區的背景進行邏輯異或操作繪制到對話框上;(8)最后把系統的畫筆還給系統,刪除使用過的GDIObject,開釋非空的指針,最后把新建的設施描繪表也刪除。CObList鏈表MFC類庫中供給了豐富的CObList類的成員函數,此程序主要用到的成員函數以下:結構函數,為CObject指針結構一個空的列表。GetHead( ),接見鏈表首部,返回列表中的首元素(列表不可以為空)。AddTail( ),在列表尾增添一個元素或另一個列表的全部元素。RemoveAll( ),刪除列表中全部的元素。GetNext( ),返回列表中尾元素的地點。GetHeadPosition( ),返回列表中首元素的地點。RemoveAt( ),從列表中刪除指定地點的元素。GetCount( ),返回列表中的元素數。在文件中申明各游戲對象與游戲對象鏈表:(1)資源視圖下,增添Dialog對話框。而后增添使用到的控件,并改正控件的ID便于后邊的使用。(2).為對話框增添類,在對話框模式下,點擊項目,增添類。(3).在類視圖中,為對話框類增添成員變量(控件變量)。設置變量的名稱、種類、

以最值等信息。(4).在資源視圖菜單中,選擇相應的菜單項,右擊增添時間監聽程序,設置函數辦理程序名稱。(5).在辦理程序函數中增添相應的信息。整體設計與詳盡設計系統模塊區分該飛機大戰游戲程序分為游戲背景位圖繪制模塊、各游戲對象繪制模塊、游戲對象之間的碰撞模塊、爆炸成效產生模塊、游戲界面輸出玩家得分關卡信息模塊。此中在游戲對象繪制模塊中,

戰機是獨一對象,在游戲開始時產生該對象,

給予其固定的生命值,當其與敵機對象、敵機炸彈碰撞時使其生命值減一,直至生命值為零,

便刪除戰機對象。敵機對象與敵機炸彈對象的繪制中采納準時器技術,

準時產生。爆炸對象初始化為空,當游戲過程中即時發生碰撞時,在碰撞地點產生爆炸對象,增添到爆炸鏈表中。主要功能模塊系統對象類圖CGameObject是各個游戲對象的抽象父類,繼承自CObject類,其余的類:戰機類、敵機類、爆炸類、子彈類、炸彈類、文字類都繼承了此類。每個游戲對象類中既繼承了來自父類CGameObject的屬性,又有自己的特有屬性和方法。系統主程序活動圖系統部分流程圖該飛機大戰游戲履行流程圖:炮彈碰撞敵機玩家得分否進入下一關是游戲初始化

開始初始化游戲否子彈碰撞戰機是戰機生命減少否生命值為0是結束游戲結束利用準時器準時產生敵機并繪制敵機流程圖開始是戰機戰亡準時器準時產生敵機并增添到敵機鏈表中否監聽敵機鏈表中是否有敵機是結束游戲獲得敵機在鏈表中的地點是判斷敵機是否出界否移除鏈表繪制敵機產生子彈結束編碼實現繪制游戲背景位圖程序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);}}飛機大戰游戲對象之間的碰撞實現本飛機大戰游戲中的碰撞考慮了飛機子彈打中敵機、敵機炸彈打中戰機、戰機與敵機相撞、敵機炸彈與戰機子彈相撞四種狀況,依據游戲對象的矩形地區能否有交錯,而確認二者能否相撞,而產生爆炸對象,增添到爆炸鏈表中。以戰機與敵機相撞為例: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);項目程序測試戰機挪動及子彈發射模塊測試用例預期結果實質結果問題描繪改正方案點擊A鍵或鼠標左移戰機向左挪動戰機向左挪動點擊D鍵或鼠標右移戰機向右挪動戰機向右挪動點擊W鍵或鼠標上移戰機向上挪動戰機向上挪動點擊S鍵或鼠標上移戰機向下挪動戰機向下挪動敵機及炸彈模塊測試用例預期結果實質結果問題描繪改正方案玩家得分<50(未敵機只從上方飛出,速度固定敵機只從上方飛經過第一關)出,速度固定玩家得分>50(通敵機從上下雙方向均可飛出,敵機從上下雙方過第一關后)且速度不停增添向均可飛出,且速度不停增添爆炸模塊測試用例預期結果實質結果問題描繪改正方案戰機子彈打中敵機敵機地點處爆炸,敵敵機地點處爆炸,敵機機消逝,戰機生命-1消逝,戰機生命-1敵機炸彈打中戰機戰機地點處爆炸,戰戰機地點處爆炸,戰機機生命-1生命-1敵機戰機相撞敵機地點處爆炸,敵敵機地點處爆炸,敵機機消逝,戰機生命-1消逝,戰機生命-1戰機子彈與敵機炸敵機炸彈處爆炸,子敵機炸彈處爆炸,子彈彈相撞彈與炸彈均消逝消逝與炸彈均消逝消逝戰機生命值==0戰機消逝,GameOver戰機消逝,GameOver或許過關或許過關實訓中碰到的主要問題及解決方法(1)因為對C++的面向對象的思想和邏輯思路不熟習,不理解此中的封裝之類的以及多態的思想,以致開始真實的進入實訓接觸到項目時沒有開發思路,經過逐漸查問書本整理C++面向對象編程思路,才逐漸理清項目的開發步驟。(2)本飛機大戰的游戲要求使用鏈表實現各游戲對象的儲存和開釋,因為鏈表知識掌握的不堅固,使用起來老是出現這樣那樣的錯誤,給整個游戲開發帶來了很大的阻礙,經過不停的調試改正,最后使程序正確運轉。3)在繪制各樣游戲對象—敵機和敵機炸彈時,開始使用隨機函數,畫出敵機時而很少,老是打不到預約的成效,此后經過改正使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論