首页 > 解决方案 > Java 游戏类:Hero vs Monsters

问题描述

你好我想解决这个问题:

你正在制作一个角色扮演游戏。首先,你需要一个扮演角色的英雄。与所有角色扮演游戏一样,英雄拥有生命值(生命)、攻击力和防御力。他还拥有经验值和出生时的名字。英雄只是四处游荡,没有任何角色扮演游戏很有趣。他们需要一些怪物来战斗。并非所有的怪物都是一样的,有些会更重地打你,有些会立即受到更多伤害(阅读:它们具有可变的攻击强度和防御力)。虽然大多数人没有名字,但他们都属于一个已知的特定种族。他们也没有经验值(因为他们注定要被击败)。不同的怪物种族有不同的魔法技能,可以增强他们的攻击或防御

• 英雄和怪物的共同点是什么?将它们组合在一起!• 制作一个带有main 方法的Game 类来测试你的角色。让他们互相攻击,看看他们是如何损失HP的!为简单起见,您可以考虑在每次攻击中,目标损失的 HP 量等于攻击者的力量。

输出:

Created hero Chuck. HP = 100, ATK = 10
Created monster of race Rock skin cyclops. HP = 30, ATK = 8
Created monster of race Fire wizard. HP = 50, ATK = 6
Chuck attacks Rock skin cyclops
  Chuck's attributes: hp = 100, xp = 10
  Rock skin cyclops's attributes: hp = 20
Rock skin cyclops starts using magic
Chuck attacks Rock skin cyclops
  Chuck's attributes: hp = 100, xp = 20
  Rock skin cyclops's attributes: hp = 15
Fire wizard attacks Chuck
  Fire wizard's attributes: hp = 50
  Chuck's attributes: hp = 94, xp = 20
Chuck attacks Fire wizard
  Chuck's attributes: hp = 94, xp = 30
  Fire wizard's attributes: hp = 40

我试图解决这样的问题:

界面:

public interface RpgGame {
void attack(Character character);

}

字符类:

public class Character {
private int HP;
private int ATK;
private int defense;

public Character(int HP, int ATK, int defense) {
    this.HP = HP;
    this.ATK = ATK;
    this.defense = defense;
}

public void setATK(int ATK) {
    this.ATK = ATK;
}

public int getATK() {
    return ATK;
}

public void setDefense(int defense) {
    this.defense = defense;
}

public int getDefense() {
    return defense;
}

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

public int getHP() {
    return HP;
}

}

英雄等级:

public class Hero extends Character implements RpgGame {
private int XP;
private String name;

public Hero(int HP, int ATK, int defense, int XP, String name) {
    super(HP, ATK, defense);
    this.XP = XP;
    this.name = name;
    System.out.println("Created hero " + name + "," + "HP = " + HP + " , " + "ATK = " + ATK);
}

public void setXP(int XP) {
    this.XP = XP;
}

public int getXP() {
    return XP;
}

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

public String getName() {
    return name;
}

public void attack(Character character) {
   
    if(character.getHP() < 0) {
        System.out.println("Monster is dead");
    }else {
        this.XP += getATK();
        int monsterHp = character.getHP();
        monsterHp -= getATK();
        character.setHP(monsterHp);
    }
}

}

怪物等级:

public class Monster extends Character {
private String race;

public Monster(int HP, int ATK, int defense, String race) {

    super(HP, ATK, defense);
    this.race = race;
}

public void setRace(String race) {
    this.race = race;
}

public String getRace() {
    return race;
}

}

火精灵类:

public class FireWizard extends Monster {


public FireWizard(int HP, int ATK, int defense,String race) {
    super(HP, ATK, defense,race);
    System.out.println("Created monster of Fire Wizard, " + "HP = " + HP + " , " + "ATK = " + ATK);
}

public void usingMagic() {

}

}

RockCyclop类:

public class RockCyclop extends Monster {

public RockCyclop(int HP, int ATK, int defense,String race) {
    super(HP, ATK, defense,race);
    System.out.println("Created monster of " + race + "," +  " HP = " + HP + " , " + "ATK =" + ATK);
}

}

游戏类:

public class Game {

public static void main(String[] args) {
    Hero chuck = new Hero(100, 10, 50, 0, "Chuck");
    RockCyclop rock = new RockCyclop(30, 8, 40, "Rock skin cyclops");
    FireWizard wizard = new FireWizard(50, 6, 40, "Fire Wizard");

}

} \

我不确定如何使用界面中的攻击方法使程序正常工作..以及如何正确使用它来发送字符。例如,如果我想访问 character.getRace() 我不能因为种族不在角色中,只是在怪物中。当我需要新角色时,我试图尊重开放封闭原则来扩展类。

标签: javaoopopen-closed-principle

解决方案


推荐阅读