java項目之坦克大戰_第1頁
java項目之坦克大戰_第2頁
java項目之坦克大戰_第3頁
java項目之坦克大戰_第4頁
java項目之坦克大戰_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、Java程序設計項目坦克大戰圖片指導老師:魏凌華13數字媒體 張文采 20131208064簡介:本項目是J2se學習的一個總結其中涉及集合的使用與繼承和實現和多線程的使用以及tookit包的使用及awt界面的設計,理解訪問控制權限的使用,并且使用了java中文檔保存數據。實驗內容在jdk1.8環境下,eclipse上實現。以下是幾個類和文檔的源代碼(注如要運行此代碼請將請將圖片放入類所在的文件夾images文件夾中)主類 TankClientimport java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import

2、java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.List;public class TankClient extends Frame public static final int GAME_WIDTH = 800;public static final int

3、 GAME_HEIGHT = 600;public boolean mylive=true;List<Tank> tanks=new ArrayList<Tank>();List<Missile> Missiles=new ArrayList<Missile>(); List<Explode> explodes=new ArrayList<Explode>();Wall w=new Wall();Blood b=new Blood();public boolean drawblood=true;Tank myTank =

4、new Tank(500, 500,this);Image offScreenImage = null;public void paint(Graphics g) g.setColor(Color.WHITE);g.drawString("missiles"+Missiles.size(), 101, 101);if(mylive)myTank.draw(g);if(tanks.size()<=0)for(int i=0;i<Integer.parseInt(PropertyMgr.getProperty("reProduceTankCount&quo

5、t;);i+)tanks.add(new Tank(50+40*(i+1),50,false,this);for(int i=0;i<tanks.size();i+)Tank t=tanks.get(i);t.draw(g);for(int i=0;i<Missiles.size();i+)Missile m=Missiles.get(i);m.draw(g);for(int i=0;i<explodes.size();i+)Explode e=explodes.get(i);e.draw(g);w.draw(g);if(drawblood&&b.getRec

6、t().intersects(myTank.getRect()myTank.livelength=30;drawblood=false;if(drawblood)b.drawBlood(g);public void update(Graphics g) if(offScreenImage = null) offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);Graphics gOffScreen = offScreenImage.getGraphics();Color c = gOffScreen.getColor();gOffS

7、creen.setColor(Color.BLUE);gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);gOffScreen.setColor(c);paint(gOffScreen);g.drawImage(offScreenImage, 0, 0, null);public void lauchFrame() int initTankCount=Integer.parseInt(PropertyMgr.getProperty("initTankCount");for(int i=0;i<initTankCount

8、;i+)tanks.add(new Tank(50+40*(i+1),50,false,this);this.setSize(GAME_WIDTH, GAME_HEIGHT);this.setTitle("TankWar");this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););this.setResizable(false);this.setBackground(Color.GREEN);this.addKeyListener

9、(new KeyMonitor();setVisible(true);new Thread(new PaintThread().start();public static void main(String args) TankClient tc = new TankClient();tc.lauchFrame();private class PaintThread implements Runnable public void run() while(true) repaint();try Thread.sleep(50); catch (InterruptedException e) e.p

10、rintStackTrace();private class KeyMonitor extends KeyAdapter public void keyReleased(KeyEvent e) myTank.keyReleased(e);public void keyPressed(KeyEvent e) myTank.keyPressed(e);類bloodimport java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;public class Blood public void drawBlood(Graph

11、ics g)g.setColor(Color.RED);g.fillRect(400, 400, 10, 10);public Rectangle getRect()return new Rectangle(400,400,10,10);public enum Direction L,LU,U,RU,R,RD,D,LD,STOP類explodeimport java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.util.ArrayList;import java.util.List;public

12、class Explode int x,y;int step=0;Tank t;private boolean init=false;TankClient tc=null;private static Toolkit tk=Toolkit.getDefaultToolkit();private static Image images=null;staticimages=new Image tk.getImage(Explode.class.getClassLoader().getResource("images/1.gif"),tk.getImage(Explode.cla

13、ss.getClassLoader().getResource("images/2.gif"),tk.getImage(Explode.class.getClassLoader().getResource("images/3.gif"),tk.getImage(Explode.class.getClassLoader().getResource("images/4.gif"),tk.getImage(Explode.class.getClassLoader().getResource("images/5.gif")

14、,tk.getImage(Explode.class.getClassLoader().getResource("images/6.gif"),tk.getImage(Explode.class.getClassLoader().getResource("images/7.gif"),tk.getImage(Explode.class.getClassLoader().getResource("images/8.gif"),tk.getImage(Explode.class.getClassLoader().getResource(&

15、quot;images/9.gif"),tk.getImage(Explode.class.getClassLoader().getResource("images/0.gif");Explode(int x,int y,TankClient tc,Tank t)this.x=x;this.y=y;this.tc=tc;this.t=t;public void draw(Graphics g)if(!init)g.drawImage(images1,-100,-100,null);init=true;if(step=images.length)tc.explode

16、s.remove(this);step=0;tc.tanks.remove(t);g.drawImage(imagesstep, x, y, null);step+;類missileimport java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.Toolkit;import java.util.HashMap;import java.util.List;import java.util.Map;public class Missile public static final int

17、 XSPEED=10;public static final int YSPEED=10;int x,y;TankClient tc=null;Direction dir=null;Tank t;Wall w=new Wall();public boolean well=true;private int oldx,oldy;public static final int WIDTH=20;public static final int HEIGHT=20;public static Toolkit tk=Toolkit.getDefaultToolkit();private static Im

18、age missileimages=null;private static Map<String,Image> imgs=new HashMap<String,Image>();static missileimages=new Imagetk.getImage(Missile.class.getClassLoader().getResource("images/missileL.gif"),tk.getImage(Missile.class.getClassLoader().getResource("images/missileLU.gif

19、"),tk.getImage(Missile.class.getClassLoader().getResource("images/missileU.gif"),tk.getImage(Missile.class.getClassLoader().getResource("images/missileRU.gif"),tk.getImage(Missile.class.getClassLoader().getResource("images/missileR.gif"),tk.getImage(Missile.class.g

20、etClassLoader().getResource("images/missileRD.gif"),tk.getImage(Missile.class.getClassLoader().getResource("images/missileD.gif"),tk.getImage(Missile.class.getClassLoader().getResource("images/missileLD.gif"),;imgs.put("L", missileimages0);imgs.put("LU&qu

21、ot;, missileimages1);imgs.put("U", missileimages2);imgs.put("RU", missileimages3);imgs.put("R", missileimages4);imgs.put("RD", missileimages5);imgs.put("D", missileimages6);imgs.put("LD", missileimages7);public Missile(int x,int y,Direction

22、 dir,TankClient tc)this.x=x;this.y=y;this.dir=dir;this.tc=tc;public Missile(int x,int y,Direction dir,boolean well,TankClient tc)this.x=x;this.y=y;this.dir=dir;this.tc=tc;this.well=well;public void draw(Graphics g)switch(dir)case L:g.drawImage(imgs.get("L"), x, y, null);break;case LU:g.dra

23、wImage(imgs.get("LU"), x, y, null);break;case U:g.drawImage(imgs.get("U"), x, y, null);break;case RU:g.drawImage(imgs.get("RU"), x, y, null);break;case R:g.drawImage(imgs.get("R"), x, y, null);break;case RD:g.drawImage(imgs.get("RD"), x, y, null);bre

24、ak;case D:g.drawImage(imgs.get("D"), x, y, null);break;case LD:g.drawImage(imgs.get("LD"), x, y, null);break;stay(x,y);move(); private void stay(int x2, int y2) this.oldx=x2; this.oldy=y2;Rectangle getRct()return new Rectangle(x,y,WIDTH,HEIGHT);private void move() switch(dir)case

25、 L:x -= XSPEED;break;case LU:x -= XSPEED;y -= YSPEED;break;case U:y -= YSPEED;break;case RU:x += XSPEED;y -= YSPEED;break;case R:x += XSPEED;break;case RD:x += XSPEED;y += YSPEED;break;case D:y += YSPEED;break;case LD:x -= XSPEED;y += YSPEED;break;case STOP:break;if(x<0|y<0|y>TankClient.GAM

26、E_HEIGHT|x>TankClient.GAME_WIDTH)tc.Missiles.remove(this);if(!well&&hitmytank(tc.myTank)tc.myTank.livelength=tc.myTank.livelength-5;if(tc.myTank.livelength=0)tc.mylive=false;tc.Missiles.remove(this);if(well&&hitTanks(tc.tanks)tc.explodes.add(new Explode(x,y,tc,t);tc.Missiles.remov

27、e(this);if(this.getRct().intersects(w.getRect1()|this.getRct().intersects(w.getRect2()tc.Missiles.remove(this);public boolean hitTank(Tank t)this.t=t;if(this.getRct().intersects(t.getRect()return true;return false;public boolean hitTanks(List<Tank> tanks)for(int i=0;i<tanks.size();i+)if(hit

28、Tank(tanks.get(i)return true;return false;public boolean hitmytank(Tank t)if(t.getRect().intersects(this.getRct()return true;elsereturn false;類propertymgrimport java.io.IOException;import java.util.Properties;public class PropertyMgr static Properties props=new Properties();static tryprops.load(Prop

29、ertyMgr.class.getClassLoader().getResourceAsStream("perties");catch(IOException e)e.printStackTrace();private PropertyMgr();public static String getProperty(String key)return props.getProperty(key);類tankimport java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import

30、 java.awt.Toolkit;import java.awt.event.KeyEvent;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;public class Tank public static final int XSPEED = 5;public static final int YSPEED = 5;TankClient tc;private int x, y;public boolean good=true;private boolean

31、 bL=false, bU=false, bR=false, bD = false;Random r=new Random();private int step; private Direction dir = Direction.STOP;private Direction ptDir = Direction.D;Missile m=null;Wall w=new Wall();int oldx,oldy;public int livelength=30;private static Toolkit tk = Toolkit.getDefaultToolkit();private stati

32、c Image tankImages = null;private static Map<String, Image> imgs = new HashMap<String, Image>();static tankImages = new Image tk.getImage(Tank.class.getClassLoader().getResource("images/tankL.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankLU.gif"

33、;),tk.getImage(Tank.class.getClassLoader().getResource("images/tankU.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankRU.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankR.gif"),tk.getImage(Tank.class.getClassLoader().getResourc

34、e("images/tankRD.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankD.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankLD.gif");imgs.put("L", tankImages0);imgs.put("LU", tankImages1);imgs.put("U", tan

35、kImages2);imgs.put("RU", tankImages3);imgs.put("R", tankImages4);imgs.put("RD", tankImages5);imgs.put("D", tankImages6);imgs.put("LD", tankImages7);public static final int WIDTH = 30;public static final int HEIGHT = 30;public Tank(int x, int y,TankCl

36、ient tc) this.x = x;this.y = y;this.tc=tc;public Tank(int x,int y,boolean good,TankClient tc)this.good=good;this.x=x;this.y=y;this.tc=tc;public void draw(Graphics g) switch(ptDir) case L:g.drawImage(imgs.get("L"), x, y, null);break;case LU:g.drawImage(imgs.get("LU"), x, y, null);

37、break;case U:g.drawImage(imgs.get("U"), x, y, null);break;case RU:g.drawImage(imgs.get("RU"), x, y, null);break;case R:g.drawImage(imgs.get("R"), x, y, null);break;case RD:g.drawImage(imgs.get("RD"), x, y, null);break;case D:g.drawImage(imgs.get("D")

38、, x, y, null);break;case LD:g.drawImage(imgs.get("LD"), x, y, null);break;stay(x,y);move(g);private void stay(int x2, int y2) this.oldx=x2;this.oldy=y2;void move(Graphics g) switch(dir) case L:x -= XSPEED;break;case LU:x -= XSPEED;y -= YSPEED;break;case U:y -= YSPEED;break;case RU:x += XSP

39、EED;y -= YSPEED;break;case R:x += XSPEED;break;case RD:x += XSPEED;y += YSPEED;break;case D:y += YSPEED;break;case LD:x -= XSPEED;y += YSPEED;break;case STOP:break;if(this.dir != Direction.STOP) this.ptDir = this.dir;if(this.getRect().intersects(w.getRect1()|this.getRect().intersects(w.getRect2()thi

40、s.x=oldx;this.y=oldy;if(x<0) x=0;if(y<30) y=30;if(x+Tank.WIDTH>TankClient.GAME_WIDTH) x=TankClient.GAME_WIDTH-Tank.WIDTH;if(y+Tank.HEIGHT>TankClient.GAME_HEIGHT) y=TankClient.GAME_HEIGHT-Tank.HEIGHT;if(!good)Direction dirs=Direction.values();if(step=0)step=r.nextInt(12)+3;int rn=r.nextIn

41、t(dirs.length);dir=dirsrn;dfire(dir);step-;if(hittanks()x=this.oldx;y=this.oldy;if(good)g.drawRect(x, y-10, 30, 10);g.fillRect(x, y-10, livelength, 10);public Rectangle getRect () return new Rectangle(x,y,WIDTH,HEIGHT);public void keyPressed(KeyEvent e) int key = e.getKeyCode();switch(key) case KeyE

42、vent.VK_LEFT :bL = true;break;case KeyEvent.VK_UP :bU = true;break;case KeyEvent.VK_RIGHT :bR = true;break;case KeyEvent.VK_DOWN :bD = true;break;locateDirection();private void dfire(Direction dir)int x=this.x+WIDTH/2;int y=this.y+HEIGHT/2;tc.Missiles.add(new Missile(x,y,dir,false,tc);private void f

43、ire() int x=this.x+WIDTH/2;int y=this.y+HEIGHT/2;tc.Missiles.add(new Missile(x,y,ptDir,tc);public void fire(Direction dir)int x=this.x+WIDTH/2;int y=this.y+HEIGHT/2;tc.Missiles.add(new Missile(x,y,dir,tc);void locateDirection() if(bL && !bU && !bR && !bD) dir = Direction.L;else if(bL && bU && !bR && !bD) dir = Direction.LU;else if(!bL && bU && !bR && !bD) dir = Direction.U;else if(!bL && bU && bR && !bD) dir = Direction.RU;else if(!bL && !bU && bR && !bD) dir = Direction.

溫馨提示

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

評論

0/150

提交評論