坦克大戰詳細設計說明書_第1頁
坦克大戰詳細設計說明書_第2頁
坦克大戰詳細設計說明書_第3頁
坦克大戰詳細設計說明書_第4頁
坦克大戰詳細設計說明書_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件具體設計說明書一、TankWar類: TankWar繼承Frame類。paint()方法paint()方法關鍵實現對坦克類和子彈類,障礙物類和爆炸類等畫到窗口上。坦克類又分為MyTank和EnwmyTank兩類。對這兩類用不一樣顏色畫到窗口上。畫子彈時經過傳輸坦克顏色畫出對應子彈顏色。子彈畫坦克死亡則不再對其進行重畫。update()方法。update()方法關鍵是為了處理,重畫頻率太快,paint()方法還沒有完成,重畫坦克時出現閃爍現象。經過雙緩沖技術將全部東西畫在虛擬圖片上,一次性顯示出來處理閃爍現象。內部類KeyMon鍵盤監聽KeyMon繼承KeyAdapter類。經過KeyMon類監聽,用戶能夠經過鍵盤控制自己坦克。內部類MyTankWarThreadMyTankWarThread實現Runnable接口,經過MyTankWarThread實現對坦克重畫,實現坦克移動。showFrame()方法showFrame()方法關鍵是設置一個窗口及其多種參數。二、Tank類 Tank類是實現Runnable接口一個抽象類Tank類關鍵屬性有:intx; //坦克位置 inty; // intoldx; //坦克上一步坐標 intoldy; // Dirdir; //Tank方向組員變量intspeed=5; booleanisLive=true;Tank類提供多種結構方法Tank(intx,inty) Tank(intx,inty,Dirdir) Tank(intx,inty,Dirdir,TankWartw) 依據不一樣需要使用不一樣結構方法。drawTank()方法drawTank()方法依據坦克類型不一樣能夠畫出不一樣類型坦克和不一樣方向坦克。敵人坦克用BLUE畫出來,自己坦克用RED顏色畫出來,以區分敵我。fire()方法fire()方法功效是實現打出一顆子彈,fire()方法調用了畫坦克顏色變量c,畫出與坦克一樣顏色子彈,以區分子彈是那一方發出來。isHitWall()方法該方法是用來判定Tank是否與障礙物發生碰撞publicbooleanisHitWall(){ Wallw=null; for(inti=0;i<tw.walls.size();i++){ w=tw.walls.get(i); if(w.isHits(this.getRectangle())){ returntrue; } } returnfalse; }getRectangle()方法該方法關鍵是用來檢測是否發生了碰撞。publicRectanglegetRectangle(){ returnnewRectangle(x,y,TANK_WIDTH,TANK_HEIGHT); }add(intcount,TankWartw)方法該方法是用來添加敵人坦克,當敵人坦克數量降低時,而此時敵人count又未小于0時添加對應數量敵人坦克來增加游戲可玩性。三、MyTank類 MyTank類繼承Tank類locDir(KeyEvente)方法經過鍵盤監聽,對按鍵進行監聽來實現用戶能夠經過WDSA四個方向鍵對坦克控制keyReleased(KeyEvente)方法該方法關鍵是為了預防連續發子彈問題,只有放開SPACE按鍵才能夠發彈,這么就增加了游戲可玩性。stay()方法該方法關鍵實現暫停功效,這個是本游戲代碼中一個亮點,經過線程來實現 publicvoidstay(){ inttc=Thread.activeCount(); Thread[]threads=newThread[tc]; Thread.enumerate(threads); if(tw.flag){ for(inti=0;i<threads.length;i++){ System.out.println(tc+":suspend"+threads[i].getName()); if(threads[i].getName().matches("^Thread-.*")){ threads[i].suspend(); tw.flag=false; } } }elseif(!tw.flag){ for(inti=0;i<threads.length;i++){ System.out.println(tc+":resume"+threads[i].getName()); if(threads[i].getName().matches("^Thread-.*")){ threads[i].resume(); tw.flag=true; } } } }move()方法該方法是實現坦克移動,假如碰到障礙物或出界,則返回上一次位置,經過(oldX,oldY)坐標統計坦克每一次移動位置。publicvoidmove(){ if(dir==Dir.U){ oldy=y; y=y-speed; if(isHitWall()){ y=oldy; } }elseif(dir==Dir.R){ oldx=x; x=x+speed; if(isHitWall()){ x=oldx; } }elseif(dir==Dir.D){ oldy=y; y=y+speed; if(isHitWall()){ y=oldy; } }elseif(dir==Dir.L){ oldx=x; x=x-speed; if(isHitWall()){ x=oldx; } } //判定坦克出界 if(x>TankWar.GAME_WIDTH-TANK_WIDTH-5){ x=TankWar.GAME_WIDTH-TANK_WIDTH-5; } if(x<5){ x=5; } if(y>TankWar.GAME_HEIGHT-TANK_HEIGHT-5){ y=TankWar.GAME_HEIGHT-TANK_HEIGHT-5; } if(y<TANK_HEIGHT){ y=TANK_HEIGHT; } }drawTank()方法這個方法是實現坦克自動移動,玩家能夠經過方向鍵改版方向,移動過程中能夠發射子彈。publicvoiddrawTank(Graphicsg){ super.drawTank(g); if(isStay){ move(); } }四、EneyTank類 EnemyTank類繼承Tank類moveTrace()方法該方法實現是敵人坦克偽智能功效,這個是本坦克大戰一個亮點。敵人坦克出來后會依據目前位置和hero位置比較,進而對hero進行追擊。 publicvoidmoveTrace(){ if(step>0){ move(); step--; return; } intdx=this.x-tw.hero.x; intdy=this.y-tw.hero.y; if(tw.hero.isLive){ intnext=(int)(Math.random()*2); if(next==1){ if(dx>0){ this.dir=Dir.L; }elseif(dx<0){ this.dir=Dir.R; } }else{ if(dy>0){ this.dir=Dir.U; }elseif(dy<0){ this.dir=Dir.D; } } }else{ move(); } step=(int)(Math.random()*12+3); }move()方法敵人坦克移動時調用方法,方向是經過數來確定。hitTank(Tanktank)方法敵人碰撞檢測方法,假如和hero發生碰撞則hero發生爆炸。run()方法敵人坦克開啟線程控制。publicvoidrun(){ while(isLive){ try{ Thread.sleep(50); }catch(InterruptedExceptione){ e.printStackTrace(); } moveTrace(); } }五、Shells子彈類 子彈類繼承了Runnable類,基礎屬性有子彈坐標(x,y),方向Dir.drawShells(Graphicsg)方法這是一個畫子彈方法,子彈顏色經過調用坦克顏色this.c來實現畫出與坦克一樣顏色。move()子彈移動方法,子彈方法經過坦克目前方一直確定。run()子彈開啟線程。publicRec

溫馨提示

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

評論

0/150

提交評論