我正在编写一个程序,为 twitch 流媒体应用程序的 eq 生成随机 Race/class

I'm writing a program that generates Random Race/class for eq for a twitch streaming app

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ClassNameGenerator {

    private static JLabel label;
    private static JLabel label2;

    public static void main (String[] args){

        JFrame frame = new JFrame("EQStreamTool");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,350);
        JPanel panel = new JPanel (new FlowLayout(FlowLayout.CENTER, 20, 5));
        for (int i =0; i <10; i++) {
        }
        frame.add(panel);
        JButton button = new JButton("Generate Class/Race");
        panel.add(button);
        label = new JLabel();
        panel.add(label);
        button.addActionListener(new Action());
        label2 = new JLabel();
        panel.add(label2);
        button.addActionListener(new Action());
    }

    static class Action implements ActionListener{

        public void actionPerformed (ActionEvent e){
            String[] races = {"Barbarian", "Dark Elf", "Dwarf", "Erudite", "Gnome", "Ogre", "Troll", "Wood Elf", "Half Elf", "Halfling", "High Elf", "Human", "Iksar"};
            String[] classes = {"Bard", "Druid", "Cleric", "Enchanter", "Magician", "Monk", "Necromancer", "Paladin", "Ranger", "Rogue", "Shadowknight", "Warrior", "wizard"};
            String[] barbClasses = {"Rogue", "Shaman", "Warrior"};
            String[] delfClasses = {"Cleric", "Enchanter", "Magician", "Necromancer", "Rogue", "Shadowknight", "Warrior", "Wizard"};
            String[] dwarfClasses = {"Rogue", "Paladin", "Warrior"};
            String[] eruditeClasses = {"Cleric", "Enchanter", "Magician", "Necromancer", "Paladin", "Shadowknight", "Wizard"};
            String[] gnomeClasses = {"Cleric", "Enchanter", "Magician", "Necromancer", "Paladin", "Rogue", "Shadowknight", "Warrior", "Wizard"};
            String[] halfelfClasses = {"Bard", "Druid", "Paladin", "Ranger", "Rogue", "Shadowknight", "Warrior", "Wizard"};
            String[] halflingClasses = {"Rogue", "Cleric", "Warrior", "Druid", "Paladin", "Ranger"};
            String[] highelfClasses = {"Cleric", "Enchanter", "Magician", "Paladin", "Wizard"};
            String[] humanClasses = {"Rogue", "Bard", "Warrior", "Cleric", "Druid", "Enchanter", "Magician", "Monk", "Necromancer", "Paladin", "Ranger", "Shadowknight", "Wizard"};
            String[] iksarClasses = {"Monk", "Shaman", "Warrior", "Necromancer", "Shadowknight"};
            String[] ogreClasses = {"Shadowknight", "Shaman", "Warrior"};
            String[] trollClasses = {"Shadwknight", "Shaman", "Warrior"};
            String[] woodelfClasses = {"Bard", "Druid", "Ranger", "Rogue", "Warrior"};

            int random = (int) (Math.random()*races.length);
            int random2 = (int) (Math.random()*classes.length);

            label.setText("Your Race is: "  + races[random]); 
            label2.setText("Your Class is: " + classes[random2]);
        }
    }
}

好的,所以我想做的是获取一个程序,该程序可以从旧游戏 everquest 中创建随机 class/race 组合。我想确保程序考虑了 class 种族限制。所以我制作了一堆字符串,但我似乎无法根据随机比赛获得随机 class。

所以它应该像这样工作 程序选择一个种族,它随机选择一个 class 只有那个种族可以玩。因此所有的字符串。请提供任何帮助,以便我可以继续进行该项目的第二阶段。

另请注意,如何制作它才能使按钮保持在顶部,弹出的文本显示在按钮下方?

如果我没理解错的话,你可以使用二维数组。例如

String[][] raceAndClasses={{"Barbarian","Dark Elf","Dwarf"},{"Bard", "Druid", "Cleric"},{"Rogue", "Shaman", "Warrior"}};

在一个数组中,你可以指定它拥有的所有种族。所以当你随机选择一个 class 时,你可以选择一个相关的随机种族

我对你的第一个问题的建议是使用 Enum 。我创建了示例枚举 class,类似于

public enum RestrictedComboEnum {

Barbarian(new String[] { "bard", "druid" }), 
Dwarf(new String[] { "hello","trial" });

RestrictedComboEnum(String[] classes) {
    this.classes = classes;
}

String[] classes;

public String[] getClasses() {
    return this.classes;
}

}

现在,从上面的代码中删除 race 和 classes 的字符串数组。相反,select enum 之一作为你的比赛(而不是你一直在做的字符串)通过调用 getEnumConstants() enum class 其中 returns array of all enum ,在你的例子中是所有 Races 和有效的 classes。现在调用此 enum 中的 get 方法,它 returns 尽可能 class 是您为该比赛 enum 输入的。您可以随机 select class 因为它是字符串数组并从那里向前移动。

你上面提到的class的相关代码是这样的:

        RestrictedComboEnum[] combinations = RestrictedComboEnum.class
                .getEnumConstants();

        int random = (int) (Math.random() * combinations.length);

        RestrictedComboEnum selectedCombo = combinations[random];

        int random2 = (int) (Math.random() * selectedCombo.getClasses().length);

        label.setText("Your Race is: " + combinations[random]);
        label2.setText("Your Class is: "+ selectedCombo.getClasses()[random2]);

在上面的例子中,当应用程序 selects Barbarian 作为种族时,可能的 selection 将是 barddruid,并且对于Dwarf 将是 hellotrial。所以根据您的需要填写enum

从你的评论来看,你似乎是 Java 的新手,所以出于学习目的,你可以尝试使用 Enum ,因为你会需要它们。 当您的代码增长时,这应该会让您的生活比使用二维数组更轻松。