版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、坦克大戰(zhàn)實(shí)訓(xùn)指南游戲規(guī)則1. 按下任意鍵游戲開始。2. 通過(guò)WSAD 鍵控制玩家坦克上下左右移動(dòng),但不能走出邊境。3. 通過(guò)J鍵控制玩家坦克發(fā)射子彈。4. 玩家坦克有三條生命,每條命有1點(diǎn)HP,每次被敵方坦克的子彈打到扣除1點(diǎn)HP,當(dāng)HP=0時(shí),如果玩家生命條數(shù)>0,則玩家在初始位置復(fù)活,否則游戲結(jié)束。5. 游戲中的地形包括磚墻、海水、鋼板、森林、地板5種。6. 敵人種類則包括裝甲車、輕型坦克、寶物坦克、3種。7. 當(dāng)關(guān)卡中的敵方坦克被全部消滅完,則進(jìn)入下一個(gè)關(guān)卡,如果當(dāng)前關(guān)卡為最后一關(guān),則游戲通關(guān)。8. 在界面外用一個(gè)文本顯示玩家生命條數(shù),一個(gè)文本顯示當(dāng)前關(guān)卡,一個(gè)文本顯示敵方坦克剩余
2、數(shù)量。實(shí)驗(yàn)準(zhǔn)備打開FunCode,創(chuàng)建一個(gè)新的C+項(xiàng)目。注意:項(xiàng)目名稱必須為英文和數(shù)字,且不能有空格。點(diǎn)擊“項(xiàng)目”“導(dǎo)入地圖模板”,從對(duì)話框中選取名稱為TankWar的模板導(dǎo)入。導(dǎo)入成功后,界面如下:查看模板設(shè)置。模板設(shè)置中有如下幾點(diǎn),在項(xiàng)目開發(fā)時(shí)需要用到:精靈的名稱,創(chuàng)建精靈對(duì)象時(shí),通過(guò)精靈名稱把對(duì)象和精靈圖片綁定在一起。玩家坦克的鏈接點(diǎn),右下圖鼠標(biāo)點(diǎn)擊的位置就是玩家飛機(jī)的鏈接點(diǎn),飛機(jī)發(fā)散子彈時(shí),位置應(yīng)該在鏈接點(diǎn)前方位置。 類的設(shè)計(jì)游戲中能直接看到的精靈:玩家坦克、敵方坦克、子彈、地形、當(dāng)前關(guān)卡文本精靈,當(dāng)前玩家剩余生命條數(shù)文本精靈,當(dāng)前敵方坦克剩余數(shù)量文本精靈。其中,當(dāng)前關(guān)卡文本精靈,玩家
3、剩余生命條數(shù)文本精靈,當(dāng)前敵方坦克剩余數(shù)量文本精靈只需要顯示響應(yīng)的數(shù)值,可以直接使用CTextSprite類。玩家坦克、敵方坦克、子彈、地形創(chuàng)建相應(yīng)的類。可以從玩家坦克和敵方坦克抽象出一個(gè)坦克類,作為父類。坦克類,子彈類,地形類繼承CSprite類,通過(guò)CSprite類的方法操作精靈。玩家坦克和敵方坦克被摧毀時(shí),都要播放相應(yīng)的爆炸動(dòng)畫,這些動(dòng)畫可直接使用CAnimateSprite類。創(chuàng)建一個(gè)游戲類,各個(gè)類之間的通信在游戲世界類中進(jìn)行。該類采用“單例模式”,在程序中只能創(chuàng)建一個(gè)對(duì)象。本游戲是坦克大戰(zhàn),該類稱為坦克游戲類。創(chuàng)建一個(gè)精靈工廠類,用來(lái)生成各種精靈類的對(duì)象。這就是“工廠模式”。游戲中還
4、有其他類,詳見下面類圖:游戲流程主流程游戲分四個(gè)狀態(tài):未開始、開始、運(yùn)行和結(jié)束。CGameMain類是控制游戲流程的類,游戲屏幕每刷新一次,調(diào)用一次該類的GameMainLoop方法。GameMainLoop根據(jù)m_iGameState的值分別調(diào)用該類的GameInit、GameRun和GameEnd方法。這三個(gè)方法對(duì)應(yīng)初始化游戲、游戲運(yùn)行和游戲結(jié)束這三個(gè)狀態(tài)。GameInit只執(zhí)行一次。執(zhí)行后修改游戲狀態(tài)。屏幕刷新后,進(jìn)入狀態(tài)2,開始執(zhí)行GameRun方法。當(dāng)玩家HP>0即玩家坦克不死的時(shí)候,GameRun一直被執(zhí)行。玩家坦克被摧毀后,調(diào)用GameEnd執(zhí)行一次,清除本局游戲數(shù)據(jù),恢復(fù)
5、游戲未開始狀態(tài)。游戲初始化完成游戲初始工作,界面上的工作:當(dāng)前關(guān)卡初始化為1,創(chuàng)建玩家坦克并放置在指定位置。此外,我們需要?jiǎng)?chuàng)建TankWorld對(duì)象,該對(duì)象采用單例模式,所以不管游戲運(yùn)行多少次,TankWorld對(duì)象始終只有一個(gè),并且把玩家飛機(jī)對(duì)象加入到TankWorld對(duì)象中。游戲運(yùn)行游戲運(yùn)行中,每刷新一次屏幕,需要根據(jù)最新數(shù)據(jù),更新玩家生命次數(shù),設(shè)置玩家移動(dòng)方向,刪除被摧毀的敵方坦克和子彈,判斷是否生產(chǎn)新的電腦坦克。玩家坦克處理:在游戲的運(yùn)行中,玩家通過(guò)WSAD鍵改變了玩家坦克的移動(dòng)速度及方向,我們?cè)谟螒蜻\(yùn)行中要實(shí)時(shí)的向FunCode接口更新玩家數(shù)據(jù),達(dá)到在屏幕上更新玩家狀態(tài)。電腦坦克處理
6、:刪除HP=0的電腦坦克,并播放爆炸動(dòng)畫,判斷是否出戰(zhàn)新的坦克。文本精靈處理:在游戲運(yùn)行時(shí)玩家的生命條數(shù)以及當(dāng)前關(guān)卡和敵方坦克剩余數(shù)量都會(huì)實(shí)時(shí)發(fā)生變化,所以文本精靈的數(shù)據(jù)也需要實(shí)時(shí)更新顯示。地形及關(guān)卡處理在游戲運(yùn)行時(shí)地形的屬性也是會(huì)隨著坦克子彈的擊中而發(fā)生變化的,我們需要在此方法內(nèi)實(shí)時(shí)更新地圖中所有地形的信息,關(guān)卡也會(huì)發(fā)生變化,例如初始化關(guān)卡,或者銷毀關(guān)卡等。游戲結(jié)束將游戲中剩余的精靈刪除,包括刪除精靈本身和集合中對(duì)應(yīng)的對(duì)象。重新顯示游戲開始的提示圖片。鍵盤按下事件本游戲中,游戲狀態(tài)為1時(shí),按下任意鍵,游戲狀態(tài)轉(zhuǎn)為2。游戲狀態(tài)為2時(shí),玩家按下了WSAD鍵,分別設(shè)置玩家坦克的上下左右速度,當(dāng)按下
7、的是J鍵,需要調(diào)用玩家坦克的射擊方法。鍵盤彈起事件本游戲中,游戲狀態(tài)為2時(shí),玩家松開WSAD鍵,相應(yīng)設(shè)置玩家坦克上下左右速度為0。精靈與精靈的碰撞本游戲中,坦克均為發(fā)送碰撞并且接收碰撞,子彈發(fā)送碰撞,地形接收碰撞,寶物接收碰撞。玩家坦克發(fā)送碰撞玩家發(fā)送碰撞時(shí),會(huì)撞到地形、電腦坦克、寶物。玩家炮彈發(fā)送碰撞玩家炮彈發(fā)送碰撞會(huì)撞到地形 、敵方坦克、敵方炮彈。電腦坦克發(fā)送碰撞電腦坦克會(huì)撞到玩家坦克、地形、撞到盟友。 電腦坦克炮彈發(fā)送碰撞 電腦坦克炮彈需要處理撞到玩家坦克、地形、盟友。世界邊界碰撞事件本游戲中,游戲狀態(tài)為2時(shí),主要處理電腦坦克的世界邊界碰撞事件。實(shí)驗(yàn)任務(wù)任務(wù)一 完成類的定義根據(jù)下方表格,
8、完成以下各個(gè)類的定義。其中,set方法和get方法在當(dāng)前任務(wù)中實(shí)現(xiàn),其他方法的實(shí)現(xiàn)留到后面完成。坦克類:Tank 繼承自CSprite類屬性private int HP坦克生命值private int initX坦克當(dāng)前位置中心點(diǎn)的X坐標(biāo)private int initY坦克當(dāng)前位置中心點(diǎn)的Y坐標(biāo)private float speadX坦克X軸方向移動(dòng)速度private float speadY坦克Y軸方向移動(dòng)速度private int direction坦克當(dāng)前的方向private float countShellTime發(fā)射炮彈后的冷卻時(shí)間和private float firingFreq
9、uency射擊頻率private TanKShell *ts坦克身上攜帶的炮彈方法public int getHP()獲取坦克生命值public void setHP(int hp)根據(jù)參數(shù)設(shè)置坦克生命值public float getSpeadX()獲得坦克的X軸移動(dòng)速度public void setSpeadX(float speadX)設(shè)置坦克的X軸移動(dòng)速度public float getSpeadY()獲得坦克的Y軸移動(dòng)速度public void setSpeadY(float speadY)設(shè)置坦克的Y軸移動(dòng)速度public int getDirection()獲得坦克的方向publ
10、ic void setDirection(int direction)根據(jù)參數(shù)設(shè)置坦克的方向public int getInitX()獲取坦克的初始X坐標(biāo)public void setInitX(int initX)設(shè)置坦克的初始X坐標(biāo)public int getInitY()獲取坦克的初始Y坐標(biāo)public void setInitY(int initY)設(shè)置坦克的初始Y坐標(biāo)public TanKShell *getTs()得到坦克身上的炸彈public void setTs(TanKShell *ts)設(shè)置坦克身上的炸彈public float getFiringFrequency()得到
11、坦克的射擊頻率public void setFiringFrequency(float firingFrequency)設(shè)置坦克的射擊頻率public float getCountShellTime()獲取坦克的冷卻時(shí)間public void setCountShellTime(float countShellTime)設(shè)置坦克的冷卻時(shí)間public virtual void move(int ikey)=0坦克移動(dòng)的方法public virtual void shooting()=0坦克射擊的方法玩家坦克類:PlayerTank 繼承自Tank類屬性private int life玩家坦克的
12、生命次數(shù)方法public int getLife()獲取玩家坦克生命次數(shù)public void setLife(int life)設(shè)置玩家坦克public virtual void move(int ikey)玩家坦克的移動(dòng)方法public void stopMove(int ikey)玩家坦克停止移動(dòng)方法public virtual void shooting()玩家坦克射擊方法電腦坦克類:ComputerTank 繼承自Tank類屬性private Treasure *tre電腦坦克身上攜帶的寶物方法public Treasure *getTre()獲取坦克身上的寶物public void
13、 setTre(Treasure *tre)設(shè)置坦克身上的寶物public virtual void move(int ikey)電腦坦克移動(dòng)方法public virtual void shooting()電腦坦克射擊方法坦克炮彈類:TanKShell繼承自CSprite類屬性private int spead炮彈的移動(dòng)速度private int power炮彈的威力private Tank *tank炮彈屬于的坦克方法public int getSpead()獲取炮彈的速度public void setSpead(int spead)設(shè)置炮彈速度public int getPower()獲取
14、炮彈的威力public void setPower(int power)設(shè)置跑單的威力public Tank *getTank()獲取炮彈所屬的坦克public void setTank(Tank *tank)設(shè)置炮彈所屬的坦克public virtual bool shellExplosion(CSprite *pSprite)=0炮彈爆炸的抽象方法普通炮彈類:OrdinaryTankShell 繼承自:TankShell方法public bool shellExplosion(CSprite *pSprite)普通炮彈爆炸的處理方法地形類:Terrain(地形) 繼承自:CSprite屬性
15、private bool tankIsThrough坦克是否可以穿越private bool shellIsBreak坦克是否可以擊破private int HP地形的HP方法public bool isTankIsThrough()獲取地形是否允許穿越public void setTankIsThrough(bool tankIsThrough)設(shè)置地形是否允許穿越public bool isShellIsBreak()獲取地形是否允許擊破public void setShellIsBreak(bool shellIsBreak)設(shè)置地形是否允許擊破public int getHP()獲取地
16、形HPpublic void setHP(int HP)設(shè)置地形HP游戲關(guān)卡類:GameLevel屬性private Terrain terrains;關(guān)卡中保存地形的二維數(shù)組private int maxCTank關(guān)卡中最多電腦坦克數(shù)量(自己確定)方法public GameLevel(Terrain *terrains)關(guān)卡游戲類的有參構(gòu)造方法public int getMaxCTank()得到最多電腦坦克數(shù)量public void setMaxCTank(int maxCTank)設(shè)置最多電腦坦克數(shù)量public Terrain *getTerrains()獲取當(dāng)前地形數(shù)組集合public
17、 void setTerrains(Terrain *terrains)設(shè)置當(dāng)前關(guān)卡地形數(shù)組集合public void initCheckpoint()初始化關(guān)卡public void removeHpLessThanZero()銷毀本關(guān)卡中HP為0的地形public void removeAllTerrains()銷毀本關(guān)卡中所有地形寶物類:Treasure 繼承自:CSprite方法public virtual void use(Tank *tank)=0寶物功效,指的是玩家坦克撿起寶物時(shí)發(fā)生的作用寶物手雷類:GrenadeTreasure 繼承自:Treasure方法public vir
18、tual void use(Tank *tank)寶物手雷的作用方法坦克世界類:TanksWorld屬性private PlayersTank *pTank;保存玩家坦克private list<GameLevel *> gLevels關(guān)卡集合private int cpId;當(dāng)前關(guān)卡Idprivate int maxTanksNumber游戲中屏幕上最多同時(shí)出現(xiàn)的電腦坦克數(shù)量private list<Treasure *> treasures保存游戲中出現(xiàn)的寶物private list<ComputerTank *> cTanks保存游戲中出現(xiàn)的電腦坦克p
19、rivate list<TanKShell *> tShells 保存游戲中出現(xiàn)的子彈private CTextSprite *lifeSprite顯示玩家生命條數(shù)的文本精靈private CTextSprite *enemySprite顯示敵方坦克剩余數(shù)量的文本精靈private CTextSprite *levelSprite顯示當(dāng)前關(guān)卡ID的文本精靈Private TanksWorld *tWorld坦克世界類的唯一對(duì)象方法public static TanksWorld *getTanksWorld()當(dāng)游戲中需要用到TanksWorld類的對(duì)象時(shí)變使用此方法獲取publi
20、c int getMaxTanksNumber()獲取最多出現(xiàn)的電腦坦克數(shù)量public void setMaxTanksNumber(int maxTanksNumber)設(shè)置最多同時(shí)出現(xiàn)的電腦坦克數(shù)量public CTextSprite *getLifeSprite()獲取顯示玩家生命條數(shù)的文本精靈public void setLifeSprite(CTextSprite *lifeSprite)設(shè)置顯示玩家生命條數(shù)的文本精靈public CTextSprite *getEnemySprite()獲取顯示敵方坦克剩余數(shù)量的文本精靈public void setEnemySprite(CTe
21、xtSprite *enemySprite)設(shè)置顯示敵方坦克剩余數(shù)量的文本精靈public CTextSprite *getLevelSprite()獲取顯示當(dāng)前關(guān)卡ID的文本精靈public void setLevelSprite(CTextSprite *levelSprite)設(shè)置顯示當(dāng)前關(guān)卡ID的文本精靈public list<Treasure *> getTreasures()獲取寶物集合public void setTreasures(list<Treasure *> treasures)設(shè)置寶物集合public list<TanKShell *>
22、; gettShells()獲取炮彈集合public void settShells(list<TanKShell *> tShells)設(shè)置炮彈集合public PlayersTank *getpTank()獲取保存在坦克世界中的玩家坦克public void setpTank(PlayersTank *pTank)保存玩家坦克到坦克世界中public list<GameLevel *> getGLevels()獲取當(dāng)前游戲關(guān)卡集合public void setGLevels(list<GameLevel *> gLevels)保存游戲關(guān)卡集合到坦克世界中
23、public int getCpId()得到當(dāng)前關(guān)卡IDpublic void setCpId(int cpId)設(shè)置當(dāng)前關(guān)卡IDpublic list<ComputerTank *> getcTanks()獲取當(dāng)天電腦坦克集合public void setcTanks(list<ComputerTank *> cTanks)設(shè)置當(dāng)前電腦坦克集合public Terrain *findTerrainByName(const char *name)根據(jù)名字從關(guān)卡集合中的當(dāng)前正在進(jìn)行的關(guān)卡中找到那塊地形public TanKShell *findTankShellByNam
24、e(const char *tsName)根據(jù)名字從世界的炮彈集合中找到相應(yīng)的炮彈public ComputerTank *findComputerTankByName(const char *ctName)根據(jù)名字從坦克集合中找到相應(yīng)的坦克public GameLevel *addTerrain(int *terrId,int typeId, int pointX,int pointY)根據(jù)傳遞進(jìn)來(lái)的地形數(shù)組ID,坦克類型ID數(shù)組,坦克X坐標(biāo)數(shù)組,坦克Y坐標(biāo)數(shù)組去生產(chǎn)響應(yīng)的對(duì)象并保存在關(guān)卡中public Treasure *findTreasureByName(const char *tna
25、me)根據(jù)名字從坦克游戲中找到對(duì)應(yīng)的寶物public void playingExplosion(Tank *tank)當(dāng)坦克爆炸時(shí)所調(diào)用的方法用來(lái)播放爆炸特效public void RefreshTextSpriteData()刷新文本精靈數(shù)據(jù)的方法public void RefreshComputerTankData(float fDeltaTime)刷新電腦坦克數(shù)據(jù)的方法public void RefreshGameLevelData()刷新游戲關(guān)卡數(shù)據(jù)的方法public void RefreshPlayerTankData(float fDeltaTime)刷新玩家坦克數(shù)據(jù)的方法精靈工
26、廠類:SpriteFactory屬性private static int sId = 0;精靈在克隆時(shí)名稱后面加的編號(hào),防止精靈名重復(fù)public CSprite *getCSprite(int sId,int tId)獲取精靈對(duì)外的方法,根據(jù)不同的sId去調(diào)用不同的精靈生產(chǎn)方法public Tank *getTank(int tId)根據(jù)不同的tId去生產(chǎn)不同的坦克public Terrain *getTerrain(int tId)根據(jù)不同的tId去生產(chǎn)不同的地形public Treasure *getTreasure(int tId)根據(jù)不同的tId去生產(chǎn)不同的寶物public Tank
27、Shell *getTankShell(int tId)根據(jù)不同的tId去生產(chǎn)不同的坦克炮彈使用宏定義,將精靈的名字變?yōu)樽址A?,這樣,既有利于代碼的閱讀,又便于修改。宏定義#define TANKSHELL_ ORDINARY “bullet”普通子彈#define TANK_COMPUTER_PUTONG “putong”普通坦克#define TANK_COMPUTER_ZHUANGJIA “zhuangjia”裝甲坦克#define TANK_ COMPUTER_BAOWU “baowu”寶物#define TERRAIN_MU “mu”木質(zhì)墻#define TERRAIN_SHU “
28、shu”樹木墻#define TERRAIN_HAI “hai”海墻#define TERRAIN_TIE “tie”貼墻#define TERRAIN_MU “aim_nor”基地任務(wù)二 實(shí)現(xiàn)SpriteFactory類完成SpriteFactory類的五個(gè)方法。分別實(shí)現(xiàn)每個(gè)方法,方法內(nèi)根據(jù)參數(shù)ID創(chuàng)建不同的對(duì)象并設(shè)置一些基本屬性并返回。獲取精靈方法,根據(jù)不同是sId可以區(qū)分要獲得的對(duì)象是坦克、地形、炮彈等。獲取坦克方法,根據(jù)不同的tId可以區(qū)分要獲得的是玩家坦克還是敵方坦克。獲取地形方法,根據(jù)不同的tId可以區(qū)分要獲得的是海墻、樹木墻等。獲取寶物方法,根據(jù)不同的tId可以區(qū)分要獲得的是手雷或者其他寶物。獲取子彈方法,根據(jù)不同的tId可以區(qū)分要獲得的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州工程技術(shù)學(xué)院《新疆媒介與社會(huì)發(fā)展》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州電子信息職業(yè)技術(shù)學(xué)院《衛(wèi)星導(dǎo)航定位技術(shù)與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州電力職業(yè)技術(shù)學(xué)院《傳統(tǒng)建筑理論》2023-2024學(xué)年第一學(xué)期期末試卷
- 鎮(zhèn)江市高等專科學(xué)?!毒蜆I(yè)創(chuàng)業(yè)指導(dǎo)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江中醫(yī)藥大學(xué)《教師語(yǔ)言訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江越秀外國(guó)語(yǔ)學(xué)院《素描著衣全身像》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度美容院美容項(xiàng)目設(shè)計(jì)與推廣服務(wù)合同4篇
- 二零二五版辦公場(chǎng)地使用權(quán)轉(zhuǎn)讓合同3篇
- 2025版?zhèn)€人借款給企業(yè)合同樣本6篇
- 2025年度美術(shù)館東館館舍租賃藝術(shù)展覽策劃與推廣合同3篇
- 2024年供應(yīng)鏈安全培訓(xùn):深入剖析與應(yīng)用
- 飛鼠養(yǎng)殖技術(shù)指導(dǎo)
- 壞死性筋膜炎
- 整式的加減單元測(cè)試題6套
- 股權(quán)架構(gòu)完整
- 山東省泰安市2022年初中學(xué)業(yè)水平考試生物試題
- 注塑部質(zhì)量控制標(biāo)準(zhǔn)全套
- 銀行網(wǎng)點(diǎn)服務(wù)禮儀標(biāo)準(zhǔn)培訓(xùn)課件
- 二年級(jí)下冊(cè)數(shù)學(xué)教案 -《數(shù)一數(shù)(二)》 北師大版
- 晶體三極管資料
- 石群邱關(guān)源電路(第1至7單元)白底課件
評(píng)論
0/150
提交評(píng)論