2 Stimmen

Erstellen von Objekten für das richtige Objekt

Als erstes Entschuldigung für den Fragetitel, ich war mir nicht sicher, wie ich das nennen sollte.

Wie auch immer, ich arbeite an einem Spiel, in dem es eine Anzahl von Spielern geben kann, die jeweils eine Anzahl von Haustieren haben können. Ich habe die Hauptstruktur des Spiels entwickelt, z.B. Spielerklasse, Haustierklasse und eine Hauptklasse .. Von dort aus habe ich am GUI gearbeitet, wo ich frage, wie viele Spieler es gibt und wie viele Haustiere jeder Spieler möchte.. Wo ich stecke, ist, wie ich die Haustiere für jeden Spieler erstellen soll.

Ich habe ein ziemlich einfaches Formular erstellt, das den Spieler auffordert, einen Haustiertyp auszuwählen, ihm einen Namen zu geben und dann das Haustier zu erstellen..

public void createPets(final Player player){

//verschiedene Schaltflächen, ComboBox und Beschriftungen kommen hierher
//Layout-Manager
//alles zu einem Frame hinzufügen

JButton jbCreatePet = new JButton("Haustier erstellen");

jbCreatePet.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        String name = jtfName.toString();

        if (cbSpecies.getSelectedIndex() == 0){
            Alien alien = new Alien();
            alien.setName(name);
            player.getAllPets.add(alien);

        }
        else if(cbSpecies.getSelectedIndex() == 1){
            //Haustier 2 erstellen
        }
        else{
            //Haustier 3 erstellen
        }
    }
});

player ist ein Player-Objekt, das mit einer for-Schleife in die Methode übergeben wird.. 

for (Player player: allPlayers){
    createPets(player);
}

Ich weiß, dass es NICHT korrekt ist, die for-Schleife zu verwenden, d.h. das Formular wird einfach zum letzten Spieler springen und keiner der anderen Spieler wird ein Haustier erstellen können..

Also habe ich ein paar Fragen:

  1. Als ich das erstellte Haustier der Liste aller Haustiere des Spielers zugewiesen habe, hat mir Eclipse gesagt, ich müsste es als final erstellen. Ich verstehe das teilweise, aber meine Frage ist, indem ich den Spielerparameter als final festlege, bedeutet das, dass ich keine Haustiere für andere Spieler erstellen kann, nur für den ersten Spieler..

  2. Wie kann ich mein Formular jedem Spieler zeigen, z.B. 2 Spieler im Spiel, beide mit 2 Haustieren, Spieler 1 wählt ein Haustier aus, gibt ihm einen Namen und erstellt es, dann wird ihm gesagt, dass er ein weiteres Haustier erstellen muss (Formular wird erneut angezeigt), also erstellt er ein weiteres Haustier, dann ist Spieler 2 an der Reihe, um 2 Haustiere zu wählen und zu erstellen... Ich versuche herauszufinden, wie ich zum richtigen Zeitpunkt das richtige Spielerargument an die createPet-Methode übergebe...

Bitte lassen Sie mich wissen, ob ich noch etwas anderes erklären soll...

Vielen Dank an jeden, der mir dabei helfen kann!!!!

4voto

Hovercraft Full Of Eels Punkte 280443

Als ich das erstellte Haustier der Spielerliste aller Haustiere hinzugefügt habe, hat Eclipse mir gesagt, dass ich es final erstellen muss. Ich verstehe irgendwie, warum, aber was mich interessiert ist, wenn ich den Spielerparameter final mache, bedeutet das, dass ich keine Haustiere für andere Spieler erstellen kann, nur für den ersten Spieler...

Eclipse verlangt das nicht -- Java tut das, weil du den Spielerparameter in einer anonymen inneren Klasse verwendest und er daher final sein muss. Das wird nicht verhindern, dass du diese Methode auch für andere Spieler verwenden kannst.

Wie kann ich mein Formular jedem Spieler anzeigen, z.B. 2 Spieler im Spiel, beide mit 2 Haustieren, Spieler 1 wählt ein Haustier aus, gibt ihm einen Namen und erstellt es, dann wird ihm gesagt, dass er ein weiteres Haustier erstellen muss (Formular wird erneut angezeigt), also erstellt er ein weiteres Haustier, dann ist Spieler 2 dran, 2 Haustiere auszuwählen und zu erstellen... ich versuche herauszufinden, wie ich das richtige Spielerargument zur richtigen Zeit an die `createPet`-Methode übergeben kann...

Das Haupt-`Game`-Objekt wird das alles steuern, richtig? Ich denke, du könntest eine `for`-Schleife verwenden, die z.B. ein modales Dialogfeld wie ein `JOptionPane` innerhalb der Schleife anzeigt.

Eine andere Möglichkeit besteht darin, eine `JPanel`-Ansicht zu erstellen, die es allen Spielern ermöglicht, ihre Haustiere einzugeben. Es liegt alles bei dir, und ich empfehle dir, mit verschiedenen Ansätzen zu experimentieren.

Eine wichtige Sache, die du frühzeitig sicherstellen möchtest, ist, die Logik deines Programms strikt von der GUI zu trennen. Zum Beispiel sollten deine Klassen `Player` und `Pet` keine Kenntnisse über die GUI haben, keinerlei Swing-Code enthalten, sodass der Code zum logischen Hinzufügen von Haustieren nicht GUI-bezogen ist (kann aber von der GUI verwendet werden).


Bearbeiten
Überlege, deiner `Game`-Klasse eine `registerPlayer(Player player)` oder `editPlayer(Player player)` Methode zu geben, die jeder Spieler aufrufen kann, um ihren Namen, ihre Haustiere und andere benötigte Eigenschaften für das Spiel zu registrieren. Dann sollte diese Methode einmal aufgerufen werden, wenn ein `JButton` gedrückt wird. Lasse das Spiel nicht fortschreiten, es sei denn, alle Spieler wurden ordnungsgemäß registriert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X