
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); |
|
Image offScreenImage = null; |
|
public void paint(Graphics g) { |
myTank.draw(g);//理解一下面向对象 |
} |
|
public void update(Graphics g) { |
if(offScreenImage == null) { |
offScreenImage = this.createImage(GAME_WIDTH, GAME_WIDTH); |
} |
Graphics gOffScreen = offScreenImage.getGraphics(); |
Color c = gOffScreen.getColor(); |
gOffScreen.setColor(Color.GREEN); |
gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_WIDTH); |
gOffScreen.setColor(c); |
paint(gOffScreen); |
g.drawImage(offScreenImage, 0, 0, null); |
} |
public void lauchFrame() { |
this.setLocation(400, 300); |
this.setSize(GAME_WIDTH, GAME_WIDTH); |
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) { |
System.out.println("ok"); |
|
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; |
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(); |
// if(key==KeyEvent.VK_RIGHT) |
// { |
// x +=5; |
// } |
|
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() ; |
|
} |
|
} |




by: 发表于:2017-07-07 15:45:16 顶(0) | 踩(0) 回复
??
回复评论