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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

8、片,上面的圖片為菜單項(xiàng)正常狀態(tài),下面的圖片為菜單項(xiàng)選中狀態(tài)btn2.png200 160過渡菜單中的菜單項(xiàng)圖片,上面的圖片為菜單項(xiàng)正常狀態(tài),下面的圖片為菜單項(xiàng)選中狀態(tài)12.2 游戲總體設(shè)計(jì)2. 圖標(biāo)素材flag.png30 30表示當(dāng)前關(guān)的圖標(biāo)圖片life.png30 30表示生命值的圖標(biāo)圖片npc.png30 30表示敵人數(shù)的圖標(biāo)圖片charge.png30 30表示彈藥數(shù)的圖標(biāo)圖片12.2 游戲總體設(shè)計(jì)3. 幀動(dòng)畫素材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 游戲總體設(shè)計(jì)missle0-1.png18 5 18 5 1左、右方向炮彈Missle2-3.png5 18 5 18 1上、下方向炮彈bonusammo.png120 40 40 40 3游戲彈藥值獎(jiǎng)勵(lì)bonuslife.png120 40 40 40 3游戲生命值獎(jiǎng)勵(lì)explosion.png528 66 66 66 15游戲中的爆炸動(dòng)畫12.2 游戲總體設(shè)計(jì)4. 聲音素材menumusic.wav00:00:14705kbps菜單背景音樂backmusic.wav00:00:04176kbps游戲背景音樂mouseover.wav

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

11、終合成后的效果,實(shí)際地圖是由3個(gè)圖層構(gòu)成,分別是背景圖層、障礙圖層和遮罩圖層。 12.2 游戲總體設(shè)計(jì)地圖設(shè)計(jì)完成后,在參數(shù)設(shè)置中將圖層數(shù)據(jù)保存為CSV格式將地圖圖層數(shù)據(jù)保存為tankmap.txt文件,存放在游戲項(xiàng)目的資源目錄中(路徑為:resgametankmap.txt)。地圖文件的具體內(nèi)容: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文件中復(fù)制對(duì)應(yīng)圖層數(shù)據(jù)粘貼至此)(從.tmx文件中復(fù)制對(duì)應(yīng)圖層數(shù)據(jù)粘貼至此)(從.tmx文件中復(fù)制對(duì)應(yīng)圖層數(shù)據(jù)粘貼至此)12.2 游戲總體設(shè)計(jì)12.2.3 游戲類設(shè)計(jì)在VS2008中為本章游戲創(chuàng)建一個(gè)名為TankGame的工程項(xiàng)目在項(xiàng)目目錄添加res目錄,將表12-1、表12-2中的圖像素材存放在該目錄的game目錄中,表12-3中的圖像素材存放在sprite目錄中,表12-4的聲音素材存放在sound目錄中。將最新引擎文件復(fù)制到項(xiàng)目目錄的TinyEngine目錄在VS2008中創(chuàng)建TankGame.h頭文件和TankGame.cpp源文件,用來編寫游戲類定義代碼和

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論