奥特曼打小怪兽

1、设计奥特曼类,属性有【名字和血量】,行为有【普通攻击、必杀攻击和魔法攻击】

其中普通攻击和必杀攻击一次只能随机攻击一只活着的小怪兽

魔法攻击可以攻击所有的小怪兽

要求普通攻击伤害是20~29之间

必杀伤害如果血量剩余大于60就攻击血量3/4的伤害,如果不大于就直接攻击60伤害

魔法攻击要求固定伤害30

但是无论如何攻击最终小怪兽的血量要保持为0

奥特曼是几率性触发攻击 10%必杀 30%魔法 60%普通

2、设计小怪兽类,属性有【名字和血量】,行为有【普通攻击】

其中普通攻击可以攻击奥特曼

要求普通攻击伤害10~19之间

但是无论如何攻击最终奥特曼的血量要保持为0

3、执行类中操作:本游戏是回合制游戏 其中是【1只奥特曼大战4只小怪兽】,如何便捷的管理和存储4只小怪兽请自行分析

需要在控制台上输出下面的打印效果

需要打印了第几回合 奥特曼的名字和血量 使用了什么攻击

如果是魔法攻击即输出 使用魔法攻击攻击全体小怪兽

如果是普通或必杀攻击 需要写出攻击了那只小怪兽

打印每只小怪兽的名字和血量 并打印小怪兽使用普通攻击

输出:

======== 第X回合 ========

XXX凹凸曼 血量XXX

使用了 魔法攻击全体/普攻,XXX小怪兽/必杀,XXX小怪兽

XXX小怪兽 血量XXX

XXX小怪兽 血量XXX

XXX小怪兽 血量XXX

XXX小怪兽 血量XXX

小怪兽使用了普攻

4、游戏结束条件:凹凸曼血量为0,小怪兽胜利

所有的小怪兽都死了,凹凸曼胜利

5、特殊条件说明:

凹凸曼 普攻和必杀不能攻击死了小怪兽 要【随机攻击一只】活着的小怪兽

魔法无所谓攻击所有的小怪兽【死活不限】 小怪兽的血量不能出现负数 0

阵亡的小怪兽不允许参与到本轮攻击中

奥特曼和小怪兽的初始血量根据个人喜好设定【但是不要太过分】

700 ~1000 250~350

测试类

 

package com.djz.test;

/**
 * @author djz
 * @create 2022-10-20-20:19
 */
public class Demo04 {
        public static boolean isAllAlive(Monster[] ms) {
            for (int i = 0; i < ms.length; i++) {
                if (ms[i].isAlive()) {
                    return true;
                }
            }
            return false;
        }
        public static void main(String[] args) {
            Ultraman u = new Ultraman("迪迦"); //奥特曼名字
            Monster[] ms = { //一群怪兽的名字
                    new Monster("怪兽1"),
                    new Monster("怪兽2"),
                    new Monster("怪兽3"),
                    new Monster("怪兽4"),
            };
            int round = 1;
            do {
                System.out.println("**********第" + round + "回合***********");
                Monster m ;
                do {
                    int index = (int) (Math.random()*ms.length);
                    m = ms[index];
                } while (!m.isAlive());
                System.out.println(m.getName()+"小怪兽攻击奥特曼" + u.getName());
                m.attack(u);
                System.out.println(u);
                if (u.getHp() > 0) {
                    double rout = Math.random();
                    if (rout <=0.6) {
                        System.out.println(u.getName()+"攻击小怪兽"+ m.getName());
                        u.attack(m);
                    }
                    else if(rout<=0.9) {
                        System.out.println(u.getName()+"使用必杀技攻击小怪兽" +m.getName());
                        u.hugeAttack(m);
                    }
                    else if (rout<=30) {
                        System.out.println( u.getName() + "使用魔法攻击小怪兽");
                        u.magicAttack(ms);
                    }
                    for (int i = 0; i < ms.length; i++) {
                        System.out.println(ms[i]);
                    }
                }
                round++;
            } while (u.getHp() > 0 && isAllAlive(ms));
            if (u.getHp() > 0) {
                System.out.println(u.getName()+"胜利!!!!");
            }
            else {
                System.out.println("小怪兽胜利!!!");
            }
        }
    }

奥特曼类

public class Ultraman {
    private int hp; //生命
    private String name; //名字

    public Ultraman(String name) {
        this.name = name;
        hp = 700;
    }

    public void attack(Monster m) {
        int injury = (int) (Math.random() * 21 + 10);
        m.setHp(m.getHp() - injury);
    }

    public void magicAttack(Monster[] ms) {
        for (int i = 0; i < ms.length; i++) {
            if (ms[i].isAlive()) {
                ms[i].setHp(ms[i].getHp() - 30);
            }
        }
    }

    public void hugeAttack(Monster m) {
        if (m.getHp() > 60) {
            m.setHp((m.getHp() / 4));
        } else {
            m.setHp(m.getHp() - 60);
        }
    }
    public String getName() {
        return name;
    }
    public int getHp() {
        return hp;
    }
    public void setHp(int hp) {
        this.hp = hp > 0 ? hp : 0;
    }
    @Override
    public String toString() {
        return name + "生命值:" + hp;
    }
}

怪兽类
 

public class Monster {
        private int hp;
        private String name;
        public Monster(String name) {
            this.name = name;
            hp = 250;
        }
        public void attack(Ultraman m) {
            int injury = (int) (Math.random() * 11 + 10);
            m.setHp(m.getHp() - injury);
        }

        public String getName() {
            return name;
        }
        public int getHp() {
            return hp;
        }
        public void setHp(int hp) {
            this.hp = hp > 0? hp : 0;
        }
        @Override
        public String toString() {
            return "小怪兽" + name +"生命值:" + hp;
        }
        public boolean isAlive() {
            return hp > 0;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值