freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)論文-基于java的坦克大戰(zhàn)游戲設(shè)計(編輯修改稿)

2025-02-12 20:45 本頁面
 

【文章內(nèi)容簡介】 示: 第 17 頁 共 30 頁 圖 游戲結(jié)束界面 游戲操作方式 各界面之間的切換主要是通過點擊鼠 標(biāo)完成的。點擊歡迎界面以后即跳轉(zhuǎn)到menu 界面,在 menu 界面中點擊不同的按鈕,觸發(fā)不同的事件,則切換到不同的界面。 在游戲界面中,玩家則主要是通過鍵盤控制坦克的移動方向,炮彈的發(fā)射以及發(fā)射的炮彈類型。 坦克初始化 在面板中加入坦克 所加的坦克有倆種,我方坦克和敵軍坦克,其中敵人的坦克又有不同的顏色,殲滅不同顏色的坦克所獲分?jǐn)?shù)不同,同時設(shè)置我方坦克的初始位置。我方坦克在開始的時候都有生命值,每次被打一次生命值減少百分之二十。本系統(tǒng)中的坦克不是畫出來的,是通過圖片調(diào)出來的,其中用 Toolkit 方法把硬盤中的圖片拿到內(nèi)存中來的。其主要代碼如下: 加入自己的坦克: Tank myTank = new Tank(TANK_INITIAL_COORD_X, 第 18 頁 共 30 頁 TANK_INITIAL_COORD_Y, this)。 ()。 (tanks)。 (wall)。 (bloodBottle)。 (g)。 加入敵方坦克: for (int i = 0。 i ()。 i++) { Tank tank = (i)。 (wall)。 (tanks)。 (g)。 } for (int i = 0。 i 5。 i++) { Tank tank = new Tank(100 + 60 * (i + 1), 100, this)。 ()。 (tank)。 } 讓坦克可以移動 將坦克的位置改變?yōu)樽兞?,啟動線程不斷重畫,使得線程重畫更均勻,并且可以控制線程重畫的速度。按鍵重畫不能解決子彈自動飛行的問題,每次重畫都改變坦克的位置,使得視覺上坦克在移動。由于普通的刷新頻率太快會導(dǎo)致閃屏問題,我采用了雙緩沖消除閃屏問題。將所有要顯示的畫在虛擬圖片上,然后一次性顯示出來。我方 坦克是通過事件監(jiān)聽機制完成的,由鍵盤控制,坦克可以向八個方向移動。敵軍的坦克的方向是隨機的,需要定義一個隨機數(shù)產(chǎn)生器。敵軍的自由移動也是通過隨機數(shù)產(chǎn)生器來實現(xiàn)的。主要是 move()實現(xiàn)的。其核心代碼如下: public void move() { = tankCoord_x。 = tankCoord_y。 第 19 頁 共 30 頁 if ( != ) { = 。 } limitTankCannotOutOfBounds()。 setEnemyTankMovingTypeAndFireFrequency()。 } public void setEnemyTankMovingTypeAndFireFrequency() { if (()) { if (enemyTankMovingStep == 0) { enemyTankMovingStep = (24) + 4。 Direction[] dirs = ()。 int randomDirectionNumber = randomNumberBuilder .nextInt()。 tankDirection = dirs[randomDirectionNumber]。 } enemyTankMovingStep。 setEnemyTankFireFrequency()。 } } 坦克作戰(zhàn) 添加子彈 創(chuàng)建 Missile 類,用來模擬一發(fā)子彈。通過其屬性,可以區(qū)分普通子彈和超級子彈,普通子彈只能朝著坦克前進的方向發(fā)一發(fā)子彈,而超級子彈可以同時向 8個方向發(fā)射 8 發(fā)子彈。 其核心代碼如下: 發(fā)射子彈 根據(jù)主戰(zhàn)坦克的方向和位置,通過 Ctrl 鍵按鍵處理,可以相應(yīng)的打出一發(fā)普通子彈,通過 A 鍵的按鍵處理,可以打出一個超級子彈。為了解決坦克停止也能打出炮彈,需要畫出炮彈, 每次移動后通過 tank 的新方向來確定炮筒的方向。在Tank 類中添加 fire 方法,其返回值是 Missile,每次抬起 Ctrl 鍵的時候就打出一發(fā) 第 20 頁 共 30 頁 子彈。為了解決炮彈不消亡的問題,加入了標(biāo)識子彈生命的變量,當(dāng)子彈已經(jīng)死去或者子彈已經(jīng)到了邊界,就不需要對其重畫。其中有碰撞檢測的方法,不同坦克發(fā)出的子彈打到不同障礙物的不同效果。其中我方坦克打到敵人坦克的時候,會有爆炸效果產(chǎn)生。爆炸的效果是通過在同一地點連續(xù)播放多張圖片實現(xiàn)的動畫效果。 將敵方坦克擊斃 在 Missile 類中加入 hitTank()方法,其返回 值為布爾類型,通過碰撞檢測的輔助類,為 tank 和 missile 都加入 getRect() 方法,判斷子彈是否擊中對方坦克。當(dāng)擊中敵人坦克時,子彈的生命就為 false,當(dāng)生命為 false 時將不再重畫。其核心代碼如下: public boolean hitTank(Tank t){ if( amp。amp。 ().intersects(()) amp。amp。 () amp。amp。 != ()){ if(()==){ (()20)。 if(() = 0){ (false)。 Explode e = new Explode(missileCoord_x, missileCoord_y, tc)。 (e)。 = RankingList()。 if(()){ (true)。 }else{ = NewGame()。 (true)。 } } } if(()==){ 第 21 頁 共 30 頁 (false)。 Explode e = new Explode(missileCoord_x, missileCoord_y, tc)。 (e)。 += ()。 } = false。 return true。 } else return false。 } 游戲結(jié)束 當(dāng)玩家坦克的生命值為 0 時,本局游戲結(jié)束。當(dāng)玩家打破最高記錄的時候,將彈出保存游戲信息的對話框,保存游戲信息完畢,將彈出游戲結(jié)束的界面,玩家可以根據(jù)自身需要,選擇繼續(xù)游戲或者退出該游戲。 計分功能 游戲結(jié)束后,如果玩家創(chuàng)了新紀(jì)錄,則會彈出保存玩家游戲信息的對話框,以激勵玩家繼續(xù)玩下一局。 系統(tǒng)優(yōu)化 添加背景音樂 為了使玩家在體驗游戲樂趣的同時,可以放松心情,特意加了背景音樂,玩家可以自主選擇是否開啟音樂。添加音樂主要用了線程的知識,其核心代碼如下: public void run() { while (true) { if (!stopThread) { File soundFile = new File(filename)。 AudioInputStream audioInputStream = null。 AudioFormat format = ()。 SourceDataLine auline = null。 info = new (, 第 22 頁 共 30 頁 format)。 ()。 int nBytesRead = 0。 byte[] abData = new byte[1024]。 // 這是緩存 } } } 加入血條 在游戲開始的時候,主戰(zhàn)坦克的血條是滿的,每次被擊中后,降低百分之二十,直至血降完之后坦克死亡。主戰(zhàn)坦克可以吃血條,使其生命值為飽和狀態(tài)。其核心代碼如下: private class BloodBar { int bloodBarWidth。 public void draw(Graphics g) { Color c = ()。 ()。 (tankCoord_x, tankCoord_y 13, WIDTH, 10)。 bloodBarWidth = WIDTH * HP / 100。 (tankCoord_x, tankCoord_y 13, bloodBarWidth, 10)。 (c)。 } } 加入小道具 讓小道具在某一時間段出現(xiàn),沿某一軌跡運動一段時間,如果主戰(zhàn)坦克吃掉小道具,會有不同的獎勵。小道具出現(xiàn)一段時間后則自動消失。其核心代碼如下: public BloodBottle(PCTankClient tc) { = ()。 = ()。 第 23 頁 共 30 頁 = tc。 } public void draw(Graphics g){ if(bloodBottleLive){ bloodBottleImage = (images/)。 (bloodBottleImage, bloodBottleCoord_x, bloodBottleCoord_y, bloodBottleHeight, bloodBottleWidth, tc)。 } } public Rectangle getBloodBottleRectangle(){ return new Rectangle(bloodBottleCoord_x, bloodBottleCoord_y, bloodBottleWidth, bloodBottleHeight)。 } 5 系統(tǒng)測試 界 面測試 系統(tǒng)的界面測試主要是集中在界面的美化方面的,界面的色彩素雅,具有涂鴉風(fēng)格,各界面之間的色彩及其過度都適當(dāng),符合墨水坦克大戰(zhàn)的主題。顏色較 第 24 頁 共 30 頁 為素雅,對于玩家而言,不會對眼睛有太大的刺激作用。界面與界面之間的跳轉(zhuǎn)功能是否正常,界面友好又不失其獨特的風(fēng)格。 經(jīng)過測試,界面良好,流暢,基本可以滿足要求。 功能測試 子彈測試 子彈測試,顧名思義是測試子彈能否發(fā)射出去,發(fā)射出去之后的行為狀態(tài)是否達到我們的設(shè)計要求。首先測試按 Ctrl 鍵能否發(fā)射一發(fā)普通子彈,經(jīng)過測試,玩家在按下 Ctrl 鍵以后 能打出一發(fā)普通子彈;其次測試按下 A 鍵能否發(fā)射超級子彈,經(jīng)過測試,可以完成。 子彈測試不僅僅局限于測試能否打出子彈,還要測試打出子彈后其運動軌跡是否正常,打到不同的障礙物以后,是否滿足游戲的需要。經(jīng)過測試,子彈在打出以后,一直朝著打出子彈時炮筒的前方飛行,與坦克碰撞后,產(chǎn)生爆炸效果或者生命值降為百分之二十,與障礙物碰撞后,則生命消亡。 坦克測試 這一部分主要是測試坦克能否朝著炮筒的方向移動。我軍坦克的移動是通過鍵盤操作控制的,按下相應(yīng)的按鍵坦克是否朝著某個相應(yīng)的方向移動。對敵軍坦克來講,坦克是否 在游戲窗口中自由移動,是否會產(chǎn)生越界問題。 經(jīng)過測試,我方坦克可以通過鍵盤操作控制其方向使其移動,當(dāng)遇到障礙物的時候會停止,不會穿過障礙物。敵方坦克則可以自由移動,并且不會產(chǎn)生越界問題。 爆炸測試 爆炸測試,主要是測試當(dāng)子彈打到對方的坦克時,是否會產(chǎn)生爆炸效果。所產(chǎn)生的爆炸效果是否我們預(yù)想的結(jié)果。此測試其實在子彈測試的過程中已經(jīng)涵蓋了。 經(jīng)過測試,當(dāng)我方坦克的子彈打向敵人坦克的時候,就會產(chǎn)生爆炸效果。爆炸效果很逼真,達到了預(yù)期的效果。 血條、小道具測試 首先測試我軍坦克被敵人擊中 一次后,是否血條掉了百分之二十。經(jīng)過測試,當(dāng)我軍坦克被敵人坦克的子彈擊中時,生命值減少百分之二十,當(dāng)生命值減少為 0時,游戲結(jié)束,玩家按下 F2 可以原地復(fù)活。 第 25 頁 共 30 頁 其次測試主戰(zhàn)坦克在吃了小道具墨水瓶之后,是否生命值加滿。經(jīng)過測試,當(dāng)主戰(zhàn)坦克吃了墨水瓶后,生命值會補滿,并且如果主戰(zhàn)坦克沒有吃掉墨水瓶,墨水瓶會以一定的軌跡運動,一段時間后消失。 6 總結(jié) 本系統(tǒng)的總結(jié) 此次畢業(yè)設(shè)計是我大學(xué)生活交給自己的最后答卷,從選題、收集資料、學(xué)習(xí)相關(guān)技術(shù)、看網(wǎng)上學(xué)習(xí)視頻到最后實 際動手編程,其間遇到不少的問題,但是后來,通過查閱資料、虛心請教同學(xué)和老師都解決了。 第 26 頁 共 30 頁 本程序設(shè)計實現(xiàn)了坦克大戰(zhàn)的游戲開發(fā),自動控制敵人坦克運行的方式進行控制,具有一定的可玩性,經(jīng)過了細(xì)心的調(diào)試和老師的不厭其煩的教導(dǎo)實現(xiàn)了坦克大戰(zhàn)的基本功能。 通過這次的畢業(yè)設(shè)計實際動手操作和撰寫畢業(yè)論文,我學(xué)會了一些編程技巧,同時也鞏固了平常學(xué)習(xí)的理論知識,如內(nèi)部類、匿名類的使用,更進一步理解了面向?qū)ο?
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1