在游戏中创建NPC阵列

时间:2015-06-29 17:57:24

标签: java arrays list

我现在正在学习Java课程,我们应该制作一个基于文本的游戏。我们游戏中的一个选项是允许此人在3种船型中进行选择;小,中,大。根据他们的选择,他们将能够选择在船上旅行的人数。小允许最多3个,中等最多6个,大到9个。一旦做出这个选择,他们就可以输入每个机组成员的名字并选择研究专业。以前,我们将这些设置为单独的菜单(选择船舶,船员规模,研究规格和名称),但我开始认为在同一菜单中选择船员规模,名称和研究规格会更容易。

也就是说,我们现在正在研究数组/数组列表,我们应该使用数组来列出游戏中的字符(NPC)。因此,我需要弄清楚如何根据选择的工作人员数量(1到9之间)创建数组,然后让它提示输入名称,然后允许他们从研究规范列表中进行选择。他们将输入一个单独的字母供他们选择,但数组应该在其中输入研究规范的全名。我在另一篇文章中发现了一些代码,我认为在这种情况下可能会有所帮助,但我认为它几乎没有触及表面。任何帮助将不胜感激。

 public class Name {
    public static void main(String[] args) {
        ArrayList<String> name = new ArrayList<String>();
        ArrayList<(how do I tell it to select a character option here?)> researchSpec = new ArrayList<(selected option)>();
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.err.println("Please enter the name of your crew member: ");
            name.add(sc.next());
            System.out.println("Please select a Science Specialization for your crew member");
            researchSpec.add(sc.next());
        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果您拥有一组预定义的小型可能值,则enum通常是表示这些值的理想选择。

public enum Specialization {
    PHYSICS,
    CHEMISTRY,
    BIOLOGY
}

现在,您可以定义类型Specialization的变量和类型List<Specialization>的列表,并将值称为Specialization.PHYSICS等。这比使用{{1更好因为你没有冒风险的例子在代码中的某处拼错专门化,例如在一个地方将String添加到列表中,并想知道为什么"Pysics"永远无效。

但是,对于从字母到专精的映射,您仍需要一些if (specialization.equals("Physics"))ifswitch - 除非您对枚举感兴趣。枚举实际上是一个类,但您不能在其上使用Map - 而是每个标识符自动生成一个实例(在本例中为newPHYSICS和{{1是三个唯一的实例)。您可以向枚举类添加字段,构造函数和方法,以便为每个值赋予不同的属性:

CHEMISTRY

您可以使用BIOLOGY获取所有值的列表。例如,这将生成菜单选项(我将选择作为练习):

public enum Specialization {
    PHYSICS('p', "Physics"),
    CHEMISTRY('c', "Chemistry"),
    BIOLOGY('b', "Biology");

    private char menuLetter;
    private String displayName;

    private Specialization(char menuLetter, String displayName) {
        this.menuLetter = menuLetter;
        this.displayName = displayName;
    }

    public char getMenuLetter() { return menuLetter; }

    public String getDisplayName() { return displayName; }
}

编辑:或者使用常规循环:

values()

答案 1 :(得分:0)

根据选择创建一个数组然后填充它将如下所示:

NPC[] npcs;

if (amount > maximum) {// both values prompted
    System.our.println("Too much crew members.");
    return;
}

npcs = new NPC[amount];

for (int i = 0; i < npcs.length; i++) {
    String name = // prompt name
    Specialization s = // prompt that somehow -> enum solution by Aasmund Eldhuset
    npcs[i] = new NPC(name, s);
}

NPC类看起来像这样:

public class NPC {
    public (final?) String name;
    public (final?) Specialization spc;

    public NPC(String name, Specialization s) {
        this.name = name;
        this.spc = s;
    }
}