游戲編程導論 Chapter-12_第1頁
游戲編程導論 Chapter-12_第2頁
游戲編程導論 Chapter-12_第3頁
游戲編程導論 Chapter-12_第4頁
游戲編程導論 Chapter-12_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第12章 引擎案例新坦克大戰(zhàn)游戲內容提綱 12.1游戲需求分析12.2游戲總體設計12.2.1 游戲素材設計12.2.2 游戲地圖設計12.2.3 游戲類設計12.3游戲代碼實現12.3.1 資源加載類函數12.3.2 游戲狀態(tài)更新類函數12.3.3 關卡處理函數12.3.4 游戲細節(jié)處理類函數12.3.5 引擎接口函數實現12.4游戲運行測試第12章 引擎案例新坦克大戰(zhàn)游戲本游戲使用了更大的地圖,需要通過滾動地圖才能看到全貌。地圖使用了多圖層,有背景圖層、障礙圖層以及遮罩圖層等不同功能圖層。12.1 游戲需求分析新坦克大戰(zhàn)游戲也采用鍵盤控制:坦克只有上、下、左、右4個運動方向玩家通過按空格鍵

2、發(fā)射炮彈炮彈可以消滅NPC坦克,也可以摧毀地圖障礙物炮彈發(fā)射會被計數,每按一次空格鍵就發(fā)射一枚炮彈,計數也隨之減1。如果計數為0,玩家坦克無法發(fā)射炮彈,但可以通過彈藥獎勵來補充彈藥每關初始彈藥量為100玩家坦克被NPC坦克發(fā)射的炮彈擊中,游戲生命值減112.1 游戲需求分析游戲玩家角色是紅色坦克,而NPC是綠色坦克;玩家坦克不能與NPC坦克直接發(fā)生碰撞,只能通過發(fā)射炮彈消滅NPC坦克;如果玩家坦克與NPC坦克發(fā)生碰撞,游戲生命值會減1。當生命值為0時,如果玩家坦克再被炮彈擊中或與NPC坦克發(fā)生碰撞,游戲結束。玩家可以通過游戲生命獎勵來增加生命值。當玩家失去游戲生命時,屏幕上會伴有紅色閃屏,同時

3、玩家坦克也會被復位到初始位置。玩家坦克在窗口移動時,如果地圖邊界在窗口以外區(qū)域,地圖將自動滾動,直到地圖邊界與窗口邊界重合才停止。地圖滾動時玩家坦克不移動;地圖停止?jié)L動,玩家坦克恢復正常移動。12.1 游戲需求分析游戲地圖設計了遮罩圖層,該圖層會被繪制到所有游戲圖層頂部。當玩家坦克或NPC坦克經過有遮罩的位置會被遮擋。無論障礙圖層還是遮罩圖層,都可以被炮彈摧毀。本游戲仍然使用圖標加文字方式,只是對圖標圖像進行了替換。本案例游戲設有5關,每關都有固定數目的NPC坦克,玩家必須消滅全部NPC坦克才能過關。每關以消滅NPC坦克作為游戲任務,游戲不計分也不計時;由于素材和代碼量限制,本例每關NPC坦克

4、都一樣;NPC坦克和炮彈也沒有設計成多種攻擊或威力類型。12.1 游戲需求分析游戲中設計了彈藥和游戲命的獎勵。獎勵會在地圖中任何非障礙位置隨機分布。心形圖像表示游戲命,觸碰后游戲生命值加1;彈藥箱表示彈藥獎勵,觸碰后彈藥量每次增加20;獎勵對象觸碰后會消失;獎勵有時間限制,如在規(guī)定時間內獎勵對象沒有被玩家坦克觸碰,消失前先通過閃動的顏色進行警告,如果依然沒有被觸碰就自動消失。掌握本游戲實現后,請你根據自己的想法自行去改進和完善。12.1 游戲需求分析本游戲要實現的具體功能如下:1.菜單功能游戲菜單同樣分為主菜單和過渡菜單兩種類型2.玩家角色控制玩家角色通過方向鍵控制按上、下、左、右方向鍵,玩家

5、坦克朝相應方向移動玩家角色活動范圍在整個游戲地圖邊界內,其初始位置在窗口左側垂直居中處無論移動到什么位置,失去游戲命后,都將復位到初始位置3.炮彈發(fā)射及爆炸效果顯示玩家坦克不能和NPC坦克發(fā)生碰撞,必須通過按空格鍵發(fā)射炮彈消滅它如果擊中,NPC坦克消失,并伴隨爆炸音效和爆炸動畫效果12.1 游戲需求分析4.NPC自動漫游NPC坦克會在地圖邊界內自動漫游,碰到障礙物、玩家坦克或者另一輛NPC坦克,會自動躲避。NPC坦克在游戲地圖四角隨機生成。如果到達地圖邊界處,NPC會自動改變方向繼續(xù)移動。5.游戲地圖滾動玩家坦克在移動過程中,到達接近窗口邊緣位置,如果地圖邊界在窗口以外,地圖將自動滾動,直到地

6、圖邊界與窗口邊界重合才停止。6.音樂、音效播放菜單背景音樂會在主菜單界面下自動循環(huán)播放;游戲開始后,菜單背景音樂自動停止,游戲背景音樂會自動循環(huán)播放。玩家發(fā)射的炮彈或NPC發(fā)射的炮彈如果擊中目標,如坦克、地圖障礙或遮罩,會伴有爆炸音效。12.1 游戲需求分析7.游戲狀態(tài)顯示游戲采用圖標加文字方式顯示信息,包括:敵人數、剩余游戲命、彈藥量和當前關。8.游戲過關升級處理每關NPC坦克總數為20。游戲開始后,NPC坦克會逐步加載,當達到總數后就不再加載。玩家必須消滅每關全部NPC坦克才能過關。通過全部設定關卡,游戲通關。9.游戲幫助及關于信息顯示通過主菜單中的“游戲幫助”、“關于游戲”兩個菜單項分別

7、可以查看游戲操作說明及與本游戲相關的游戲名稱、版本號、作者等信息。 12.2 游戲總體設計本游戲的游戲類設計將以FishGame游戲類為模板首先會保留其中功能相同、名稱相同的數據成員和成員函數本游戲中可以沿用其中大部分的變量數據成員聲明同時也將繼續(xù)沿用vSpriteSet數據類型的定義。根據本游戲需求,添加所需數據成員和成員函數12.2 游戲總體設計12.2.1 游戲素材設計1. 圖片素材tanksplash.jpg1024 768菜單背景圖片tiles.png832 448用于游戲地圖制作的圖塊圖片nest.png90 69用于表現游戲中的大本營btn.png280 120主菜單中的菜單項圖

8、片,上面的圖片為菜單項正常狀態(tài),下面的圖片為菜單項選中狀態(tài)btn2.png200 160過渡菜單中的菜單項圖片,上面的圖片為菜單項正常狀態(tài),下面的圖片為菜單項選中狀態(tài)12.2 游戲總體設計2. 圖標素材flag.png30 30表示當前關的圖標圖片life.png30 30表示生命值的圖標圖片npc.png30 30表示敵人數的圖標圖片charge.png30 30表示彈藥數的圖標圖片12.2 游戲總體設計3. 幀動畫素材playertank.png160 160 40 40 16正常狀態(tài)的玩家角色playersuper.png160 160 40 40 16無敵狀態(tài)的玩家角色npctank.

9、png160 160 40 40 16NPC角色12.2 游戲總體設計missle0-1.png18 5 18 5 1左、右方向炮彈Missle2-3.png5 18 5 18 1上、下方向炮彈bonusammo.png120 40 40 40 3游戲彈藥值獎勵bonuslife.png120 40 40 40 3游戲生命值獎勵explosion.png528 66 66 66 15游戲中的爆炸動畫12.2 游戲總體設計4. 聲音素材menumusic.wav00:00:14705kbps菜單背景音樂backmusic.wav00:00:04176kbps游戲背景音樂mouseover.wav

10、小于1秒176kbps鼠標在菜單項上移過的音效mousedown.wav小于1秒352kbps鼠標點擊菜單項的音效blast.wav小于1秒705kbps炮彈擊中目標后的爆炸音效victory.wav00:00:04176kbps游戲升級或通關音效gameover.wav00:00:01176kbps游戲結束音效powerup.wav小于1秒352kbps玩家坦克拾取游戲獎勵音效12.2 游戲總體設計12.2.2 游戲地圖設計本游戲地圖設計采用“Tiled地圖編輯器”最終完成的地圖分辨率為1280 1280,游戲中需要滾動地圖才能看到全貌地圖默認在窗口居中顯示12.2 游戲總體設計以上地圖是最

11、終合成后的效果,實際地圖是由3個圖層構成,分別是背景圖層、障礙圖層和遮罩圖層。 12.2 游戲總體設計地圖設計完成后,在參數設置中將圖層數據保存為CSV格式將地圖圖層數據保存為tankmap.txt文件,存放在游戲項目的資源目錄中(路徑為:resgametankmap.txt)。地圖文件的具體內容:map_cols=40map_rows=40tile_width=32tile_height=32tile_path=maptiles.pngtile_grid_id=1back_layer_name=backgroundbarrier_layer_name=obstaclemask_layer_n

12、ame=mask(從.tmx文件中復制對應圖層數據粘貼至此)(從.tmx文件中復制對應圖層數據粘貼至此)(從.tmx文件中復制對應圖層數據粘貼至此)12.2 游戲總體設計12.2.3 游戲類設計在VS2008中為本章游戲創(chuàng)建一個名為TankGame的工程項目在項目目錄添加res目錄,將表12-1、表12-2中的圖像素材存放在該目錄的game目錄中,表12-3中的圖像素材存放在sprite目錄中,表12-4的聲音素材存放在sound目錄中。將最新引擎文件復制到項目目錄的TinyEngine目錄在VS2008中創(chuàng)建TankGame.h頭文件和TankGame.cpp源文件,用來編寫游戲類定義代碼和

13、類成員函數實現代碼本游戲的游戲類命名為TankGame類TankGame類將參照FishGame類設計TankGame類定義代碼:請參見教程和案例工程代碼TankGame類的函數分類與FishGame類相同12.3 游戲代碼實現12.3.1 資源加載類函數在TankGame類中,負責游戲資源加載的函數共有10個,分別是:LoadPlayer()LoadNpc()LoadMap()LoadImageRes()LoadBonus()LoadSound()LoadGameMenu()LoadExplosion()LoadBomb()LoadNest()具體實現代碼請參見教程和案例工程代碼12.3 游

14、戲代碼實現12.3.2 游戲狀態(tài)更新類函數更新游戲狀態(tài)的函數本游戲中共有6個,分別是:UpdatePlayerPos()UpdatePlayerLife()UpdateNpcPos()UpdateAnimation()UpdateBombPos()UpdateBonus()具體實現代碼請參見教程和案例工程代碼12.3 游戲代碼實現12.3.3 關卡處理函數LoadGameLevel()函數負責游戲中各狀態(tài)值的初始化,并調用相關資源加載函數來加載關卡數據;ClearGameLevel()函數負責每關結束時的清理工作,主要是各種資源的釋放,該函數中調用ReleaseDXBuffer()函數來釋放聲

15、音資源具體實現代碼請參見教程和案例工程代碼12.3 游戲代碼實現12.3.4 游戲細節(jié)處理類函數負責游戲細節(jié)處理的函數共有5個,它們是UpgradePlayerLevel() PlayGameSound()DisplayInfo()ReleaseDXBuffer()BombCollide()ReleaseDXBuffer()的實現代碼與FishGame類的同名函數相同具體實現代碼請參見教程和案例工程代碼12.3 游戲代碼實現12.3.5 引擎接口函數實現同樣是處理6個游戲引擎接口函數GameInit() GameLogic() GamePaint()GameEnd()GameKeyAction()GameMouseAction()具體實現代碼請參見教程和案例工程代碼12.4 游戲運行測試12.4 游戲運行測試12.4

溫馨提示

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

評論

0/150

提交評論