java 编程炮弹_为了解决坦克停下也能打出炮弹的问题—画出炮筒

[java]代码库import java.awt.*;

import java.awt.event.*;

public class TankClient extends Frame {

public static final int GAME_WIDTH = 800;

public static final int GAME_HEIGHT = 600;

Tank myTank = new Tank(50, 50, this);

Missile m = null;

Image offScreenImage = null;

public void paint(Graphics g) {

if(m!=null) m.draw(g);

myTank.draw(g);

}

public void update(Graphics g) {

if(offScreenImage == null) {

offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);

}

Graphics gOffScreen = offScreenImage.getGraphics();

Color c = gOffScreen.getColor();

gOffScreen.setColor(Color.GREEN);

gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);

gOffScreen.setColor(c);

paint(gOffScreen);

g.drawImage(offScreenImage, 0, 0, null);

}

public void lauchFrame() {

//this.setLocation(400, 300);

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(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.printStackTrace();

}

}

}

}

private class KeyMonitor extends KeyAdapter {

public void keyReleased(KeyEvent e) {

myTank.keyReleased(e);

}

public void keyPressed(KeyEvent e) {

myTank.keyPressed(e);

}

}

}

import java.awt.*;

import java.awt.event.*;

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;

private int x, y;

private boolean bL=false, bU=false, bR=false, bD = 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 -= 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(this.dir != Direction.STOP) {

this.ptDir = this.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();

}

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 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();

}

public Missile fire() {

int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;

int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;

Missile m = new Missile(x, y, ptDir);

return m;

}

}

import java.awt.*;

public class Missile {

public static final int XSPEED = 10;

public static final int YSPEED = 10;

public static final int WIDTH = 10;

public static final int HEIGHT = 10;

int x, y;

Tank.Direction dir;

public Missile(int x, int y, Tank.Direction dir) {

this.x = x;

this.y = y;

this.dir = dir;

}

public void draw(Graphics g) {

Color c = g.getColor();

g.setColor(Color.BLACK);

g.fillOval(x, y, WIDTH, HEIGHT);

g.setColor(c);

move();

}

private 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;

break;

case RD:

x += XSPEED;

y += YSPEED;

break;

case D:

y += YSPEED;

break;

case LD:

x -= XSPEED;

y += YSPEED;

break;

case STOP:

break;

}

}

}

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值