package com.cy.TankWar_2;/*问题在下面,已标注*/import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;public class Tank_2 {
private static final int XSPEED=5;
private 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_2(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();
} public void move(){
switch(dir){
case L:
x-=XSPEED;
break;
case LU:
x-=XSPEED;
y-=YSPEED;
break;
case U:
y-=XSPEED;
break;
case RU:
x+=XSPEED;
y-=YSPEED;
break;
case R:
x+=XSPEED;
break;
case RD:
x+=XSPEED;
y+=YSPEED;
break;
case D:
y+=XSPEED;
break;
case LD:
x-=XSPEED;
y+=YSPEED;
break;
case STOP:
break;
}
} public void Passkey(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_UP:
BU=true;
break;
case KeyEvent.VK_DOWN:
BD=true;
break;
case KeyEvent.VK_LEFT:
BL=true;
break;
case KeyEvent.VK_RIGHT:
BR=true;
break;
}
locatDirction();
}
public void locatDirction(){
/* 这个方法的代码怎么理解??????????????????????
* 我真的看不懂
* */
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_UP:
BU=false;
break;
case KeyEvent.VK_DOWN:
BD=false;
break;
case KeyEvent.VK_LEFT:
BL=false;
break;
case KeyEvent.VK_RIGHT:
BR=false;
break;
}
locatDirction();
}}
java·求助java
import java.awt.Graphics;
import java.awt.event.KeyEvent;public class Tank_2 {
private static final int XSPEED=5;
private 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_2(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();
} public void move(){
switch(dir){
case L:
x-=XSPEED;
break;
case LU:
x-=XSPEED;
y-=YSPEED;
break;
case U:
y-=XSPEED;
break;
case RU:
x+=XSPEED;
y-=YSPEED;
break;
case R:
x+=XSPEED;
break;
case RD:
x+=XSPEED;
y+=YSPEED;
break;
case D:
y+=XSPEED;
break;
case LD:
x-=XSPEED;
y+=YSPEED;
break;
case STOP:
break;
}
} public void Passkey(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_UP:
BU=true;
break;
case KeyEvent.VK_DOWN:
BD=true;
break;
case KeyEvent.VK_LEFT:
BL=true;
break;
case KeyEvent.VK_RIGHT:
BR=true;
break;
}
locatDirction();
}
public void locatDirction(){
/* 这个方法的代码怎么理解??????????????????????
* 我真的看不懂
* */
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_UP:
BU=false;
break;
case KeyEvent.VK_DOWN:
BD=false;
break;
case KeyEvent.VK_LEFT:
BL=false;
break;
case KeyEvent.VK_RIGHT:
BR=false;
break;
}
locatDirction();
}}
java·求助java
BL && !BU && !BR && !BD
这样写你理解不?
if(BL==true && BU==false && BR==false && BD==false)
比如BL=true BU=false BR=false BD=false
那上面的表达式就是:
true && !false && !false && !false
即: true && true && true && true
就是true
代码: if(BL && !BU && !BR && !BD) dir=Direction.L;就是表示当BL为true,并且其他为false的时候(说明只按了向左的方向键),方向置为向左,其他的else if 语句以此类推。
当我按下左键的时候,BL 变为 true BL BU BR BD还是flase。
因为 if(BL && !BU && !BR && !BD) dir=Direction.L;
它相当于 if(BL=false&&!BU=true&&!BR=true&&!BD=true)
不成立呀·
请大侠给我思路。
case KeyEvent.VK_LEFT:
BL=true;
break;
这里不是把它置为true了?
这个条件表达式成立·必须要满足
BL && !BU=true && !BR=true && !BD=true
此时BL=true,
可是 现在·BL BU BR BD没有改变状态,还是它的初值flase。
这个if(BL && !BU && !BR && !BD)
还不成立呀!!!
请高手给我理清思路··
谢谢~~~
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_UP:
BU=true;
break;
case KeyEvent.VK_DOWN:
BD=true;
break;
case KeyEvent.VK_LEFT:
BL=true;//这里已经把BL设成true了
break;
case KeyEvent.VK_RIGHT:
BR=true;
break;
}
locatDirction();//这里才调这个方法,BL怎么还会是false呢?
为啥要写!BU && !BR && !BD
这只是一种情况,用来表示只有左键被按下
你不这么写,怎么知道其他三个键是不是被按下?