java坦克大戰(zhàn)系統(tǒng)

上傳人:gfy****yf 文檔編號:27501313 上傳時間:2021-08-18 格式:DOC 頁數(shù):15 大?。?46.50KB
收藏 版權申訴 舉報 下載
java坦克大戰(zhàn)系統(tǒng)_第1頁
第1頁 / 共15頁
java坦克大戰(zhàn)系統(tǒng)_第2頁
第2頁 / 共15頁
java坦克大戰(zhàn)系統(tǒng)_第3頁
第3頁 / 共15頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《java坦克大戰(zhàn)系統(tǒng)》由會員分享,可在線閱讀,更多相關《java坦克大戰(zhàn)系統(tǒng)(15頁珍藏版)》請在裝配圖網上搜索。

1、課程設計說明書 No.i 坦克大戰(zhàn)游戲的實現(xiàn)與設計 1?課程設計的目的 隨著手機的日益普及,java功能在移動設備上的實現(xiàn)及java應用程序產生的影響力, 對豐富人們的生活內容,提供便捷的咨詢起著不可忽視的作用。本項目介紹了坦克大戰(zhàn) 的基本構建方法、java的相關技術及本程序的結構分析和具體功能的實現(xiàn)。游戲是在 Eclipse3.2環(huán)境下編程。本項目重點運用了圖形化用戶界面GUI, Thread多線程的有關 知識,其中涉及了繪圖工具的運用,事件處理操作以及圖形的碰撞檢測等知識點。通過 此課程設計,使學生鞏固所學知識、培養(yǎng)學生動手能力,了解Java的面向對象的體系結 構。學生用Java

2、語言設計一個完整的應用程序,綜合應用所學知識完成軟件的分析、設 計、調試和總結,提高學生對Java語言的綜合應用能力和解決問題的能力。 2.設計方案論證 2.1設計思路 本項目介紹了坦克大戰(zhàn)的基本構建方法、java的相關技術及本程序的結構分析和具 體功能的實現(xiàn)。游戲是在Eclipse3.2環(huán)境下編程。它的主要功能有: (1) 能夠朝四個方向移動 (2) 能夠發(fā)射子彈互相攻擊 (3) 敵人能夠移動 (4) 能夠模擬爆炸 (5) 能夠產生障礙 (6) 能夠增長生命 玩家控制主坦克(上方有血條的)的移動以及炮彈的發(fā)射。若玩家將敵方坦克全部 打掉并保證自己的老家不被打掉則視為玩家獲

3、勝;若期間由玩家控制的主坦克被打掉, 或者自己的老家被打掉則視為玩家失敗。游戲中有金屬墻,普通墻,河水等障礙物,玩 家無法穿越它們:但是玩家可以將普通墻打掉。游戲中的森林可以將坦克隱身,藥箱可 以將坦克的血加滿。 ##大學 課程設計說明書 No. 5 2.2設計方法 2.2.1構建游戲主類 在主類中構適一個主Frame框架,設置它的大小和位置,并將其顯示。在主類中編 寫一段代碼,構適一個窗口。并添加窗口關閉的處理事件,將窗口設置成打小不可變。 主要代碼如下: this.addWindowListcncr(ncw Window Adapted) { public void w

4、indowCIosingf WindowEvent e) { Systcm.cxit(O); } }); this.sctRcsizablc(false); 2.2.2構建坦克類Tank 構進生窗口中所需要的Tank類,并將坦克加到窗口中,實現(xiàn)坦克的四個方向的移動 創(chuàng)建一個坦克類,用畫圖工具構適出簡單的圖形代表坦克,并將坦克加入到主窗口當中。 主要代碼如下: public class Tank { public void draw(Graphics g) { Color c = g.gctColor(); g.sctColor(Color.RED); g.fillOval(x,

5、 y, 30,30); g.setColorfc); } } public class TankClient extends Frame { public void paint(Graphics g) { myTank.draw(g); } } 讓坦克朝四個方向運動起來,在主類TankClient中啟用多線程機制,讓系統(tǒng)不斷的 進行重畫。并在Tank類中建立處理按鍵的方法,實現(xiàn)坦克的手動移動:根據(jù)坦克類修 改TankClient主類,在主類中注冊事件監(jiān)聽器,并調用Tank類中的方法。主類TankClient 中使用雙緩沖機制消除坦克的閃爍現(xiàn)象。在Tank類當中添加的按鍵方法,代碼

6、如下: public void keyPrcsscd( KcyEvcnt c) { int key = c.gctKcyCodc(); switch(kcy) { case KcyEvcnt. VK_LEFT: bL = true; break; locatcDirection(); } public void kcyRclcascd(KcyEvcnt c) { int key = c.gctKcyCodc(); switch(kcy) { ease KcyEvcnt.VK_LEFT : bL = false; break; locatcDircction(); Tan

7、kClient類中的多線程機制的主要代碼如下: new Thrcad(ncw PaintThrcad()).start(); private class PaintThread implements Runnable { public void run() { whilc(truc) { rcpaint(); try { Thrcad.slccp(50); } catch (IntcrruptcdExccption c) { c.printStackTracc(); 2.2.3添加炮彈Missile類 在Missile類當中添加x, y, dir等屬性以及常量。在Missil

8、e類當中添加構適方法, draw方法等必要方法。根據(jù)不同的方向,子彈要進行不同的運動。在TankClient當中 new —顆子彈出來。 2.2.4實現(xiàn)坦克的互相攻擊 (1)讓主戰(zhàn)坦克打出炮彈 1) 在Tank類當中增加對J鍵的處理,使每按下J鍵的時候,坦克打岀一發(fā)炮彈。 ease KcyEvent.VK_J : break; ##大學 課程設計說明書 NO.7 2)根據(jù)“坦克打出炮彈”這句話,確定Tank當中的fire方法,其返回值為Missile。 public Missile fire() { Missile m = new Missilc(x, y, ptDi

9、r); return m: } 3) 為了解決坦克停下來也能開火的問題一一給坦克加一炮筒,根據(jù)炮筒方向和 位置設定子彈的方向和位置并new出來,然后返回。每次move之后根據(jù)Tank 的新方向確定炮筒的方向。 iRthis.dir != Dircction.STOP) { this.ptDir = ihis.dir; } 4) 為了能夠打出多發(fā)炮彈,使用容器填裝多發(fā)炮彈,每當抬起J鍵的時候就往 容器中加入新的炮彈 List missiles = new ArrayList(); 5) 解決炮彈不消亡的問題,加入控制炮彈生死的量live(Mi

10、ssle),當炮彈已經死去就不需 要對其重畫,當炮彈飛出邊界就死亡,當炮彈死亡就從容器中移去。 ix < 0 || y < 0 || x > TankClient.GAME_WIDTH || y > TankClicnt.GAME_HE1GHT){ live = false; } public void draw(Graphics g) { ift!!ive) { tc.missiles.rcmove(this); return; (2) 實現(xiàn)坦克的互相開火 1) 加入?yún)^(qū)分敵我的Boolean B good,根據(jù)敵我設置不同的坦克 2) 更新Tank的構適函數(shù),加入good

11、 3) 在TankClient中new出敵人并畫出 4) 在Missile中加入hitTank(Tank t)方法,返回布爾類型 5) 借用碰撞檢測的輔助類Rectangle,為Tank和Missile類都添加getRect()方法。 public Rectangle gclRcct() { return new Rcctanglc(x, y, WIDTH, HEIGHT); } 6) 增加控制坦克生死的Boolean B live,如果live為fhlse就不畫了。當炮彈擊中敵人坦 克時,坦克被打死,子彈也死去。 public boolean hitTank(Tank t)

12、{ if(this.gctRcct().intcrsects(t.gctRccl()) && t.isLive()) { t.sctLive(false); this」ivc = false; return true; } return false; } (3) 添加多輛坦克 1) 建一容器向里而添加敵人的Tank List tanks = new ArrayList(); 涼加Tank Mint i=0; i<10; i++) { tanks.add(ncw Tank(50 + 40*(i+1), 50, false, this)); }

13、 2) 在Tank類當中添加hitTanks方法,打一系列Tank:在TankClient里面每發(fā)子彈都打 ##大學 課程設計說明書 No. 9 tanks Tank類當中hitTanks方法 public boolean hitTanks( List tanks) { for(inl i=0; i

14、siles.size(); i++) { Missile m = missilcs.gct(i); m.hitTanks( tanks); m.draw(g); } (4)讓坦克更加智能 1)讓敵軍坦克向隨即方向移動。添加隨機數(shù)產生器java.util.Random, move完成之后如 果是敵軍坦克的,隨機產生一個數(shù),來設定坦克的下一個方向。 ifljgood){ Dircction[] dirs = Direction.values(); instep = 0) { step = r.ncxt!nt(12) + 3; int m = r.ncxtlnt(dirs le

15、ngth); dir = dirs[m]; iftr.ncxt!nt(40) > 38) this.firc(); } 2) 讓敵方坦克發(fā)射炮彈。本軍坦克不打本軍坦克,向炮彈添加表示好壞的Boolean > goodo 3) 修改炮彈的構造方法:修改Tank的fire方法:修改hitTank方法,坦克只能打擊對方。 2.2.5 創(chuàng)建 Explode 類 ⑴加入位置屬性x,,y,加入Boolean變屋live (2) 加入draw方法,用直徑不同的圓來模擬爆炸 (3) 在TankCIient當中創(chuàng)建容器,將爆炸存放與容器當中,擊斃一輛坦克就產生爆炸, 將爆炸逐一畫出(如果死

16、去就去除) Missile類當中的hitTank()方法 public boolean hitTank(Tank t) { ii{lhis.getRcct().intcrsccts(t.gctRcct()) && t.isLivc()) { t.setLivc(false); this.livc = false; Explode c = new Explodc(x, y, tc); tc.cxplodcs.add(c); return true; } return false; } 爆炸死后去除 if^Jlive) { tc.cxplodcs.rcmovc(this

17、); 〃死后去除 return; ##大學 課程設計說明書 No. 11 2.2.6 添加藥箱 BloodBox 創(chuàng)建BloodBox類添加血藥箱,加入必要的屬性和方法,讓藥箱沿著固定的軌跡運動。 private static Random r = new Random(); int step = 0; private intO(] pos={ { 100, 120 }, { 200, 300 }, { 760, 570 }, { 280, 570 }, { 600,40 }, { 700,60 }, { 680,225 } }; public BloodBox()

18、{ x = pos[0][0]; y = pos[0][l); } private void movc() { step-H-; if (step = pos」ength) { step = 0; } x = pos[stcp][OJ; y = pos(stcp][l]; } 當主戰(zhàn)Tank與藥箱接觸的時候,血自動加滿。 public boolean cat(BloodBox b) { if (this.livc && b.isLivcQ && this.gciRcct().intcrsccts(b.getRcct())) { this.lifc = 100;

19、b.sctLivc(false); return true; } return false; 將大學 課程設計說明書 No.il 2.2.7 添加 Home 建立Home類,在Home類中為家添加普通墻壁,當墻壁中的home被打掉后游戲結束。 2.2.8添加障礙物 ⑴添加金屬墻 1) 建立MetalWall類,建立MetalWall對彖,用繪圖工具畫岀來 2) 讓每一顆子彈打擊每一堵墻,添加hitMetalWallO方法。當子彈接觸到墻時子彈消失。 public boolean hitMctal\Vall(MctalWall w) { iRlhis.livc &

20、& this.gctRcct().intcrsccts(w.gclRcct())) { this.livc = false; return true; } return false; } 3) 讓坦克不能穿過墻。添加記錄上一次位置的oldX, oldY:修改構適函數(shù) 每次 move之前記錄上一次的位置。添加stay方法記錄移動之前的位置,當坦克撞到榴時回 到移動前的位置,即當碰到墻時stay。 public boolean collidesWithMctalWall (MetalWall w) { this.livc && this.gctRcct().intcrsccts(\

21、v.gciRcct())) { this.stay(); return true; } return false; } (2)添加普通墻 建立OrdinaryWall類,往里添加相應屬性以及相應方法。具體步驟參考2.7.1中添加金 屬墻。不同之處在于Missile類當中的hitOrdinaryWallQ方法,擋子彈接觸到墻壁時,墻 壁消失。 (3) 添加河水River 具體細節(jié)參考2.7.1中添加金屬墻 (4) 添加樹林 創(chuàng)建Tee類,用畫圖工具畫出代表森林的模塊,加入主窗口當中。 (5) 加入圖片替換主窗口中的各對象 再將圖片加入時,運用了系統(tǒng)提供的工具包ToolK

22、it,用工具包拿到所需圖片后再將它 放入容器中。然后再做相應的替換。 下面是Missle類當中的圖片加入 private static Toolkit tk = Toolkit.gctDcfaultToolkit(); private static Imagc[] missilclmagcs = null; private static Map imgs = new HashMap(); static { missilclmagcs =ncw Imagc[] { tk.gctImagc(Missilc.class.gct

23、ClassLoadcr().gctRcsourcc("imagcs/missilcL.gif,)), lk.gctImagc(Missilc.class.gctClassLoader().gctRcsourcc("imagcs/missilcU.gif)), tk.gciImagc(Missilc.class.gctClassLoadcr().gciRcsourcc("imagcs/missilcR.gif)), lk.gct!magc(Missilc.class.gctClassLoadcr().gciRcsourcc("imagcs/missilcD.gir)), }; imgs

24、.put("L", missilcImagcs[O]); imgs.putCU", missilclmagcs] 1 ]); imgs.put("R", missilelmages[2]); imgs.putCD", missilclmagcs[3]); } 其他類的圖片載入類似Missile類。 3 ?設計結果與分析 主坦克的方向鍵 前移:W或鍵盤方向鍵向上 后移:S或方向鍵向下 左移:A或鍵盤方向鍵向下 右移:D或方向鍵向右 普通開火鍵J 超級開火鍵K 游戲重新開始鍵F2 圖1游戲量終運行界面 4.設計體會 通過這次課程設計,通過此課程設計,初步了解了 j

25、ava面向對象的特點,掌握了 Java的許多基本知識,提升了自己的動手能力。使我對JAVA這門課又做了一次系統(tǒng)的 復習,對各個知識點也都有了更深刻的理解,讓我掌握的更扎實,掌握JAVA的應用、 編寫、上機調試的基本方法,同時也增強了實際操作能力,了解了學生信息管理系統(tǒng)的 ##大學 課程設計說明書 No. # 工作流程以及工作模式,程序開發(fā)過程中涉及到了數(shù)據(jù)庫的相關知識,使我對數(shù)據(jù)庫的 使用也更加的熟練,另一方面也對編程語言有了新的認識,為以后的學習打下了基礎。 本項目要學會圖形化用戶界面的構建,并且本項目用到了多線程Thread的知識。通過 啟用多線程機制,不斷調用java.a

26、wt.*中的paint(Graphics g)方法,將畫面構適出來。其 中要使用雙緩沖消除閃爍現(xiàn)象。程序中還使用了鍵盤監(jiān)聽器類KeyMonitor實現(xiàn)坦克的 控制操作。碰撞檢測的輔助類Rectangle可以完成坦克之間,以及坦克與障礙物之間的 碰撞檢測。初步了解反射,知道對于classloader,每一個.class實際就是一個Class對象。 學會使用Toolkit類,并使用該類加載得到圖片。學會使用Random類,并使用其中的 nextlnt ()方法得到隨機數(shù)。利用了容器類往里添加對象。 5 .參考文獻 [1] Cay S.Horstmann, Gary Comil,葉乃文等譯..Java核心技術[M].北京:機械工業(yè)出版社, 2006.5: 76-85 [2] 周競濤,Eclipse完全手冊[M].北京:電子工業(yè)出版社,2006.8: 98-110 [3] 王克宏,郝建文.Java技術教程[M].北京:淸華大學出版社,2002.9: 56-69 [4] 朱戰(zhàn)立,沈偉.Java程序設計實用教程[M].北京:人民郵電出版社,2007.1: 134-150 ##大學

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!