import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TankClient extends Frame{
public final int FRAME_HEIGHT = 600;
public final int FRAME_WIDTH = 700;
public final int TANK_SIZE = 30;
private static Toolkit tk = Toolkit.getDefaultToolkit();
Image image = tk.getImage(TankClient.class.getClassLoader().getResource("Image/tankU.gif"));
Image offScreenImage = null;
public int x=20,y=40;
public static void main(String[] args) {
new TankClient().lauchFrame();
}
public void lauchFrame(){
setBounds(300, 100, FRAME_WIDTH, FRAME_HEIGHT);
setBackground(Color.black);
setResizable(false);
addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
addKeyListener(new KeyMonitor());
new Thread(new PaintThread()).start();
}
@Override
public void paint(Graphics g) {
//启动Frame的时候会自动调用该paint()方法
g.drawImage(image, x, y, null);
}
@Override
public void update(Graphics g) {
if (offScreenImage == null) {
offScreenImage = this.createImage(FRAME_WIDTH, FRAME_HEIGHT);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c=gOffScreen.getColor();
gOffScreen.setColor(Color.black);
gOffScreen.fillRect(0, 0, FRAME_WIDTH,FRAME_HEIGHT);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage,0,0,null);
}
private class PaintThread implements Runnable {
public void run() {
do {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (true);
}
}
private class KeyMonitor extends KeyAdapter{
@Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key){ case KeyEvent.VK_W: image = tk.getImage(TankClient.class.getClassLoader().getResource("Image/tankU.gif")); y-=5; if(y<=15){ y=15; } break; case KeyEvent.VK_S: y+=5; if(y >= 555){ y=555; } image = tk.getImage(TankClient.class.getClassLoader().getResource("Image/tankD.gif")); break; case KeyEvent.VK_A: x-=5; if(x<=-5){ x=-5; } image = tk.getImage(TankClient.class.getClassLoader().getResource("Image/tankL.gif")); break; case KeyEvent.VK_D: x+=5; if(x>=655){ x=655; } image = tk.getImage(TankClient.class.getClassLoader().getResource("Image/tankR.gif")); break; } } } }