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 生命值)
齐天大圣 与 二郎神 同归于尽