package com.google.www;import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;public class TankClient extends Frame {
public static final int GAME_WIDTH = 800;
public static final int GAME_HEIGHT = 600;
int x = 50, y = 50;
Image offScreenImage = null;
Tank myTank = new Tank(50, 50, this);
List<Missile> Missiles = new ArrayList<Missile>();
public void paint(Graphics g) {
g.drawString("missiles count:" + Missiles.size(), 10, 50);
for(int i=0;i<Missiles.size();i++) {
Missile m = Missiles.get(i);
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 (By:麦麦)");
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.event.*;
import java.util.List;
import java.util.ArrayList;public class TankClient extends Frame {
public static final int GAME_WIDTH = 800;
public static final int GAME_HEIGHT = 600;
int x = 50, y = 50;
Image offScreenImage = null;
Tank myTank = new Tank(50, 50, this);
List<Missile> Missiles = new ArrayList<Missile>();
public void paint(Graphics g) {
g.drawString("missiles count:" + Missiles.size(), 10, 50);
for(int i=0;i<Missiles.size();i++) {
Missile m = Missiles.get(i);
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 (By:麦麦)");
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.event.KeyEvent;public class Tank {
private int x,y;
private static final int XSPEED = 5;
private static final int YSPEED = 5;
private static final int WIGHT = 40;
private static final int HIGHT = 40;
enum direction {U,RU,R,RD,D,LD,L,LU,STOP};
private boolean bU = false,bD = false, bL = false, bR = false;
direction dir = direction.STOP;
direction ptdir = direction.D;
TankClient tc;
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, WIGHT, HIGHT);
g.setColor(c);
switch( ptdir){
case U:
g.drawLine(x +Tank.WIGHT/2, y+Tank.HIGHT/2, x +Tank.WIGHT/2, y);
break;
case RU:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x +WIGHT, y);
break;
case R:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x + Tank.WIGHT, y + Tank.HIGHT/2);
break;
case RD:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x +Tank.WIGHT, y + Tank.HIGHT);
break;
case D:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x +Tank.WIGHT/2, y+Tank.HIGHT);
break;
case LD:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x , y + Tank.HIGHT);
break;
case L:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x , y+Tank.HIGHT/2);
break;
case LU:
g.drawLine(x +Tank.HIGHT/2, y+Tank.WIGHT/2, x , y);
break;
}
move();
}
void move () {
switch( dir){
case U:
y -=YSPEED;break;
case RU:
y -= YSPEED;
x += XSPEED;
break;
case R:
x += XSPEED;
break;
case RD:
y += YSPEED;
x += XSPEED;
break;
case D:
y += YSPEED;
break;
case LD:
y += YSPEED;
x -= XSPEED;
break;
case L:
x -= XSPEED;
break;
case LU:
y -= YSPEED;
x -= XSPEED;
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_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;
}
Direction();
}
public void Direction() {
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_CONTROL:
fire(); break;
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; break;
}
Direction();
} public Missile fire() {
int x = this.x + Tank.WIGHT/2 - Missile.WIGHT/2;
int y = this.y + Tank.HIGHT/2 - Missile.HIGHT /2;
Missile m = new Missile(x, y, ptdir);
tc.Missiles.add(m); return m;
}
}
int x,y;
Tank.direction dir;
public static final int XSPEED = 5;
public static final int YSPEED = 5;
public static final int WIGHT = 10;
public static final int HIGHT = 10;
public Missile(int x, int y, 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,WIGHT, HIGHT);
g.setColor(c);
move();
}
private void move() {
switch( dir){
case U:
y -=YSPEED;break;
case RU:
y -= YSPEED;
x += XSPEED;
break;
case R:
x += XSPEED;
break;
case RD:
y += YSPEED;
x += XSPEED;
break;
case D:
y += YSPEED;
break;
case LD:
y += YSPEED;
x -= XSPEED;
break;
case L:
x -= XSPEED;
break;
case LU:
y -= YSPEED;
x -= XSPEED;
break;
} }
}
擦,我专门下载了jre和eclipse帮你调试。
哈哈哈!(原谅我笑了)。你这代码没有问题,你说的问题是因为Tank和Missile的速度一样,同时移动时,Missile被Tank挡住了,你改一下Missile的速度就好了。
键盘事件没有响应,
键盘事件响应了,但是fire()函数有问题,
fire没有问题,那就是paint函数的问题。
一层层查,就好了。