# Frage zum GUI-Design bei Brettspielen



## Boar (16. Mrz 2007)

Moin,

mir geht seit längerem ne Frage durch den Kopf:

Mir fallen spontan 2 Ansätze ein, wie man ein (Swing-) GUI für ein simples Brettspiel aufbauen könnte. 
Einmal könnte man nur mit der paintComponent-Methode arbeiten und alle Elemente auf dem Brett zeichnen. 
Der zweite Ansatz (so hab ichs bisher meistens gemacht) wäre, über das Brett-Panel verschiedene JLabels zu legen und die Elemente (Spielfiguren) in den Labels zu platzieren. 

Als Beispiel mal Mensch ärger dich nicht: Wenn man alle Elemente (Spielfelder & Spielfiguren) mit paintComponent zeichnet, müsste man jedes mal die Koordinaten berechnen, oder? Wenn man jedes Spielfeld als JLabel realisiert, platziert man die Labels einmal und lässt dann die Spielfiguren von Label zu Label springen.

Meine Frage ist jetzt, ob es hier eine Standard-Variante gibt, also das eine der beiden Varianten deutliche Vorteile mit sich bringt, oder ob es einfach Geschmackssache ist?

Gruß,
Boar


----------



## The_S (16. Mrz 2007)

Das kommt immer darauf an was du machen möchtest. Ein Brettspiel mit sehr viel statischen Inhalt und wenigen Animationen würde ich auch eher so wie du lösen. Ein Jump & Run Spiel z. B. würde ich aber aufgrund der hohen Anzahl an Animationen und des dynamischen und flexiblen Inhalts eher selber Zeichnen.


----------



## AlArenal (16. Mrz 2007)

Nein, es gibt keinen "Brettspiel-Standard" in Java. Man macht es so, wie man es am besten umgesetzt bekommt und wie man es am besten erweiterbar hält.

Im ersten Schritt ist eine Umsetzung des View über JLabel für die Spielfelder sicher nen gangbare Methode. Sobald du aber etwas zeichnen musst, was sich nicht an die Grenzen der Spielfelder hält, wirds pfriemelig.

Der Ansatz sich seinen View selbst zu stricken ist der deutlich vriablere Weg, während der JLabel-Weg schneller zu einem ersten Ergebnis führt. Wenn man MVC halbwegs ordentlich implementiert hat, sollte man problemlos mit der einfachen methode anfangen können (um schnell zu einem Ergebnis zu kommen und die Logik zu implementieren und zu testen) und kann später parallel zum bereits lauffertigen Spiel einen neuen View entwickeln, der etwas mehr Eye-Candy bietet und später ermöglicht zusätzliche Funktionen einzubringen (Visualisierung/Animation von Spielzügen/Figuren, ...).


----------



## Lim_Dul (16. Mrz 2007)

Ich kann mal meinen Ansatz darstellen, ich hab das Spiel Carcasonne implementiert.

Die einzelnen Karten, die man legt sind jeweils JPanels mit einem null Layout, die auf einem null Layout Spielfeld liegen.

Das Spielfeld ist im Prinzip ein Gitter, ich hab mich aber gegen einen LayoutManager entschieden, dass das GridLayout dafür nicht geeignet ist. (Da kann man nicht einfach zellen leer lassen)
Das GridBagLayout würde gehen, aber a) konnte ich damals das  nicht wirklich und b) fand ich die freiheit dafür sinnvoll.

Auf den einzelnen Karten sitzen die Figuren und sonstige Extra-Elemente als durchsichtige Panels, die nur ein Bild darstellen.

Um Koordinaten berechnen wird man aber meines Erachtens irgendwann nicht drumherum kommen, da man es bei Spielfeldern meistens mit Graphiken zu tun hat, die man gerne auch pixelgenau plazieren will.


----------



## Boar (16. Mrz 2007)

Ok, dankeschön! Da hab ich doch mal ein paar Ansätze/Ideen, mit denen sich was anfangen lässt. 

Schönes Wochenende


----------

