秋霞电影网午夜鲁丝片无码,真人h视频免费观看视频,囯产av无码片毛片一级,免费夜色私人影院在线观看,亚洲美女综合香蕉片,亚洲aⅴ天堂av在线电影猫咪,日韩三级片网址入口

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

上傳人:gfy****yf 文檔編號(hào):27501313 上傳時(shí)間:2021-08-18 格式:DOC 頁數(shù):15 大小:146.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
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)》由會(huì)員分享,可在線閱讀,更多相關(guān)《java坦克大戰(zhàn)系統(tǒng)(15頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

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

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

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

4、indowCIosingf WindowEvent e) { Systcm.cxit(O); } }); this.sctRcsizablc(false); 2.2.2構(gòu)建坦克類Tank 構(gòu)進(jìn)生窗口中所需要的Tank類,并將坦克加到窗口中,實(shí)現(xiàn)坦克的四個(gè)方向的移動(dòng) 創(chuàng)建一個(gè)坦克類,用畫圖工具構(gòu)適出簡單的圖形代表坦克,并將坦克加入到主窗口當(dā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); } } 讓坦克朝四個(gè)方向運(yùn)動(dòng)起來,在主類TankClient中啟用多線程機(jī)制,讓系統(tǒng)不斷的 進(jìn)行重畫。并在Tank類中建立處理按鍵的方法,實(shí)現(xiàn)坦克的手動(dòng)移動(dòng):根據(jù)坦克類修 改TankClient主類,在主類中注冊(cè)事件監(jiān)聽器,并調(diào)用Tank類中的方法。主類TankClient 中使用雙緩沖機(jī)制消除坦克的閃爍現(xiàn)象。在Tank類當(dāng)中添加的按鍵方法,代碼

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類中的多線程機(jī)制的主要代碼如下: 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類當(dāng)中添加x, y, dir等屬性以及常量。在Missil

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

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

10、ssle),當(dāng)炮彈已經(jīng)死去就不需 要對(duì)其重畫,當(dāng)炮彈飛出邊界就死亡,當(dāng)炮彈死亡就從容器中移去。 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) 實(shí)現(xiàn)坦克的互相開火 1) 加入?yún)^(qū)分?jǐn)澄业腂oolean B good,根據(jù)敵我設(shè)置不同的坦克 2) 更新Tank的構(gòu)適函數(shù),加入good

11、 3) 在TankClient中new出敵人并畫出 4) 在Missile中加入hitTank(Tank t)方法,返回布爾類型 5) 借用碰撞檢測(cè)的輔助類Rectangle,為Tank和Missile類都添加getRect()方法。 public Rectangle gclRcct() { return new Rcctanglc(x, y, WIDTH, HEIGHT); } 6) 增加控制坦克生死的Boolean B live,如果live為fhlse就不畫了。當(dāng)炮彈擊中敵人坦 克時(shí),坦克被打死,子彈也死去。 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類當(dāng)中添加hitTanks方法,打一系列Tank:在TankClient里面每發(fā)子彈都打 ##大學(xué) 課程設(shè)計(jì)說明書 No. 9 tanks Tank類當(dāng)中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)讓敵軍坦克向隨即方向移動(dòng)。添加隨機(jī)數(shù)產(chǎn)生器java.util.Random, move完成之后如 果是敵軍坦克的,隨機(jī)產(chǎn)生一個(gè)數(shù),來設(shè)定坦克的下一個(gè)方向。 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) 修改炮彈的構(gòu)造方法:修改Tank的fire方法:修改hitTank方法,坦克只能打擊對(duì)方。 2.2.5 創(chuàng)建 Explode 類 ⑴加入位置屬性x,,y,加入Boolean變屋live (2) 加入draw方法,用直徑不同的圓來模擬爆炸 (3) 在TankCIient當(dāng)中創(chuàng)建容器,將爆炸存放與容器當(dāng)中,擊斃一輛坦克就產(chǎn)生爆炸, 將爆炸逐一畫出(如果死

16、去就去除) Missile類當(dāng)中的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; ##大學(xué) 課程設(shè)計(jì)說明書 No. 11 2.2.6 添加藥箱 BloodBox 創(chuàng)建BloodBox類添加血藥箱,加入必要的屬性和方法,讓藥箱沿著固定的軌跡運(yùn)動(dòng)。 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]; } 當(dāng)主戰(zhàn)Tank與藥箱接觸的時(shí)候,血自動(dòng)加滿。 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; 將大學(xué) 課程設(shè)計(jì)說明書 No.il 2.2.7 添加 Home 建立Home類,在Home類中為家添加普通墻壁,當(dāng)墻壁中的home被打掉后游戲結(jié)束。 2.2.8添加障礙物 ⑴添加金屬墻 1) 建立MetalWall類,建立MetalWall對(duì)彖,用繪圖工具畫岀來 2) 讓每一顆子彈打擊每一堵墻,添加hitMetalWallO方法。當(dāng)子彈接觸到墻時(shí)子彈消失。 public boolean hitMctal\Vall(MctalWall w) { iRlhis.livc &

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

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

22、it,用工具包拿到所需圖片后再將它 放入容器中。然后再做相應(yīng)的替換。 下面是Missle類當(dāng)中的圖片加入 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 ?設(shè)計(jì)結(jié)果與分析 主坦克的方向鍵 前移:W或鍵盤方向鍵向上 后移:S或方向鍵向下 左移:A或鍵盤方向鍵向下 右移:D或方向鍵向右 普通開火鍵J 超級(jí)開火鍵K 游戲重新開始鍵F2 圖1游戲量終運(yùn)行界面 4.設(shè)計(jì)體會(huì) 通過這次課程設(shè)計(jì),通過此課程設(shè)計(jì),初步了解了 j

25、ava面向?qū)ο蟮奶攸c(diǎn),掌握了 Java的許多基本知識(shí),提升了自己的動(dòng)手能力。使我對(duì)JAVA這門課又做了一次系統(tǒng)的 復(fù)習(xí),對(duì)各個(gè)知識(shí)點(diǎn)也都有了更深刻的理解,讓我掌握的更扎實(shí),掌握J(rèn)AVA的應(yīng)用、 編寫、上機(jī)調(diào)試的基本方法,同時(shí)也增強(qiáng)了實(shí)際操作能力,了解了學(xué)生信息管理系統(tǒng)的 ##大學(xué) 課程設(shè)計(jì)說明書 No. # 工作流程以及工作模式,程序開發(fā)過程中涉及到了數(shù)據(jù)庫的相關(guān)知識(shí),使我對(duì)數(shù)據(jù)庫的 使用也更加的熟練,另一方面也對(duì)編程語言有了新的認(rèn)識(shí),為以后的學(xué)習(xí)打下了基礎(chǔ)。 本項(xiàng)目要學(xué)會(huì)圖形化用戶界面的構(gòu)建,并且本項(xiàng)目用到了多線程Thread的知識(shí)。通過 啟用多線程機(jī)制,不斷調(diào)用java.a

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

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

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

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

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


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