我开始创建角色扮演作为我的第一个 Java 项目。我不会向您展示我拥有的代码,而只是展示它的一个极其简单的版本,这样可以更容易地解释和展示它到底应该做什么。开始吧 - 我们有来自用户的输入,其中包含他选择的角色类别(在本例中为战士或盗贼)的字符串,我们想要创建一个新角色,我们的英雄。角色有3个字段:角色类别(根据输入)和攻击与防御。现在我想存储 Fighter 和 Rouge 的初始攻击和防御统计数据,因此代码可以调用 Character(chosenCharacterClass) 并创建具有正确统计数据的角色。应该怎么做?代码非常简单,因此很容易编辑。请记住,我有超过 2 个统计数据,因此解决方案应该适用于较长的统计数据列表(其中大部分是 int 但我可能会有一些 boolean 值),因此避免使用枚举(和避免继承,我不认为让 Character 成为抽象类是最好的解决方案)。谢谢!
public class Game {
public static void main(String[] args) throws IOException {
Character hero = CharacterCreator.createCharacter();
try {
hero.displayCharacter();
}catch (Exception e){
System.out.println("Wrong input");
}
}
}
public static Character createCharacter() {
System.out.println("Choose a character: ");
System.out.println("1. Fighter");
System.out.println("2. Rogue");
Scanner sc = new Scanner(System.in);
int scan = sc.nextInt();
String chosenClass = getCharacterClass(scan);
System.out.println("Choose Name:");
Scanner nameIn = new Scanner(System.in);
String name = nameIn.next();
Character hero = null;
switch (chosenClass){
case "Fighter":
break;
case "Rogue":
break;
case "def":
System.out.println("Wrong input");
}
return hero;
}
public static String getCharacterClass(int scan){
String classIn;
switch (scan) {
case 1:
classIn = "Fighter";
break;
case 2:
classIn = "Rogue";
break;
default:
System.out.println("Enter again");
classIn = "def";
}
return classIn;
}
}
public class Character {
private String characterClass;
private int attack;
private int defense;
protected Character(String characterClass){
setCharacterClass(characterClass);
setAttack();
setDefense();
}
public String getCharacterClass() { return characterClass; }
public int getAttack() { return attack; }
public int getDefense() { return defense; }
protected void setCharacterClass(String characterClass) { this.characterClass = characterClass; }
protected void setAttack(int atck){ attack = atck}
protected void setDefense(int dfns){ defence = dfns; }
}
最佳答案
面向对象的方法是使 characterClass 成为一个类,并利用多态性,例如(以下为java伪代码,可能编译不通过)
interface CharacterClass {
String getName();
CharacterStats getBaseStats();
}
public class Warrior implements CharacterClass{
private CharacterStats = new CharacterStats(){{ //anonymous class with static initializer
attack = 66;
defense = 54;
...
}}
public String getName(){
return this.class.getSimpleName();
}
}
public class CharacterStats {
public int attack;
public int defence;
...
}
public class Character {
private String characterClass;
public CharacterStats stats;
...
public setCharacterBaseStats(CharacterStats baseStats){
this.stats = baseStats;
}
}
Character npc1 = new Character();
...
npc1.stats.attack += 1;
关于RPG 的 Java 面向对象设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328448/