版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一个类:package 坦克;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;import java.util.List;import 坦克.Tank.Direction;/10public class Missile public static final int WIDTH = 10;public static final int HEIGHT = 10;public static final int XSPEED = 10;public static final int YSPEED =
2、10;private int x;private int y;Tank.Direction dir;/14private boolean mlive=true;TankClient tc;/14/19private boolean mgood=true;public Missile(int x, int y, Tank.Direction dir,TankClient tc,boolean mgood) this.x = x;this.y = y;this.dir = dir;this.tc=tc;this.mgood=mgood;public void darw (Graphics g)if
3、(!mlive)return;/炮弹死亡就不画了Color c=g.getColor();g.setColor(Color.red);g.fillOval(x, y, WIDTH, HEIGHT);g.setColor(c);/g.setColor(Color.black);move();void move() switch(dir)case 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;b
4、reak;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 | x>TankClient.GAME_WIDTH | y>TankClient.GAME_HEIGHT)mlive=false;/14 炮弹死亡/14 当炮弹死亡就从容器中去掉tc.missiles.remove(this);/16public Rectangle getRect()return new Rectangle
5、(x, y, WIDTH, HEIGHT);public boolean hitTank(Tank tk)if(this.getRect().intersects(tk.getRect() &&tk.isTklive()&&this.mgood!=tk.isTkgood()/坦克死了,子弹也要死this.mlive=false;tc.missiles.remove(this);/炮弹死亡从容其中去掉tk.setTklive(false);return false;/18public boolean hitTanks(List<Tank> tanks)
6、for(Tank tk:tanks)if(hitTank(tk)return true;return false;第二个类:package 坦克;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Random;public class Tank private int x;private int y;public static final
7、int WIDTH=30;public static final int HEIGHT=30;public static final int XSPEED=5;public static final int YSPEED=5;/8private boolean bL=false,bU=false,bR=false,bD=false;enum DirectionL,LU,U,RU,R,RD,D,LD,STOP;Direction dir=Direction.STOP;/默认坦克停止/11TankClient tc;/12 Tank 类增加新的属性ptDirDirection ptDir=Dire
8、ction.L;/15private boolean tkgood=true; /16private boolean tklive=true;/19static Random r=new Random();/19int step=r.nextInt(10)+3;public Tank(int x, int y) this.x = x;this.y = y;/19public Tank(int x, int y,TankClient tc,boolean tkgood,Tank.Direction dir) this.x = x;this.y = y;this.tc=tc;this.tkgood
9、=tkgood;this.dir=dir;/19public Tank(int x, int y,TankClient tc,boolean tkgood) this.x = x;this.y = y;this.tc=tc;this.tkgood=tkgood;public void darw (Graphics g)if(!tklive) return;/坦克死了也不画了Color c=g.getColor();if(tkgood)g.setColor(Color.red);elseg.setColor(Color.blue);g.fillOval(x, y, WIDTH, HEIGHT);
10、g.setColor(c);/12 将炮筒用直线的形式表现出来switch(ptDir)case L:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x, this.y+Tank.HEIGHT/2);break;case LU:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x, this.y);break;case U:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x+Tank.WI
11、DTH/2, this.y);break;case RU:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x+Tank.WIDTH, this.y);break;case R:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x+Tank.WIDTH, this.y+Tank.HEIGHT/2);break;case RD:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x+Tank.WI
12、DTH, this.y+Tank.HEIGHT);break;case D:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT);break;case LD:g.drawLine(this.x+Tank.WIDTH/2, this.y+Tank.HEIGHT/2, this.x, this.y+Tank.HEIGHT);break;move();g.setColor(c);/8void move() switch(dir)case L:x-=XSPEED;br
13、eak;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;/12 每次move 后根据Tank 新的方向确定炮筒方向if(this.dir!=Direction.STOP)this.ptDir=this.di
14、r;/防止坦克出界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;/19if(!tkgood)/敌军坦克if(step=0)Directiondirs=Direction.values();int rv=r.nextInt(dirs.length);this.dir=dirs
15、rv;step=r.nextInt(10)+3;step-;/敌人发子弹if(r.nextInt(40)>38)fire();/6键盘监视器public void keyReleased(KeyEvent e)int key=e.getKeyCode();/得到键盘按那个键的askll码switch(key)case KeyEvent.VK_LEFT:bL=false; break;case KeyEvent.VK_RIGHT:bR=false;break;case KeyEvent.VK_UP:bU=false;break;case KeyEvent.VK_DOWN:bD=false;
16、break;locationDirecttion();public void keyPressed(KeyEvent e) int key=e.getKeyCode();/得到键盘按那个键的askll码switch(key)/11case KeyEvent.VK_CONTROL:fire();break;case KeyEvent.VK_LEFT:bL=true; break;case KeyEvent.VK_RIGHT:bR=true;break;case KeyEvent.VK_UP:bU=true;break;case KeyEvent.VK_DOWN:bD=true;break;loc
17、ationDirecttion();/11 private Missile fire() if(!this.tklive)return null; int x=this.x+Tank.WIDTH/2-Missile.WIDTH/2; int y=this.y+Tank.HEIGHT/2-Missile.HEIGHT/2; /12Missile m=new Missile(x, y, ptDir,tc,tkgood);tc.missiles.add(m);return m; /8 void locationDirecttion() if(bL&&!bU&&!bR&
18、amp;&!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.R;else if
19、(!bL&&!bU&&bR&&bD)dir=Direction.RD;else if(!bL&&!bU&&!bR&&bD)dir=Direction.D;else if(bL&&!bU&&!bR&&bD)dir=Direction.LD;else if(!bL&&!bU&&!bR&&!bD)dir=Direction.STOP;/16public Rectangle getRect()return new
20、 Rectangle(x, y, WIDTH, HEIGHT);public boolean isTklive() return tklive;public void setTklive(boolean tklive) this.tklive = tklive;public boolean isTkgood() return tkgood;public void setTkgood(boolean tkgood) this.tkgood = tkgood;但三个类:package 坦克;import java.awt.event.KeyAdapter;import java.awt.event
21、.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.List;import java.util.ArrayList;import javax.swing.text.AbstractDocument.BranchElement;import java.awt.List;impor
22、t java.awt.List;public class TankClient extends Frame/5 public static final int WIDTH=30; public static final int HEIGHT=30; public static final int GAME_WIDTH=800; public static final int GAME_HEIGHT=600; /4int x=50,y=50;/7建个坦克 /11Tank mytank=new Tank(x, y,this,true);/18java.util.List<Tank> d
23、tanks=new ArrayList<Tank>();/(150, y,this,false); /3/11 /13/java.util.List<Missile>missiles=new ArrayList<Missile>();java.util.List<Missile> missiles=new ArrayList<Missile>();Missile missile=null;public void paint(Graphics g) /*if(missile!=null)missile.darw(g);*/for (in
24、t i = 0; i < missiles.size(); i+) Missile m=missiles.get(i);/ m.hitTank(dtank);/16 m.hitTanks(dtanks); m.hitTank(mytank); m.darw(g);mytank.darw(g);for (int i = 0; i <dtanks.size(); i+) Tank dtank=dtanks.get(i);dtank.darw(g); /4:加入缓冲 图片技术改变图片显示效果Image image=null; Overridepublic void update(Grap
25、hics g) if(image=null) image=this.createImage(800, 600); Graphics imageg=image.getGraphics(); Color c=imageg.getColor(); imageg.setColor(Color.BLACK); imageg.clearRect(0, 0, GAME_WIDTH, GAME_HEIGHT); paint(imageg);/在图片上画 imageg.setColor(c); g.drawImage(image, 0, 0, null);/g是窗口的笔,在窗口上面画public TankClient() /18for (int i = 1; i <=20; i+) dtanks.add(new Tank(x+30*2*i,y,this,false,Tank.Direction.RD);this.setTitle("坦克大战");this.setSize(GAME_WIDTH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州市人民医院社区健康诊断能力考核
- 南昌市人民医院不同部位结石处理考核
- 盐城市人民医院内镜诊疗技术考核
- 丽水市人民医院鼻部术后护理考核
- 南通市中医院血液储存发放与运输管理实操考核
- 莆田市中医院鼻部射频消融术考核
- 南昌市人民医院放射免疫技术考核
- 烟台市人民医院甲乳外科护士晋级考核
- 新余市人民医院碎石中心年度质量评估
- 杭州市人民医院医疗质量数据分析决策考核
- 2025年公安基础知识题库及答案
- 2025江苏海氧深冷科技有限公司招聘工作人员9人考试模拟试题及答案解析
- 广东省广州市花都区2024-2025学年上学期九年级期中考试数学试题(含答案)
- 动态心电图简介及操作课件
- 血液透析充分性的评估与管理
- 黑龙江专升本植物生理练习题
- 腹膜透析感染诊治指南
- GB/T 4857.4-2008包装运输包装件基本试验第4部分:采用压力试验机进行的抗压和堆码试验方法
- 《环境保护法》课件
- 美国波多里奇质量奖课件
- 消防工程检测公司质量管理体系
评论
0/150
提交评论