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

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);  
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值