import java.awt.*;
import java.awt.event.*;public class Tank {
public static final int XSPEED = 5;
public static final int YSPEED = 5;

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; public Tank(int x, int y) {
this.x = x;
this.y = y;
}

public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 30, 30);
g.setColor(c);

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

public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
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();
}
}

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import java.io.IOException;
    public class FrameS extends Frame{
    Image offScreenImage = null;
    Tank a = new Tank(50,50);
    private final int HEIGTH = 800;
    private final int WIDTH = 600;
    public static void main(String args[]){
    new FrameS().launFrame();
    }
    public void update(Graphics g) {
    if(offScreenImage == null){
    offScreenImage = this.createImage(HEIGTH,WIDTH);
    }
    Graphics Bi = offScreenImage.getGraphics();
    Color c = Bi.getColor();
    Bi.setColor(Color.WHITE);
    Bi.fillRect(0,0,HEIGTH,WIDTH);
    Bi.setColor(c);
    paint(Bi);
    g.drawImage(offScreenImage,0,0,null);
    }
    public void launFrame(){
    setBounds(200,200,HEIGTH,WIDTH);
    this.addKeyListener(new KeyMonitor());
    setVisible(true);
    setTitle("Tank1");
    setResizable(false);
    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent W) {
    System.exit(0);
    };
    });
    new Thread(new printThread()).start();
     
    }
    public void paint(Graphics g){
    a.drawing(g);
    }



    private class printThread implements Runnable{ public void run() {
    while(true){
    repaint();
    try {
    Thread.sleep(10);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }

    private class KeyMonitor extends KeyAdapter{ public void keyPressed(KeyEvent e) {
    a.keyPressed(e);
    }
    }
    }
      

  2.   

    改成这个,2楼里面的
    public void paint(Graphics g) {
    a.draw(g);
    }
      

  3.   

    如果是粘贴复制别人的项目大概可能原因是你没有链接外部jar包