【对象练习】java开发宠物大作战

新建game01包(package)

先写Dog类(class)此类用来写宠物的成员变量,方法,自动创建有参/无参的构造方法,以及getter和setter方法

package game01;

//Dog dog= new Dog();
public class Dog {
    //private封装 对外部函数/方法不可见   对内部函数/方法可见
    //不直接对外暴露对象中属性的读写操作
    //改为对外部暴露一组setter和getter方法
    //昵称
    private String nickName;
    //品种
    private String strain;
    //实际生命值
    private Long hp;
    //最大生命值
    private Long maxHp;
    //最大怒气值
    private Integer maxAnger;
    //实际怒气值
    private Integer Anger;
    //等级
    private Integer level;
    //最大经验值
    private Long maxExp;
    //实际经验值
    private Long Exp;
    public void show(){
        System.out.println(this.nickName+"的信息");
        System.out.println("品种:"+this.strain);
        System.out.println("等级:"+this.level);
        System.out.println("生命:"+this.hp+"/"+this.maxHp);
        System.out.println("怒气:"+this.Anger+"/"+this.maxAnger);
        System.out.println("经验:"+this.Exp+"/"+this.maxExp);
        System.out.println("----------------------------------");
    }

    public Dog(String nickName, String strain, Long hp, Long maxHp, Integer maxAnger, Integer anger, Integer level, Long maxExp, Long exp) {
        this.nickName = nickName;
        this.strain = strain;
        this.hp = hp;
        this.maxHp = maxHp;
        this.maxAnger = maxAnger;
        Anger = anger;
        this.level = level;
        this.maxExp = maxExp;
        Exp = exp;
    }
    public void killOk(Monster monster){
        System.out.println(this.nickName+"成功击杀"+monster.getName()+"!");
        System.out.println("获得经验值"+monster.getExp());
        this.Exp+=monster.getExp();
        if (this.Exp>=this.maxExp){
            this.level++;
            this.Exp=this.Exp-this.maxExp;
            System.out.println(this.nickName+"升到"+this.level+"级!");
        }
    }
    public void attack(){
        System.out.println(this.nickName+"普通攻击一次!");
        this.Anger+=500;
    }
    public void angerAttack(){
        System.out.println(this.nickName+"怒气攻击一次!");
        this.Anger=0;
    }
    public void beAttack(){
        System.out.println(this.nickName+"受到攻击一次!");
        this.hp-=200;
    }

    public Dog() {
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getStrain() {
        return strain;
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }

    public Long getHp() {
        return hp;
    }

    public void setHp(Long hp) {
        this.hp = hp;
    }

    public Long getMaxHp() {
        return maxHp;
    }

    public void setMaxHp(Long maxHp) {
        this.maxHp = maxHp;
    }

    public Integer getMaxAnger() {
        return maxAnger;
    }

    public void setMaxAnger(Integer maxAnger) {
        this.maxAnger = maxAnger;
    }

    public Integer getAnger() {
        return Anger;
    }

    public void setAnger(Integer anger) {
        Anger = anger;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public Long getMaxExp() {
        return maxExp;
    }

    public void setMaxExp(Long maxExp) {
        this.maxExp = maxExp;
    }

    public String getExp() {
        if (Exp==null||Exp<10000){
            return "10000";
        }else if (Exp>=1000000&&Exp<1000000000){
            double expDb=Exp*1.0/1000000;
            return String.format("%.2f",expDb)+"M";
        }else if (Exp>=1000000000){
            double expDb=Exp*1.0/1000000000;
            return String.format("%.2f",expDb)+"B";
        }else{
            return String.valueOf(Exp);
        }
    }

    public void setExp(Long exp) {
        if (exp!=null&&exp<10000){
            exp=10000L;
        }
        Exp = exp;
    }
}

   

创建怪物类Monster,类比宠物类创建

package game01;

import java.util.Random;

public class Monster {
    private static Random random = new Random();
    private String name;
    private Integer maxHp;
    private Integer hp;
    private Integer exp;
    private Integer level;

    public Monster() {
        this.maxHp= random.nextInt(5000)+5000;
        this.hp=this.maxHp;
        this.exp= random.nextInt(5000)+1000;
        this.level= random.nextInt(10)+1;
    }
    public void attack(){
        System.out.println(this.name+"普通攻击一次!");
    }
    public void beAttack(){
        System.out.println(this.name+"受到攻击一次!");
        this.hp-=800;
    }

    public Monster(String name, Integer maxHp, Integer hp, Integer exp, Integer level) {
        this.name = name;
        this.maxHp = maxHp;
        this.hp = hp;
        this.exp = exp;
        this.level = level;
    }

    public String getName() {
        return name;
    }

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

    public Integer getMaxHp() {
        return maxHp;
    }

    public void setMaxHp(Integer maxHp) {
        this.maxHp = maxHp;
    }

    public Integer getHp() {
        return hp;
    }

    public void setHp(Integer hp) {
        this.hp = hp;
    }

    public Integer getExp() {
        return exp;
    }

    public void setExp(Integer exp) {
        this.exp = exp;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }
    public void show(){
        System.out.println(this.name+"\tmaxHp:"+this.maxHp+"\thp: "+this.hp+"\texp:"+this.exp+"\tlevel:"+this.level);
    }
}
 

创建Game类测试运行

package game01;

import java.util.Scanner;

public class Game {
    //Scanner 接收用户输入的类
    //sc.next();   接收字符串
    //sc.nextInt(); 接收整数
    //sc.nextDouble(); 接收浮点数
    static Scanner sc=new Scanner(System.in);
    //定义了dog类型的数组
    static Dog[] dogArr=new Dog[2];
    //定义一个Monster类型的数组
    static Monster[] monsterarr=new Monster[10];
    //定义一个金币变量
    static long money = 20000;
    public static void main(String[] args) {
        int choice =0;
        do{
            System.out.println("***********欢迎进入宠物大作战**************");
            System.out.println("1.领养宠物");
            System.out.println("2.查看宠物");
            System.out.println("3.进入训练场");
            System.out.println("4.刷新训练场");
            System.out.println("5.宠物栏扩容");
            System.out.println("6.充值");
            System.out.println("7.退出");
            System.out.println("请选择:");
            choice = sc.nextInt();
            switch (choice){
                case 1:
                    System.out.println("**************领养宠物*************");
                    getDog();
                    break;
                case 2:
                    System.out.println("**************查看宠物*************");
                    display();
                    break;
                case 3:
                    System.out.println("**************进入训练场*************");
                    GoToTrain();
                    break;
                case 4:
                    System.out.println("**************刷新训练场*************");
                    refreshTrain();
                    break;
                case 5:
                    System.out.println("**************宠物栏扩容*************");
                    dilatation();
                    break;
                case 6:
                    pay();
                    System.out.println("**************充值*************");
                    break;
            }
        }while (choice !=7);
        System.out.println("bye~ 游戏退出");

    }

    private static void GoToTrain() {
        int count=0;
        for (int i = 0; i < monsterarr.length; i++) {
            if (monsterarr[i]==null){
                System.out.println((i+1)+"号怪物已经死亡");
            }else{
                monsterarr[i].show();
                count++;
            }
        }
        System.out.println("训练场剩余怪物数量:"+count);
        if (count<=0){
            System.out.println("请刷新怪物!");
            return;
        }
        System.out.println("请选择PK的怪物编号:");
        //用户输入怪物编号
        int pkNo=sc.nextInt();
        //用户输入的编号作为索引去怪物数组取对应的怪物指针
        Monster pkMonster=monsterarr[pkNo-1];
        //显示宠物列表
        display();
        System.out.println("请选择出战的宠物编号:");
        pkNo=sc.nextInt();
        //用户输入的编号作为索引去宠物数组取对应的宠物指针
        Dog pkDog=dogArr[pkNo-1];
        //开始PK,一共pk20次
        //奇数回合:宠物打怪物,打一次怪物掉血800
        //偶数回合:怪物打宠物,打一次宠物掉血200
        //如何一方hp<0,pk结束
        for (int i = 0; i < 20; i++) {
            if (i%2==0){     //偶数回合:怪物打宠物,打一次宠物掉血200
                pkMonster.attack();
                pkDog.beAttack();
            }else {        //奇数回合:宠物打怪物,打一次怪物掉血800
                if (pkDog.getAnger()==pkDog.getMaxAnger()){
                    pkDog.angerAttack();
                    pkMonster.beAttack();
                    pkMonster.beAttack();
                }else {
                    pkDog.attack();
                    pkMonster.beAttack();
                }
            }
            if (pkDog.getHp()<=0){
                System.out.println(pkDog.getNickName()+"血量不足,寄!");
                break;
            }
            if (pkMonster.getHp()<=0){
//                System.out.println(pkMonster.getName()+"血量不足,寄!"+pkDog.getNickName()+"\t经验值+"+pkMonster.getExp()+"!");
                pkDog.killOk(pkMonster);
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

    private static void refreshTrain() {
        //随机刷新10个怪物
        for (int i = 0; i < 10; i++) {
            Monster monster =new Monster();
            monster.setName("怪物"+(i+1)+"号");
            monsterarr[i]=monster;
            monster.show();
        }
        System.out.println("训练场怪物刷新成功!");
    }

    public static void getDog(){
        if (money<5000){
            System.out.println("金币数量不够!");
            return;
        }
        if (dogArr[dogArr.length-1]!=null){
            System.out.println("你的宠物栏位已满");
            return;
        }
        System.out.println("请输入宠物的昵称:");
        String nickName =sc.next();
        System.out.println("请输入品种:");
        String stain =sc.next();
        Dog dog=new Dog(nickName,stain,1000L,100000L,1000,0,1000,10000L,10L);
        //dog指针 的地址存储到dogArr里面,找到数组中第一个不为null的位置存储
        for (int i = 0; i < dogArr.length; i++) {
            if (dogArr[i]==null){
                dogArr[i]=dog;
                break;
            }
        }
        money-=5000;
        System.out.println(nickName+"领养成功!");
    }
    public static void display(){
        //遍历dogArr数组,如果当前元素为null,输出空栏位,不为空是、,输出栏位
        for (int i = 0; i < dogArr.length; i++) {
            if (dogArr[i]==null){
                System.out.println((i+1)+"号栏位:空");
            }else {
                System.out.println((i+1)+"号栏位:"+dogArr[i].getNickName()+dogArr[i].getStrain());
            }
        }
    }
    public static void dilatation(){
        if (money<10000){
            System.out.println("请充值");
            return;
        }
        Dog [] newdogArr=new Dog[dogArr.length+5];
        for (int i = 0; i < dogArr.length; i++) {
            newdogArr[i]=dogArr[i];
        }
        dogArr=newdogArr;
        money-=10000;
        System.out.println("恭喜你扩容宠物栏位成功!");
    }
    public static void pay(){
        System.out.println("你现在有:"+money+"金币!");
        System.out.println("冲100000送200000!仅限今日!");
        int pay= sc.nextInt();
        if (pay==100000){
            money+=300000;
        }else {
            money+=pay;
        }
        System.out.println("你现在有:"+money+"金币");
    }


}
 

以上即宠物大作战游戏

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码老祖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值