坦克大戰(zhàn)報(bào)告_第1頁
坦克大戰(zhàn)報(bào)告_第2頁
坦克大戰(zhàn)報(bào)告_第3頁
坦克大戰(zhàn)報(bào)告_第4頁
坦克大戰(zhàn)報(bào)告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、java程序開發(fā)課程設(shè)計(jì)課程大作業(yè) 專 業(yè): 軟 件 工 程 班 級(jí): 14軟工2 學(xué) 號(hào): 1422130236 姓 名: 張敏慧 項(xiàng)目名稱:坦克大戰(zhàn)一、 需求分析:1. 基本功能:(1) 我方坦克能上下移動(dòng)(2) 敵方坦克能自由移動(dòng)(3) 我方坦克能開火(4) 敵方坦克能自由開火(5) 子彈打中我方,會(huì)減血,我方打中敵方,敵死。敵打敵不會(huì)受傷(6) 有血條,主界面2. 擴(kuò)展功能(1) 用圖形來表示坦克和炮彈(2) 用圖形來表示中子彈后的爆炸效果(3) 地圖上存在金屬墻,我方坦克和子彈不能穿過(4) 地圖上存在曹村,我方和敵方坦克能夠自由穿過,子彈也一樣(5) 地圖上會(huì)隨機(jī)出現(xiàn)加血包(6)

2、我方坦克遇到加血包,會(huì)增加生命(7) 游戲開始時(shí),會(huì)啟動(dòng)背景音樂(8) 我方坦克死亡時(shí),提示游戲結(jié)束二、系統(tǒng)設(shè)計(jì): 1. bgmusic(1)主要功能:添加背景音樂tankmap類通過調(diào)用該類,并讀取bgmusic包下面的背景音樂文件(2)成員屬性:1)filename,用于記錄讀取到的文件名,并處理2)nbytesread,這是緩存,用于讀取音樂文件,緩存下來(3)成員方法: 1)run,播放背景音樂2) 構(gòu)造方法bgmusic,將讀取到的文件名,存儲(chǔ)到成員屬性filename中2. blood(1)主要功能:地圖中添加血包(2)成員屬性:1)x,y,width,height,血包的位置以及

3、寬高2)rpos_x,rpos_y,用于記錄血包移動(dòng)后的位置3)tm,調(diào)用tankmap類,并在地圖中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于記錄血包的存活6)step,血包的步長(zhǎng)7)stepmove,血包走過總的步長(zhǎng)(3)成員方法: 1)blood,構(gòu)造方法,將血包放到地圖中2) draw,畫血包3) move,血包的移動(dòng)4) getrect,獲取血包的位置3. tank(1)主要功能:地圖中添加我方坦克(2)成員屬性:1)width,height,xspeed,yspeed,坦克的寬高和x,y上的移動(dòng)速度2)x,y,direction,我方坦克出現(xiàn)的初始位置和

4、初始狀態(tài)3)tm,調(diào)用tankmap類,并在地圖中放坦克4)islive,我方坦克是否存活5) isgood,坦克屬于哪一方6) life,我方坦克的初始生命值7) step,使用blood類,血包隨機(jī)出現(xiàn)8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克圖片(3)成員方法: 1)draw,繪制坦克 2)move,根據(jù)移動(dòng)方向,移動(dòng)坦克,不允許坦克移除地圖 3)checkdirection,確定用戶單擊的方向鍵,修正坦克即將移動(dòng)方向 4)fire,發(fā)射子彈 5)getrec,返回坦克當(dāng)前位置,便于判斷是否與敵方坦克或子彈重疊 6)sta

5、y,坦克撞墻的處理 7)eat,我方坦克吃血包 4.enemytank(1)主要功能:地圖中添加敵方坦克(2)成員屬性:1)width,height,xspeed,yspeed,坦克的寬高和x,y上的移動(dòng)速度2)x,y,direction,我方坦克出現(xiàn)的初始位置和初始狀態(tài)3)tm,調(diào)用tankmap類,并在地圖中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克圖片(3)成員方法: 1)draw,繪制坦克 2)move,根據(jù)移動(dòng)方向,移動(dòng)坦克,不允許坦克移除地圖 3)fire,發(fā)射子彈 4.explor(1)主要功能:子彈打中坦克,發(fā)生爆炸效果(2)成員屬性:1)x,y,

6、坦克出現(xiàn)的位置2)tm,調(diào)用tankmap類,并在地圖中放爆炸3)islive,我方坦克是否存活 (3)成員方法: 1)draw,繪制爆炸 2)explor,爆炸的構(gòu)造方法 5.help(1)主要功能:給用戶游戲幫助(2)成員屬性:1)help,將幫助的文字存放在字符串中 (3)成員方法: 1)gethelpdialog,調(diào)用幫助 6.shell(1)主要功能:設(shè)計(jì)子彈(2)成員屬性:1)width,height,xspeed,yspeed,子彈的寬高和x,y上的移動(dòng)速度2)x,y,direction,子彈出現(xiàn)的位置和方向3)tm,調(diào)用tankmap類,并在地圖中放子彈4)islive,子彈是

7、否打中坦克5)isgood,是否是我方6)image,加載子彈圖片 (3)成員方法: 1)draw,繪制子彈 2)move,根據(jù)移動(dòng)方向,移動(dòng)坦克,得到子彈的移動(dòng) 3)getrec,獲取坦克的位置 4)hittanks,子彈打坦克 5)hitwalls,子彈打墻 7.wall(1)主要功能:給地圖添加墻(2)成員屬性:1)x,y,w,h,墻的位置和寬度高度2)tc,地圖 (3)成員方法: 1)draw,畫墻 2)getrect,獲取墻的位置8.tankmap(1)主要功能:地圖(2)成員屬性:1)mapwidth,mapheight,地圖的寬高2)t,我方坦克3)bufferimage,緩沖,

8、用于解決閃屏4)forestimage,草叢5)shells,enemytank,blood,explors泛型6)enemycount,敵方坦克數(shù)量7)w1,w2,不可穿過的墻 (3)成員方法: 1)init,初始化地圖 2)paint,畫血包,地圖,坦克等 3)addbloods,加血 4)update,解決閃屏 三、功能實(shí)現(xiàn):1. 功能1:我方,敵方坦克上下移動(dòng)并開火(1) 操作說明 游戲啟動(dòng)時(shí),按上下左右鍵可以是我方坦克移動(dòng),按f鍵可以開火 (2)關(guān)鍵代碼/繪制坦克public void draw(graphics g)/根據(jù)不同方向加載不同圖片,讀取的時(shí)候需要處理異常tryswitc

9、h(direction)case stop:case up:upimage=imageio.read(new file(src/images/up.gif);oldimage=upimage;g.drawimage(upimage, x, y, null);break;case right:rightimage=imageio.read(new file(src/images/right.gif);oldimage=rightimage;g.drawimage(rightimage, x, y, null);break;case down:downimage=imageio.read(new

10、file(src/images/down.gif);oldimage=downimage;g.drawimage(downimage, x, y, null);break;case left:leftimage=imageio.read(new file(src/images/left.gif);oldimage=leftimage;g.drawimage(leftimage, x, y, null);break;catch (ioexception e) ;g.drawimage(oldimage, x, y, null);move(direction);/根據(jù)移動(dòng)方向,移動(dòng)坦克,不允許坦克

11、移出地圖public void move(direction d)/* 記錄坦克原來的位置,撞墻可以回到原位置*/oldx=x;/記錄坦克原來的位置,撞墻可以回到原位置oldy=y;if(d = direction.stop)else if(d = direction.up)y-=yspeed;if(y=800-width)x=800-width;else if(d=direction.down)y+=yspeed;if(y=600-height)y=600-height;else if(d=direction.left)x-=xspeed;2. 功能2:我方開火,敵方會(huì)爆炸,然后死亡。我方中

12、彈,會(huì)爆炸再扣血(1)操作說明 通過我方坦克的移動(dòng)和開火,殺死敵方坦克(2)關(guān)鍵代碼public boolean hittank(tank t)if(this.islive&t.islive&this.getrec().intersects(t.getrec()t.setlife(t.getlife()-20);if(t.getlife()0)t.setlive(false);t.direction=direction.stop;joptionpane.showmessagedialog(tm,game over!);system.exit(0);this.islive=false;explo

13、r e=new explor(x-3,y-3,this.tm);tm.explors.add(e);return true;return false;public boolean hittanks(listenemytanks)enemytank e;for(int i=0;i= 400) rpos_x = tank.random.nextint(470);rpos_y = tank.random.nextint(480);blood = tank.random.nextboolean();live = true;step = 0;stepmove = -1;return;if(stepmov

14、e%5 = 0) move();color c = g.getcolor();/g.setcolor(color.magenta);/g.fillrect(x - 3, y - 3, width + 6, height + 6);if(blood) g.setcolor(color.red);g.fillrect(x, y, width, height);g.setcolor(c);if(stepmove = 300) live = false;tm.bloods.remove(this);stepmove = 0;/* 補(bǔ)給移動(dòng)*/public void move() if(step = p

15、os.length) step = 0;x = rpos_x + posstep0;y = rpos_y + posstep1;step +;public rectangle getrect() return new rectangle(x, y, width, height);public boolean isblood() return blood;public boolean islive() return live;public void setlive(boolean live) this.live = live;public void setstepmove(int stepmov

16、e) this.stepmove = stepmove;5. 功能5:金屬墻和樹林(1)操作說明 坦克可以穿過樹林,但是穿不過金屬墻,子彈也不能穿過金屬墻 (2) 關(guān)鍵代碼樹林:/* 讀取樹林*/forestimage=imageio.read(new file(src/images/wall_forest.gif);穿不過金屬墻:public class wall /* x,y為墻的位置,w,h為寬度高度;*/int x,y,w,h;/* 持有引用*/tankmap tc;public wall(int x, int y, int w, int h, tankmap tc) this.x =

17、 x;this.y = y;this.w = w;this.h = h;this.tc = tc;public void draw(graphics g)color c=g.getcolor();g.setcolor(color.gray);g.fillrect(x,y,w,h);g.setcolor(c);/* 得到墻的矩形區(qū)域;* return*/public rectangle getrect()return new rectangle(x,y,w,h);子彈不能穿過金屬墻:/* 判斷子彈是否撞墻* param w墻* returntrue,撞上,false,未撞上;*/public b

18、oolean hitswall(wall w)if(this.islive&this.getrec().intersects(w.getrect()islive=false;return true;return false;6. 功能6:幫助界面(1)操作說明 鍵盤按下f1,顯示一個(gè)窗口,會(huì)顯示幫助 (2)關(guān)鍵代碼public class help private static string help = 上:方向鍵上n +下:方向鍵下n +左:方向鍵左n +右:方向鍵右n +開火: f +幫助: f1n +紅塊加滿血;public static void gethelpdialog() dialog h = new joptionpane(help).createdialog(操作說明);h.setvisible(true);四、創(chuàng)新點(diǎn):1能夠放置樹林,金屬墻2子彈不能穿過金屬墻3. 我方坦克不能穿過金屬墻4.能夠隨機(jī)出現(xiàn)加血包,而且加血包會(huì)隨機(jī)移動(dòng)5.我方坦克吃到血包會(huì)加血6最后來個(gè)背景音樂五、總結(jié):這次的坦克大戰(zhàn)是我的第一個(gè)java程序。一開始,我就對(duì)游戲很感興趣,很想了解游戲運(yùn)行的原理。剛

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論