类与对象练习_自动回合制对战

Hero

public class Hero {
    private final String heroName; // 英雄名称
    private int hp; // 血条、生命值
    private final int maxDamage; // 表示角色能够造成的最大伤害值

    public Hero(String heroName, int hp, int maxDamage) {
        this.heroName = heroName;
        this.hp = hp;
        this.maxDamage = maxDamage;
    }

    public String getHeroName() {
        return heroName;
    }

    public int getHp() {
        return hp;
    }

    public void attack(Hero otherHero) {
        int damage = (int)(Math.random() * maxDamage); // 生成伤害值,随机造成0~maxDamage的伤害
        // 对应英雄承受该伤害
        otherHero.takeDamage(damage);
        System.out.printf("%s 对 %s 造成了 %d 点伤害", this.heroName, otherHero.heroName, damage);
        System.out.printf("(%s 还剩 %d 生命值)\n", otherHero.heroName, otherHero.hp);

    }

    public void takeDamage(int damage) {
        this.hp -= damage;
        if (this.hp < 0) {
            this.hp = 0;
        }
    }

    public boolean isAlive() {
        return this.hp > 0;
    }
}

HeroTest

public class HeroTest {
    public static void main(String[] args) {
        Hero hero1 = new Hero("齐天大圣", 100, 55);
        Hero hero2 = new Hero("二郎神", 180, 45);

        int round = 1;
        while (hero1.isAlive() && hero2.isAlive()) {
            System.out.printf("********* 回合 %d *********\n", round++);
            hero1.attack(hero2);
            hero2.attack(hero1);
        }

        if (hero1.isAlive()) {
            System.out.printf("%s 胜出\n", hero1.getHeroName());
        } else if (hero2.isAlive()) {
            System.out.printf("%s 胜出\n", hero2.getHeroName());
        } else {
            System.out.printf("%s 与 %s 同归于尽\n", hero1.getHeroName(), hero2.getHeroName());
        }
    }
}

输出示例

********* 回合 1 *********
齐天大圣 对 二郎神 造成了 47 点伤害(二郎神 还剩 133 生命值)
二郎神 对 齐天大圣 造成了 24 点伤害(齐天大圣 还剩 76 生命值)
********* 回合 2 *********
齐天大圣 对 二郎神 造成了 40 点伤害(二郎神 还剩 93 生命值)
二郎神 对 齐天大圣 造成了 25 点伤害(齐天大圣 还剩 51 生命值)
********* 回合 3 *********
齐天大圣 对 二郎神 造成了 45 点伤害(二郎神 还剩 48 生命值)
二郎神 对 齐天大圣 造成了 10 点伤害(齐天大圣 还剩 41 生命值)
********* 回合 4 *********
齐天大圣 对 二郎神 造成了 22 点伤害(二郎神 还剩 26 生命值)
二郎神 对 齐天大圣 造成了 30 点伤害(齐天大圣 还剩 11 生命值)
********* 回合 5 *********
齐天大圣 对 二郎神 造成了 50 点伤害(二郎神 还剩 0 生命值)
二郎神 对 齐天大圣 造成了 41 点伤害(齐天大圣 还剩 0 生命值)
齐天大圣 与 二郎神 同归于尽

posted @ 2024-09-27 10:29  xkfx  阅读(173)  评论(0编辑  收藏  举报