功能:然坦克向八个方向行走。(以前只有四个方向)。
内容:添加代表方向的量(枚举)
添加记录按键状态的布尔量
根据按键状态确定坦克方向
根据方向进行下一步的移动(move方法)
以下修改的全为tank类中的代码:
1.为了方便改变移动速度:常量
public static final int XSPEED =5;
public static final int YSPEED =5;
2.添加记录按键状态的布尔量
private boolean bL=false,bU=false,bD=false,bR=false;
3.注意有sotp
enum Direction {L,LU,U,RU,R,RD,D,LD,STOP};
private Direction dir = Direction.STOP;
4.按键监听方法(添加记录按键状态的布尔量)
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;
}
}
5.在 keyPressed 方法中调用 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;
}
6.在draw方法里面调用move()
void move(){
switch(dir){
case L: x -= XSPEED;break;
case LU: x -= XSPEED; y -= XSPEED;break;
case U: y -= XSPEED;break;
case RU: x += XSPEED;y -= XSPEED;break;
case R: x += XSPEED;break;
case RD: x += XSPEED;y += XSPEED;break;
case D: y += XSPEED;break;
case LD: x -= XSPEED;y += XSPEED;break;
}
}
总结:控制8个方向的移动,枚举出8个量来代表,然后keypress方法监听四个方向的变化(设置布尔变量),locateDirection方法来判断移动方向,传递给move(),通过判断方向来控制移动,传给draw方
法,在界面画出。