BlueJ Wie programmiere ich das?

1 Antwort

(...) ich verwende in BlueJ eine von der Schule gestellt Basis Bibliothek.

Ich vermute einmal, es handelt sich um die basisUTF8151026.jar.

Nun möchte ich dass man in einem extra Menü (...) seine Karten die man nutzen möchte auswählen kann (...)

Du bräuchtest eine Klasse, die eine Karte beschreiben/repräsentieren kann. Für das Auswahlmenü kannst du ein Array anlegen, welches dann alle Karten, die zur Auswahl stehen, aufführt.

Visuell könnten die Karten mittels Buttons (Knöpfen) dargestellt werden. Du iterierst also mit einer Schleife über das Array und legst je Eintrag einen Knopf an und fügst ihn zur grafischen Oberfläche hinzu. Jeder Knopf wird zudem mit einem KnopfLauscher ausgestattet, in welchem die zum Button zugehörige Karte in ein neues Array (oder eine Liste) eingefügt wird.

Das soweit einmal angedeutet:

private int maximalErlaubteKartenanzahl = 10;
private Karte[] ausgewaehlteKarten = new Karte[maximalErlaubteKartenanzahl];
private int aktuellGewaehlteKartenzahl = 0;

/* ... */

for (Karte karte : auswahlKarten) {
  Knopf knopf = new Knopf(/* ... */);
  knopf.setzeKnopfLauscher(gedrueckterKnopf -> {
    if (aktuellGewaehlteKartenzahl < maximalErlaubteKartenanzahl) {
      ausgewaehlteKarten[aktuellGewaehlteKartenzahl++] = karte;
    }
  });
}

Der setzeKnopfLauscher-Methode wird eine anonyme Funktion übergeben. Die kann sich die Werte aus dem aktuellen Kontext merken. Bei Knopfdruck wird sie ausgeführt und kann das Kartenobjekt, welche sie sich bei ihrer Definition gemerkt hat, in das Array einfügen, welches die ausgewählten Karten speichert.

(...) und die dann in der Klasse: Arena (...) erscheinen.

Wenn der Spieler entscheidet, das Spiel zu starten (bspw. via Klick auf einen Startknopf), kannst du ein neues Arena-Objekt anlegen und dem die ausgewählten Karten übergeben. Entweder direkt über den Konstruktor oder über eine Setter-Methode.

Beispiel:

class Arena {
  private Karte[] spielkarten;

  public Arena(Karte[] spielkarten) {
    this.spielkarten = spielkarten;
  }
}

// create Arena object
Karte[] karten = // get karten ...
Arena arena = new Arena(karten);