//第1列
int x1=60;
int x2=90;
int width=30;
int height=30;
int oy=60;
int y=0;
int count=6;
for (int i = 0; i < count; i++) {
y=oy+i*30;
wall = new Wall(wallImage,x1,y,width,height,0);
walls.add(wall);
wall = new Wall(wallImage,x2,y,width,height,0);
walls.add(wall);
}
//按下键盘
@Override
void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_F:
case KeyEvent.VK_SPACE:
fire();
break;
case KeyEvent.VK_UP:
case KeyEvent.VK_W:
setDir(1);
move();
break;
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_D:
setDir(2);
move();
break;
case KeyEvent.VK_DOWN:
case KeyEvent.VK_S:
setDir(3);
move();
break;
case KeyEvent.VK_LEFT:
case KeyEvent.VK_A:
setDir(4);
move();
break;
}
}
private int[] dirs= new int[]{1,2,3,3,3,4};//向下几率高
@Override
void move() {
if(!alive) return ;
//设定位移和图片
switch (dir) {
case 1:
y-=speed;
setImage((BufferedImage)tankImageMap.get(key+"U"));
//判断是否能移动
if(!panel.canMove(this)){//不能移动
y+=speed;
dir = dirs[getRandom(dir)];
}
break;
case 2:
x+=speed;
setImage((BufferedImage)tankImageMap.get(key+"R"));
//判断是否能移动
if(!panel.canMove(this)){//不能移动
x-=speed;
dir = dirs[getRandom(dir)];
}
break;
case 3:
y+=speed;
setImage((BufferedImage)tankImageMap.get(key+"D"));
//判断是否能移动
if(!panel.canMove(this)){//不能移动
y-=speed;
dir = dirs[getRandom(dir)];
}
break;
case 4:
x-=speed;
setImage((BufferedImage)tankImageMap.get(key+"L"));
//判断是否能移动
if(!panel.canMove(this)){//不能移动
x+=speed;
dir = dirs[getRandom(dir)];
}
break;
}
}
开炮采用线程定时执行
@Override
void fire() {
BufferedImage image = (BufferedImage)imageMap.get("tankmissile");
int x =0;
int y =0;
int w=6;
int h=6;
if(dir==1){
x = this.x+width/2-w/2;
y = this.y;
}else if(dir==2){
x = this.x+width;
y = this.y+height/2-h/2;
}else if(dir==3){
x = this.x+width/2-w/2;
y = this.y+height;
}else if(dir==4){
x = this.x;
y = this.y+height/2-h/2;
}
Missile missile = new Missile(panel,image, x, y, w, h, dir, 6, "enemy");
panel.missiles.add(missile);
missile.doMove();
}
定时创建敌方坦克
//创建定时加入敌方坦克的线程
new Thread(new Runnable() {
@Override
public void run() {
while (startFlag) {
try {
createEnemyTank();
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
private void createEnemyTank(){
int index = new Random().nextInt(3)+1;//随机敌方坦克
int x=0;
int y=0;
int w=60;
int h=60;
int fireTime=2000;//开火间隔
Tank et = new ETank(this,imageMap,tankImageMap,x,y,w,h,fireTime,"enemy"+index);
eTanks.add(et);
}