您的位置:首页 > 产品设计 > UI/UE

八、血条的制作和boss敌人的产生(雷霆战机)

2017-11-24 13:19 459 查看
GitHub地址:https://github.com/WingedCat/AirWar

血条成品:



获取血条图片:

//获取血条
Image bloodImg = GameImage.getImage("resources/blood.png");


为使血条在最上面而不会被其他物体挡住,将下面的代码写在paint()方法最下面:

g.setColor(Color.RED);
g.fillRect(48, 55, (int)Math.round(214*(myplane.getLife()*0.01)), 10);
g.drawImage(bloodImg, 0, 30, null);
g.setColor(Color.white);


我设定一个关卡的时间至少为90秒,当超过就是90秒后,并且没有敌机时我就刷出一架boss敌机:

在GameFrame中设定起始时间start:

public  long start = System.currentTimeMillis();


在检测敌机的线程中这样处理:

import java.util.Random;
import cn.xpu.hcp.game.GameFrame;
import cn.xpu.hcp.tools.GameImage;
import cn.xpu.hcp.tools.PlaySound;

public class CreateEnemyThread extends Thread{
private GameFrame gf;
private static Random r = new Random();

public CreateEnemyThread(GameFrame gf){
this.gf = gf;
System.out.println("check...");
}

@Override
public void run() {
while(true){
if((System.currentTimeMillis()-gf.start)/1000>=90){//一分半后,待打完所有普通敌人,boss开始出现
if(gf.es.size()==0){
new PlaySound("bosscoming.mp3", false);
gf.pbg.stop();
gf.pbg = new PlaySound("bossing.mp3", true);
gf.pbg.start();
Plane boss = new Plane(r.nextInt(500),50,5,false,true,gf);//boss敌机
boss.setLife(1000);//boss生命值为1000
gf.es.add(boss);
}
}else{
if(gf.es.size()<6){//使敌机数量保持在6架
Plane ePlane = new Plane(r.nextInt(500),-r.nextInt(500),5,false,false,gf);//敌机
ePlane.setBoss(false);
gf.es.add(ePlane);
}
}
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}//使CPU歇会
}
}

}


boss级别的敌机不会向下走,只能左右移动:

private static Random r = new Random();
private int step=r.nextInt(50);//随机走多少步 ,用于Boss敌机


if(isBoss){//boss敌机只会左右移动,所有不能左右出界
Direction[] dirs = Direction.values();
if(step == 0) {
step = r.nextInt(50) + 3;
int rn = r.nextInt(2);
dir = dirs[rn];//获取随机方向
}
step --;
if(r.nextInt(40) > 38) this.fire();//产生的随机数大于38就开火
if(x < 0) x = 0;
if(x + ensureImg.getWidth(null) > Constant.GAME_WIDTH) x = Constant.GAME_WIDTH - ensureImg.getWidth(null);
if(y + ensureImg.getHeight(null) > Constant.GAME_HEIGHT) y = Constant.GAME_HEIGHT - ensureImg.getHeight(null);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java gui 雷霆战机