java坦克大戰(zhàn)系統(tǒng)
《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
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
13、
2) 在Tank類當(dāng)中添加hitTanks方法,打一系列Tank:在TankClient里面每發(fā)子彈都打
##大學(xué)
課程設(shè)計(jì)說明書 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)讓敵軍坦克向隨即方向移動(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 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案