Tipps Zur Umsetzung einer GUI für ein Trading Card Game

mybreak

Mitglied
Guten Abend!

Bin neu hier, daher weiss ich nicht genau ob es die richtige Topic ist, deshalb bitte ich dies zu entschuldigen sollte es nicht die richtige sein! 😀

Zu meiner Frage: Irgendwie habe ich ein Brett vorm Kopf. Java Grundlagen besitze ich, auch was GUIs angeht. Soviel vorab.

Ich habe vor, ein selbst ausgedachtes Trading Card Game (Kartenspiel -> ähnlich wie Magic/YuGiOh und co.) in Java umzusetzen. Jedoch fällt es mir schwer, das Grundgerüst der GUI zu bauen. Zunächst der Aufbau des zu sehenden Spiels.

In der Mitte (CENTER) soll ein zunächst leeres Spielfeld von 16 Feldern wo man Karten legen kann (4x4) sichtbar sein.
Oben (NORTH) sollen 5 Karten (des Gegners) verdeckt sichtbar sein.
Unten (SOUTH) ebenfalls 5 Karten (Die eigene Hand (nicht verdeckt)).
Rechts sollen zwei "Nachzieh"-Stapel verdeckt sein.

Vorstellung meinerseits: Die Karten (Eigene Klasse) werden als Deck (30 Stück), welche zunächst auf dem Nachziehstapel liegen, erzeugt. Der Spieler bekommt nun 5 Karten zugeteilt (Reihenfolge ist unwichtig) auf die Hand, welche man logischer weise sieht (Hier Imageeinbindung, vorher jedem einzelenen Kartenobjekt zugeteilt).

Nun soll es vorerst möglich sein, ein KartenObjekt aus der eigenen Hand zu picken (per Mausklick) und dies einem freien Feld in der Mitte zuzuteilen. Die Karte soll aus der Hand verschwinden und eben auf das gewählte Feld "verschoben" werden (Animation spielt vorerst keine Rolle). Danach soll nachgezogen werden. (Ich hoffe es war soweit nachvollziehbar, falls nein werde ich eine Skizze hochladen)

Nun meine Frage, womit wäre es am besten dieses vorhaben umzusetzen? (Es muss immer möglich sein, genau zu identifizieren (per Mausklick) welches Feld und welches KartenObjekt "gepickt" wurde und wo es hingelegt wurde).

Ich habe mehrere Wege die ich mir überlegt hatte. Zuerst alles per Buttons zu machen, Sprich einzelne Felder, die Hand, den Kartenstapel. Diese Buttons mit Images zu versehen und denen KartenObjekte zuzuweisen (Möglich?!).
Anderer Ansatz wäre es das ganze als Zweidimensionales Array aufzuziehen, sprich Raster. Dann per MouseOver/MouseClick Event auszulesen wo die Maus sich befindet und somit die Koordinaten im Array herauszufinden.
Weiterhin bin ich grade auf JavaFX und OpenGL gestoßen. -> Meinungen?

Ich hoffe es ist Ansatzweise verständlich und der ein oder andere hat einen möglichen Ansatz für mich, denn irgendwie bin ich mir nicht sicher, da im nachhinein eine komplexe logik dahinter stecken soll und ich nicht zurückgeworfen werden möchte wegen der GUI. Oder Sollte ich gaaaanz woanders ansetzen????:L

Vielen Dank schonmal für eure Anregungen! Bin sehr gespannt!

lg
 
du könntest das ganze in ein großes gridBagLayout packen

zeile 1: 5 felder für die Karten
zeile 2: 1 feld für den kartenstapel und einen für die ablage und 4 felder zum legen
zeile 3 -8: 4 felder
zeile 9: 1 feld für den kartenstapel und einen für die ablage und 4 felder zum legen
zeile 10: 5 felder für die Karten

oder du machst die ein borderlayout in dem du dann das gridbaglayout implementierts

north = gbc mit 5 felder
left =gbc mit 1 feld
center =4 x4 felder
right = gbc mit 1 feld
south =gbc mit 5 felder

[EDIT]
aber ich würde mir über die oberfläche erst später gedanken machen, und erst die spiellogik hinterlegen
[/EDIT]
 
Zuletzt bearbeitet:
Vielen Dank schonmal für deine Antwort!

Über das Layout mach ich mir momentan eher weniger Gedanken, das habe ich soweit schon mit Buttons "gebaut". Meine Frage bezieht sich eher darauf: Welche Art von Datentyp sollte ich nutzen? Wirklich "unsichtbare" Buttons? Array's ? Labels? Was ganz anderes?


lg!
 
Das ist dir überlassen,
du musst überlegen wie du das im spiel umsetzen willst
Es gibt zum Beispiel auch JToggleButton für den verteidigungsmodus, oder du mischt die labels für die "statischen" felder (handkarten und kartenstapel) und buttons für die spielfelder, oder nur labels

für das spielfeld würde ich wahrscheinlich ein JIrgendwas[][] spielfeld nehmen
am besten du malst erst mal ein wenig auf ein stück papier wie du dir das vorstellst und probierst es dann so umzusetzen, wie es dir am besten gefällt
 
Den Aufbau habe ich soweit, dürfte auch soweit passen.

Ich habe jetzt alles vorerst mit Buttons gemacht. Frage stellt sich jetzt: Ich habe eine Klasse "Card" und eine Klasse Stapel. Stapel soll 30 Card-Objekte erstellen (mit einzelnen Parametern UND einem Image). Wiederum die "Main" Klasse soll 2 Stapel-Objekte mit jeweiles 30 Karten erzeugen. Welche dann eben an der rechten Seite sind. Mit welchen Mitteln ist es möglich dieses vorhaben zu realisieren? Unter anderem auch das durch einen Mouselistener bzw. Action listener die Methode "ziehen();" aufgerufen wird und 5 Card-Objekte aus dem Stapel in die andere Klasse "Hand" (wovon der MainFrame ein Objekt erstellt hat, mit 5 Buttons) "verschiebt" werden sozusagen. Überlegung wäre das card1 Objekt via button.add(card1); zu übergeben (salop beschrieben, nicht möglich da kein Component). Ideen dazu? :bahnhof:
 
Zuletzt bearbeitet:
um den Kartenstapel bzw. die Handkarten zu halten kannst du eine List<Karte> bzw. ArrayList<Karte> mit Kartenobjecten nutzen und das kartenobject hält die Parameter und die Referenz auf das jeweilige img
 

Zurück
Oben