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();
}
}
解决方案 »
- 将数据库内容写出到.txt文件中,为什么我这样写不进去呢,文件总是空??
- java swing中jtextfield中如何控制键盘的输入
- Java 方法声明异常的问题
- 如何动态的添加和删除控件?
- JAVA中可不可获得当前电脑的网络带宽阿?
- 我是java新手,请看下面这个程序中goal是什么东东?为什么没有定义还能够执行啊?
- 不同工程间的方法相互调用的问题!!急!!!
- 我对JAVA还是没感觉,能不能举几个JAVA开发的大工程的例子
- 关于Together和JProbe的上传通知
- 如何在JRE1.2里使用JAR包?
- 为什么char[]不用遍历也能显示出数组内容,但int[]和String[]却显示的是地址值
- RESTful API 加密问题
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);
}
}
}
public void paint(Graphics g) {
a.draw(g);
}