马士兵的坦克大战关于方向的疑惑
class Tank{
	public static final int XSPEED=5;
	public static final int YSPEED=5;
	private int x,y;
	private Boolean BU=false,BR=false,BD=false,BL=false;
	enum Direction{L,LU,U,RU,R,RD,D,LD,STOP};
	Direction dir = Direction.STOP;
	public Tank(int x,int y){
		this.x=x;
		this.y=y;
	}
	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;
		}
	}
	void locateDirection(){
		if(!BU&&!BR&&!BD&&BL) dir=Direction.L;
	        else if(BU&&!BR&&!BD&&BL) dir=Direction.LU;
		else if(BU&&!BR&&!BD&&!BL) dir=Direction.U;
		else if(BU&&BR&&!BD&&!BL) dir=Direction.RU;
		else if(!BU&&BR&&!BD&&!BL) dir=Direction.R;
		else if(!BU&&BR&&BD&&!BL) dir=Direction.RD;
		else if(!BU&&!BR&&BD&&!BL) dir=Direction.D;
		else if(!BU&&!BR&&BD&&BL) dir=Direction.LD;
	}
	public void draw(Graphics g){
		Color c = g.getColor();
		g.setColor(Color.RED);
		g.fillOval(x,y,30,30);
		g.setColor(c);
		move();
	}
	public void keyPressed(KeyEvent e){
		int key = e.getKeyCode();
			switch(key){
			case KeyEvent.VK_UP: 
				BU=true;
				break;
			case KeyEvent.VK_RIGHT: 
				BR=true;
				break;
			case KeyEvent.VK_DOWN: 
				BD=true;
				break;
			case KeyEvent.VK_LEFT: 
				BL=true;
				break;
			}
		locateDirection();
	}
}
在这个坦克类中我按向上,BU=true了,调用Direction()方法else if(BU&&!BR&&!BD&&!BL) dir=Direction.U;
默认的BR,BD,BU,BL都是false 加个!不是都是true了吗,按了BU当然BU也是true了,其他的都是true了,还怎么区分方向呢
------解决方案--------------------举个例子
比如就上下左右4个方向,都是初始化为false;
我按上,上变成true,这个时候其他3个方向还是false;这样我判断上的那个if
就是if 上&&!左&&!右&&!下
这个时候左右下都是false所以成功进入了if执行向上的操作
但是如果我按上的时候同时按了下,那么上和下都是true了,而向上操作的判断是
if 上&&!左&&!右&&!下
这个时候下是true了,所以!下是false,那么向上的if判断结果是false不执行向上操作。
他把你按的按钮设置成true,其他都设置成!的目的就是,只有你按这一个键的时候,才进入,如果你错按了其他键就不进入,这就是他的逻辑。
如果看懂了就结贴给分吧。