哪位JAVA高手帮忙写一个能用键盘控制小人动的代码,重谢!!!!!实在是急用啊···

就是现在我们在做一个project,因为国外的老师讲课实在是快,什么都要自学。。。我们小组的项目又很难,实在是得求助啦。。。就是用键盘控制一个小人在一个房间里面移动,然后... 就是现在我们在做一个project,因为国外的老师讲课实在是快,什么都要自学。。。我们小组的项目又很难,实在是得求助啦。。。就是用键盘控制一个小人在一个房间里面移动,然后剩下有5个小人是自动走动的,因为是个联网的游戏,剩下别的玩家也是可以自己控制一个小人动,其他的小人自行在房间移动···现在image有了 是个四向移动的。。。。。但是这代码我头疼了N久····哎 主要是学的不好 那位学长帮帮忙 ····· 展开
 我来答
极度放肆
2009-12-11 · TA获得超过135个赞
知道答主
回答量:363
采纳率:0%
帮助的人:116万
展开全部
要判断 键盘 switch键盘输入 然后g.drawImage
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
安尘寰
2009-12-18 · TA获得超过114个赞
知道答主
回答量:79
采纳率:0%
帮助的人:0
展开全部
/**
* 坦克绘图
*/
public void draw(Graphics g) {
if(!live) {
if(!good) {
tc.tanks.remove(this);
}
return;
}

if(good) bb.draw(g);

switch(ptDir) {
case L:
g.drawImage(imgs.get("L"), x, y, null);
break;
case LU:
g.drawImage(imgs.get("LU"), x, y, null);
break;
case U:
g.drawImage(imgs.get("U"), x, y, null);
break;
case RU:
g.drawImage(imgs.get("RU"), x, y, null);
break;
case R:
g.drawImage(imgs.get("R"), x, y, null);
break;
case RD:
g.drawImage(imgs.get("RD"), x, y, null);
break;
case D:
g.drawImage(imgs.get("D"), x, y, null);
break;
case LD:
g.drawImage(imgs.get("LD"), x, y, null);
break;
}

move();
}

/**
* 坦克移动
*/
void move() {

this.oldX = x;
this.oldY = y;

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;
}

if(this.dir != Direction.STOP) {
this.ptDir = this.dir;
}

if(x < 0) x = 0;
if(y < 30) y = 30;
if(x + Tank.WIDTH > TankClient.GAME_WIDTH) x = TankClient.GAME_WIDTH - Tank.WIDTH;
if(y + Tank.HEIGHT > TankClient.GAME_HEIGHT) y = TankClient.GAME_HEIGHT - Tank.HEIGHT;

if(!good) {
Direction[] dirs = Direction.values();
if(step == 0) {
step = r.nextInt(12) + 3;
int rn = r.nextInt(dirs.length);
dir = dirs[rn];
}
step --;

if(r.nextInt(40) > 38) this.fire();
}
}

/**
* 坦克停止移动
*/
private void stay() {
x = oldX;
y = oldY;
}

/**
* 按键动作参数关联
*/
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_F2 :
if(!this.live) {
this.live = true;
this.life = 100;
}
break;
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_Z:
fire();
break;
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;
case KeyEvent.VK_A :
superFire();
new HitMusic().run();
break;
case KeyEvent.VK_S :
new BombMusic().run();
bomb(tc.tanks);
break;
}
locateDirection();
}

这个是我写过的一个坦克大战的游戏的核心移动代码,你的项目移动实现应该和这个差不多.核心代码有了,接下来就只用在主程序中加入一个绘图线程,实时的调用该Tank类的paint方法就行.因为Tank的位置有所改变,所以每次线程调用重绘的时候坦克位置便发生变化.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式