吃鸡游戏!

题目要求

在这里插入图片描述

Player类

package ChickenGameGame;
/*
类	玩家 Player,开局的时候,默认血量为100,没有枪
	属性  昵称 name
		 血量 HP
		 枪 gun
	行为  捡枪(枪)
		 装弹(弹夹,子弹)
		 上膛(弹夹)
		 开枪(玩家)
		 掉血(伤害值)
*/
public class Player {
    private String name;
    private int HP = 100;
    private Gun gun;

    public Player() {
    }

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHP() {
        return HP;
    }

    public void setHP(int HP) {
        this.HP = HP;
    }

    //      捡枪(枪)
    //		 装弹(弹夹,子弹)
    //		 上膛(弹夹)
    //		 开枪(玩家)
    //		 掉血(伤害值)

    //捡枪
    public void takeGun(Gun gun){
        //如果玩家没有枪,给他一把枪
        if (this.gun == null){
            this.gun = gun;
            System.out.println("玩家" + name + "拿到枪!");
        }else {
            System.out.println("玩家" + name + "已经有枪了!");
        }
    }
    //上膛
    public void loadClip(Clips clips){
        //有枪才能上弹夹
        if (this.gun != null){
            //需要通过枪去调用方法
            this.gun.loadClips(clips);
            System.out.println("玩家" + name + "给枪装上了弹夹!");
        }else {
            System.out.println("玩家" + name + "还没有拿到枪!");
        }
    }
    //开枪方法
    public void shot(Player player){
        //有枪才能开枪
        if (gun != null){
            //弹夹为空
            if (gun.getClips() == null){
                System.out.println("枪里没有装弹夹!请装弹夹!");
            }else {
                //弹夹有了,判断弹夹有没有子弹
                if (gun.getClips().getNum() == 0){
                    System.out.println("弹夹中没有子弹!");
                }else {
                    System.out.println("玩家" + name + "开枪打中了" + player.name);
                    this.gun.shot(player);
                }
            }
        }else {
            System.out.println("玩家" + name + "没有枪,不能开枪!");
        }
    }

    public void bloodLoss(int damage) {
        //看看当前血量还有多少,到0就死亡
        if (this.HP == 0){
            System.out.println("玩家" + name + "已死亡!");
        }else {
            this.HP -= damage; //掉血
            System.out.println("玩家" + name + "受到" + damage +
                    "点伤害,剩余" + this.HP + "血量!");
        }

    }
}

Gun类

package ChickenGameGame;
/*
类	枪
	属性
	    弹夹 clips
	行为
	  装弹夹=Player上膛(弹夹)
	  开枪(玩家)   ,如果开枪没打中的话,提示放了一个空枪
*/
public class Gun {
    private Clips clips;

    public Clips getClips() {
        return clips;
    }

    //开枪
    public void shot(Player player){
        //如果弹夹不为空,才能开枪
        if (clips != null){
            //弹夹调用出弹方法
            Bullet bullet = clips.popBullet();
            //如果子弹不为null,子弹可以击中玩家
            if (bullet != null){
                bullet.hit(player);
            }else {
                System.out.println("放了个空枪!");
            }
        }else {
            System.out.println("枪没有弹夹,请上弹夹!");
        }
    }

    public void loadClips(Clips clips) {
        this.clips = clips;
        System.out.println("枪的弹夹装好了!");
    }
}

Clips类

package ChickenGameGame;
/*
类  弹夹,弹夹默认只能装入30颗子弹
	属性 子弹 bullet
	行为 装弹(子弹)
	     出弹()
*/
public class Clips {
    private Bullet[] bullets = new Bullet[30];
    private int num  = 0;  //子弹数量

    public int getNum() {
        return num;
    }

    //装弹方法
    public void putBullet(Bullet bullet){
        //如果弹夹有空了,才可以装弹
        if (bullets.length == num){
            System.out.println("弹夹的子弹是满的,不需要装弹!");
        }else {
            //从剩下子弹数量的下一位开始装弹
            bullets[num] = bullet;
            num++;
            System.out.println("弹夹已经装了" + num + "颗子弹!");
        }
    }

    //出弹方法
    public Bullet popBullet(){
        if (num == 0){
            System.out.println("弹夹中子弹打完了!");
            return null;
        }
        //每调用一次方法,子弹数量--,其实就是将子弹从数组中拿出来
        //子弹是先进后出的结构,所以每次拿的是上面的
        Bullet bullet = bullets[num-1];
        System.out.println("弹夹中还剩" + --num + "个子弹!");
        return bullet;
    }
}

Bullet类

package ChickenGameGame;
/*
类	子弹       默认伤害是10,命中玩家后玩家掉血
	属性
	    伤害值 damage
	行为
		命中 hit(玩家)
*/
public class Bullet {
    private int damage = 10; //默认值为10

    public void hit(Player player){
        player.bloodLoss(damage);
    }
}

Test类

package ChickenGameGame;
//设计一个吃鸡的游戏

// 类创建好以后,创建两个角色,角色A和角色B, 角色A出场后,拿到枪,
// 装上子弹以后,开枪打角色B,每次开枪需要返回 :
// A开枪打中了B,B的血量还有多少,如果没打中,就提示A放了一个空枪,没有打中B,直到B死亡,流程结束
public class Test {
    public static void main(String[] args) {
        Player a = new Player("A");
        Player b = new Player("B");

        //a.shot(b);
        //a捡枪
        Gun gun = new Gun();  //先创建枪
        a.takeGun(gun);
        //创建弹夹对象
        Clips clips = new Clips();
        a.loadClip(clips);

        //装子弹
        for (int i = 0; i < 30; i++) {
            clips.putBullet(new Bullet());
        }
        //a.shot(b);
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0){
                a.shot(b);
            }else {
                System.out.println("A放了空枪,没打中B~");
            }


        }

    }
}

最后运行结果截图

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值