java坦克大戰(zhàn)系統(tǒng)
《java坦克大戰(zhàn)系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《java坦克大戰(zhàn)系統(tǒng)(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、課程設(shè)計說明書 No.i 坦克大戰(zhàn)游戲的實現(xiàn)與設(shè)計 1?課程設(shè)計的目的 隨著手機的日益普及,java功能在移動設(shè)備上的實現(xiàn)及java應(yīng)用程序產(chǎn)生的影響力, 對豐富人們的生活內(nèi)容,提供便捷的咨詢起著不可忽視的作用。本項目介紹了坦克大戰(zhàn) 的基本構(gòu)建方法、java的相關(guān)技術(shù)及本程序的結(jié)構(gòu)分析和具體功能的實現(xiàn)。游戲是在 Eclipse3.2環(huán)境下編程。本項目重點運用了圖形化用戶界面GUI, Thread多線程的有關(guān) 知識,其中涉及了繪圖工具的運用,事件處理操作以及圖形的碰撞檢測等知識點。通過 此課程設(shè)計,使學(xué)生鞏固所學(xué)知識、培養(yǎng)學(xué)生動手能力,了解Java的面向?qū)ο蟮捏w系結(jié) 構(gòu)。學(xué)生用Java
2、語言設(shè)計一個完整的應(yīng)用程序,綜合應(yīng)用所學(xué)知識完成軟件的分析、設(shè) 計、調(diào)試和總結(jié),提高學(xué)生對Java語言的綜合應(yīng)用能力和解決問題的能力。 2.設(shè)計方案論證 2.1設(shè)計思路 本項目介紹了坦克大戰(zhàn)的基本構(gòu)建方法、java的相關(guān)技術(shù)及本程序的結(jié)構(gòu)分析和具 體功能的實現(xiàn)。游戲是在Eclipse3.2環(huán)境下編程。它的主要功能有: (1) 能夠朝四個方向移動 (2) 能夠發(fā)射子彈互相攻擊 (3) 敵人能夠移動 (4) 能夠模擬爆炸 (5) 能夠產(chǎn)生障礙 (6) 能夠增長生命 玩家控制主坦克(上方有血條的)的移動以及炮彈的發(fā)射。若玩家將敵方坦克全部 打掉并保證自己的老家不被打掉則視為玩家獲
3、勝;若期間由玩家控制的主坦克被打掉, 或者自己的老家被打掉則視為玩家失敗。游戲中有金屬墻,普通墻,河水等障礙物,玩 家無法穿越它們:但是玩家可以將普通墻打掉。游戲中的森林可以將坦克隱身,藥箱可 以將坦克的血加滿。 ##大學(xué) 課程設(shè)計說明書 No. 5 2.2設(shè)計方法 2.2.1構(gòu)建游戲主類 在主類中構(gòu)適一個主Frame框架,設(shè)置它的大小和位置,并將其顯示。在主類中編 寫一段代碼,構(gòu)適一個窗口。并添加窗口關(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)進生窗口中所需要的Tank類,并將坦克加到窗口中,實現(xiàn)坦克的四個方向的移動 創(chuàng)建一個坦克類,用畫圖工具構(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); } } 讓坦克朝四個方向運動起來,在主類TankClient中啟用多線程機制,讓系統(tǒng)不斷的 進行重畫。并在Tank類中建立處理按鍵的方法,實現(xiàn)坦克的手動移動:根據(jù)坦克類修 改TankClient主類,在主類中注冊事件監(jiān)聽器,并調(diào)用Tank類中的方法。主類TankClient 中使用雙緩沖機制消除坦克的閃爍現(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類中的多線程機制的主要代碼如下: 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ù)不同的方向,子彈要進行不同的運動。在TankClient當(dāng)中 new —顆子彈出來。 2.2.4實現(xiàn)坦克的互相攻擊 (1)讓主戰(zhàn)坦克打出炮彈 1) 在Tank類當(dāng)中增加對J鍵的處理,使每按下J鍵的時候,坦克打?qū)缫话l(fā)炮彈。 ease KcyEvent.VK_J : break; ##大學(xué) 課程設(shè)計說明書 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鍵的時候就往 容器中加入新的炮彈
List
10、ssle),當(dāng)炮彈已經(jīng)死去就不需 要對其重畫,當(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) 實現(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) 借用碰撞檢測的輔助類Rectangle,為Tank和Missile類都添加getRect()方法。 public Rectangle gclRcct() { return new Rcctanglc(x, y, WIDTH, HEIGHT); } 6) 增加控制坦克生死的Boolean B live,如果live為fhlse就不畫了。當(dāng)炮彈擊中敵人坦 克時,坦克被打死,子彈也死去。 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
13、
2) 在Tank類當(dāng)中添加hitTanks方法,打一系列Tank:在TankClient里面每發(fā)子彈都打
##大學(xué)
課程設(shè)計說明書 No. 9
tanks
Tank類當(dāng)中hitTanks方法
public boolean hitTanks( List 14、siles.size(); i++) {
Missile m = missilcs.gct(i);
m.hitTanks( tanks);
m.draw(g);
}
(4)讓坦克更加智能
1)讓敵軍坦克向隨即方向移動。添加隨機數(shù)產(chǎn)生器java.util.Random, move完成之后如 果是敵軍坦克的,隨機產(chǎn)生一個數(shù),來設(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) 修改炮彈的構(gòu)造方法:修改Tank的fire方法:修改hitTank方法,坦克只能打擊對方。
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è)計說明書 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];
}
當(dāng)主戰(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;
將大學(xué)
課程設(shè)計說明書 No.il
2.2.7 添加 Home
建立Home類,在Home類中為家添加普通墻壁,當(dāng)墻壁中的home被打掉后游戲結(jié)束。
2.2.8添加障礙物
⑴添加金屬墻
1) 建立MetalWall類,建立MetalWall對彖,用繪圖工具畫岀來
2) 讓每一顆子彈打擊每一堵墻,添加hitMetalWallO方法。當(dāng)子彈接觸到墻時子彈消失。 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)碰到墻時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方法,擋子彈接觸到墻壁時,墻 壁消失。
(3) 添加河水River
具體細節(jié)參考2.7.1中添加金屬墻
(4) 添加樹林
創(chuàng)建Tee類,用畫圖工具畫出代表森林的模塊,加入主窗口當(dāng)中。
(5) 加入圖片替換主窗口中的各對象
再將圖片加入時,運用了系統(tǒng)提供的工具包ToolK 22、it,用工具包拿到所需圖片后再將它 放入容器中。然后再做相應(yīng)的替換。
下面是Missle類當(dāng)中的圖片加入
private static Toolkit tk = Toolkit.gctDcfaultToolkit();
private static Imagc[] missilclmagcs = null;
private static Map 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è)計結(jié)果與分析
主坦克的方向鍵
前移:W或鍵盤方向鍵向上 后移:S或方向鍵向下 左移:A或鍵盤方向鍵向下 右移:D或方向鍵向右 普通開火鍵J
超級開火鍵K
游戲重新開始鍵F2
圖1游戲量終運行界面
4.設(shè)計體會
通過這次課程設(shè)計,通過此課程設(shè)計,初步了解了 j 25、ava面向?qū)ο蟮奶攸c,掌握了 Java的許多基本知識,提升了自己的動手能力。使我對JAVA這門課又做了一次系統(tǒng)的 復(fù)習(xí),對各個知識點也都有了更深刻的理解,讓我掌握的更扎實,掌握J(rèn)AVA的應(yīng)用、 編寫、上機調(diào)試的基本方法,同時也增強了實際操作能力,了解了學(xué)生信息管理系統(tǒng)的
##大學(xué)
課程設(shè)計說明書 No. #
工作流程以及工作模式,程序開發(fā)過程中涉及到了數(shù)據(jù)庫的相關(guān)知識,使我對數(shù)據(jù)庫的 使用也更加的熟練,另一方面也對編程語言有了新的認(rèn)識,為以后的學(xué)習(xí)打下了基礎(chǔ)。 本項目要學(xué)會圖形化用戶界面的構(gòu)建,并且本項目用到了多線程Thread的知識。通過 啟用多線程機制,不斷調(diào)用java.a 26、wt.*中的paint(Graphics g)方法,將畫面構(gòu)適出來。其 中要使用雙緩沖消除閃爍現(xiàn)象。程序中還使用了鍵盤監(jiān)聽器類KeyMonitor實現(xiàn)坦克的 控制操作。碰撞檢測的輔助類Rectangle可以完成坦克之間,以及坦克與障礙物之間的 碰撞檢測。初步了解反射,知道對于classloader,每一個.class實際就是一個Class對象。 學(xué)會使用Toolkit類,并使用該類加載得到圖片。學(xué)會使用Random類,并使用其中的 nextlnt ()方法得到隨機數(shù)。利用了容器類往里添加對象。
5 .參考文獻
[1] Cay S.Horstmann, Gary Comil,葉乃文等譯..Java核心技術(shù)[M].北京:機械工業(yè)出版社, 2006.5: 76-85
[2] 周競濤,Eclipse完全手冊[M].北京:電子工業(yè)出版社,2006.8: 98-110
[3] 王克宏,郝建文.Java技術(shù)教程[M].北京:淸華大學(xué)出版社,2002.9: 56-69
[4] 朱戰(zhàn)立,沈偉.Java程序設(shè)計實用教程[M].北京:人民郵電出版社,2007.1: 134-150
##大學(xué)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案