# Kartenspiel Framework



## CSHW89 (11. Mai 2020)

Hallo zusammen,

ich habe vor ein Kartenspiel zu programmieren. Die Spiellogik ist auch schon sehr gut fortgeschritten. Ich kann das Spiel quasi auf der Console spielen. Nun möchte ich natürlich das Spiel grafisch darstellen. Ich habe ein paar Anforderungen, die erfüllt werden sollten, und überlege gerade, welches Framework ich benutzen sollte.
Ich habe ein Board mit Stapeln von Karten, sowie Karten, die arrangiert sind als Hand. Karten sollten sich von Stapel zu Stapel bzw. zur Hand bewegen. Die Karten sollten vergrößert dargestellt werden, damit Informationen darauf gelesen werden können. Die Karten sollten leicht gedreht werden, damit die Hand hübscher angezeigt werden kann. Die Stapel auf dem Board sollten entsprechend eines Layouts positioniert werden, und sich verschieben, falls sich das Fenster vergrößert/verkleinert. Es sollte natürlich performant sein bzw. nicht ruckeln.

Für Graphikdarstellungen habe ich viel swing gelesen, und damit kenne ich mich auch halbwegs gut aus (zumindest bei normalen "Windows"-Anwendungen). Allerdings habe ich die Befürchtung, dass gerade Animationen, Vergößerungen und Drehungen nicht smooth dargestellt werden. Eine andere Idee wäre openGL-basierte Frameworks, libgdx habe ich z.b. gelesen. Gibt es noch andere, die man empfehlen könnte? Oder ggf. ganz andere Frameworks? Eine weitere Frage, die sich mir stellt, wäre ein Layoutsystem verwenden, oder alles selbst berechnen. Bei swing würde sich natürlich anbieten, die einzelnen Stapel als JComponent darzustellen, und durch das Layoutsystem zu positionieren. Was mache ich allerdings mit den bewegenden Karten, die sich von einem Stapel zum anderen bewegen (ggf. über andere Stapel hinweg)? Bieten openGL-basierte Frameworks was ähnliches an? Oder sollte ich lieber eine große Fläche "bemalen" und die Positionen selbst berechnen?

Nochmal kurz zusammenfassend (falls jemand den Text nicht lesen will ).
Die Anforderungen:
- Anzeige Stapel/Hand mit Karten
- Karten bewegen sich von Stapel zu Stapel bzw. Hand
- Karten vergrößern
- Karten leicht drehen
- Stapel anhand eines Layouts positionieren anhängig von der Fenstergröße
Fragen:
- swing? Performance?
- openGL-Framework (z.b. libgdx)? Anderes Framework?
- Layoutsystem des Frameworks oder selbst berechnen?

Vielen Dank und Grüße
Kevin


----------



## CSHW89 (12. Mai 2020)

Hat keiner hier mal mit Java grafische Anwendungen/Spiele programmiert? Ich wäre auch für kleine Anregungen oder Meinungen dankbar.


----------



## LimDul (12. Mai 2020)

Ich hab vor Urzeiten (zu Studiumszeiten) mal Carcassonne in Java programmiert. Das hab ich damals mit Swing gemacht.

Grundsätzlich hast du ja kein Action Spiel vorher, daher sollte Swing oder JavaFX ausreichen. Zu JavaFX kann ich nichts sagen, da hab ich mich bisher noch nicht mit beschäftigt.

Ich würde es in Swing als erste Idee wie folgt machen:
- Ein großes JPanel indem sich das ganze dynamische Zeug abspielt. Das bekommt ein Null-Layout. 
- Alles was dann gezeichnet werden soll entweder als eigenes, transparentes JPanel da rein oder direkt in paintComponent zeichen - würde ich schauen was einfacher ist, kann man ggf. auch mixen (dann wirds nur mit der Z-Order unter Umständen tricky)
- Für Animtationen kann man sowas wie Timer verwenden, was alle X-Millisekunden eine neue Position berechnet und repaint aufruft (Hier aufs korrekte Threading achten, dass alles relevante im Event Dispatching Thread stattfindet).

Dann musst du natürlich die Positionen selber berechnen. Solltest du mit einem LayoutManager arbeiten wollen, würdest du allerdings zumindest für die Bewegung den Pfad selber berechnen müssen, da kommst du glaub ich nicht drum rum.

Andere, opengl/gdx bieten vielleicht mehr Komfort, aber da muss ich passen. Ich bin auch mehr der Mensch, der im Bereich Enterprise Anwendungen und Co unterwegs ist.


----------



## temi (13. Mai 2020)

JavaFx kannst du dir auch mal anschauen. Da werde bereits einige Möglichkeiten für Animationen mitgeliefert.


----------



## Kultmann (22. Mai 2020)

temi hat gesagt.:


> JavaFx kannst du dir auch mal anschauen. Da werde bereits einige Möglichkeiten für Animationen mitgeliefert.


Ich kann auch JavaFx wärmstens für solche Einsatzzwecke empfehlen. Ich weiß aus sicherer Quelle, dass sogar manche Online Casinos auf sportwetten.org damit arbeiten.


----------

