java项目之——坦克大战12

    xiaoxiao2025-03-12  15

    解决坦克停下来也可以打出炮弹:画出炮筒,在fire中把子弹方向给炮筒

    1.创建坦克炮筒常量并初始化:

    private Direction ptDir = Direction.D;2.在draw方法里面画出炮筒 public void draw(Graphics g) { Color c = g.getColor(); g.setColor(Color.RED); g.fillOval(x, y, WIDTH, HEIGHT); g.setColor(c); switch(ptDir){ case L: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT/2);break; case LU:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y);break; case U: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y);break; case RU:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y);break; case R: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y+Tank.HEIGHT/2);break; case RD:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y+Tank.HEIGHT);break; case D: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y+Tank.HEIGHT);break; case LD:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT);break; } move(); }3,虽然画出了炮筒,但是炮筒方向不随坦克运动改变,所以有以下代码 if(this.dir!=Direction.STOP){ this.ptDir = dir; }4.在fire方法中修改dir为ptDir public Missile fire(){ int x=this.x+Tank.WIDTH/2-Missile.HEIGHT/2; int y=this.y-Missile.WIDTH/2+Tank.HEIGHT/2; Missile m = new Missile(x, y, ptDir); return m; } 总结:炮筒的创建是很有必要的,炮筒的方向是通过坦克move改变的,在fire方法中传ptDIR实现了炮筒的方向就是子弹打出的方向。

    下面是坦克类代码:

    public class Tank { public static final int XSPEED =5; public static final int YSPEED =5; public static final int WIDTH =30; public static final int HEIGHT =30; TankClient tc; int x,y; private boolean bL=false,bU=false,bD=false,bR=false; enum Direction {L,LU,U,RU,R,RD,D,LD,STOP}; private Direction dir = Direction.STOP; private Direction ptDir = Direction.D; public Tank(int x,int y){ this.x=x; this.y=y; } public Tank(int x,int y,TankClient tc){ this(x,y); this.tc=tc; } public void draw(Graphics g) { Color c = g.getColor(); g.setColor(Color.RED); g.fillOval(x, y, WIDTH, HEIGHT); g.setColor(c); switch(ptDir){ case L: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT/2);break; case LU:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y);break; case U: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y);break; case RU:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y);break; case R: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y+Tank.HEIGHT/2);break; case RD:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y+Tank.HEIGHT);break; case D: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y+Tank.HEIGHT);break; case LD:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT);break; } move(); } void move(){ switch(dir){ case L: x -= XSPEED;break; case LU: x -= XSPEED; y -= XSPEED;break; case U: y -= XSPEED;break; case RU: x += XSPEED;y -= XSPEED;break; case R: x += XSPEED;break; case RD: x += XSPEED;y += XSPEED;break; case D: y += XSPEED;break; case LD: x -= XSPEED;y += XSPEED;break; case STOP: break; } if(this.dir!=Direction.STOP){ this.ptDir = dir; } } public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key){ case KeyEvent.VK_CONTROL: tc.m = fire(); break; case KeyEvent.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(); } public void keyReleased(KeyEvent e) { int key = e.getKeyCode(); switch(key){ case KeyEvent.VK_LEFT: bL=false; break; case KeyEvent.VK_UP: bU=false; break; case KeyEvent.VK_RIGHT: bR=false; break; case KeyEvent.VK_DOWN: bD=false; break; } locateDirection(); } 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.R; else if(!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; } public Missile fire(){ int x=this.x+Tank.WIDTH/2-Missile.HEIGHT/2; int y=this.y-Missile.WIDTH/2+Tank.HEIGHT/2; Missile m = new Missile(x, y, ptDir); return m; } }

    转载请注明原文地址: https://ju.6miu.com/read-1296969.html
    最新回复(0)