BlueJ Wie programmiere ich das?
Hallo zusammen, ich habe mir vorgenommen ein Cardgame, ähnlich wie dieses TGC von Genshin Impact zu erstellen. (Natürlich in einer kleineren simpleren Variante).
ich verwende in BlueJ eine von der Schule gestellt Basis Bibliothek.
Nun möchte ich dass man in einem extra Menü (Klasse: Kartensammlung) seine Karten die man nutzen möchte auswählen kann und die dann in der Klasse: Arena (Der Ort wo das Spiel stattfindet) erscheinen.
Ich habe aber keinen Schimmer wie es geht :/ Ich habe bereits versucht jede Karte mit der Variable: Auswahl einen Wert zuzuteilen und diesen dann mit If(…){} abzufragen, ohne Erfolg.
Könnte mir jemand dabei Helfen? Ich kann den Code leider nicht hochladen, da ich diesen Text hier am Handy schreibe. Aber wenn jemand sich da auskennt, würde ich mich sehr freuen. LG
(Dass ist das erste mal das ich Gute Frage.de verwende, also seid nicht zu streng mit mir, wenn ich was falsch gemacht haben sollte.)
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);