Objekt selbst zeichnen lassen?

x_Red_Eagle_x

Erfahrenes Mitglied
Ich möchte ein Spiel (gleicht einem Puzzle) implementieren welches aus einem Spielbrett und verschiedenen Spielsteinen besteht. Die Spielsteine sollen auf das Spielbrett per Drag&Drop gezogen bzw. vom Spielbrett genommen werden.

Ich habe mir zwei Varianten überlegt wie es funktionieren könnte:

1. Jedes Objekt (Spielstein/Spielbrett) zeichnet sich selbst.
Wie kann ich da Drag&Drop einbinden?
Immer ein eigenes JPanel oder so verwenden?
Da JPanels ja rechteckig sind und die Spielsteine nicht immer das ganze JPanel ausnutzen, gibt es sowas wie transparenz bzw. wie schaut es mit Spielsteinüberlagerungen aus?

2. Das Spielfeld alles zeichnen lassen, da es sowieso wissen muss welche Spielfelder belegt sind und welche nicht.

Ich kenne mich noch nicht wirklich gut aus in Java, also möchte ich mal um eure Meinungen zu dieser "Aufgabe" bitten. -> die GUI ist das größte Problem für mich (falls ein paar meinen es ist das Einzige, stimmt nicht ganz; das ist nur ein Teil vom Projekt)

schon mal danke fürs durchlesen
mfg

PS: im Anhang ist ein Bild vom Spiel, dann wird das Problem vielleicht etwas klarer.
 

Anhänge

  • spiel.jpg
    spiel.jpg
    43,2 KB · Aufrufe: 94
Hmm, ich würde es nicht alles in einzelne objekte kapseln und das objekt sich selbst zeichnen lassen. Das objekt würde ich nur als Datenhalter nehmen, was im Modell selbst verwendet wird.

Das spielbrett sollte nach einem update alles zeichnen lassen. Zur performance unterstützung würde ich dann aber nur teile des Fensters neuzeichnen lassen und nicht das ganze fenster. Da es kein schnelles "Action" Spiel ist, brauchst du auch kein Doublebuffering zu berücksichtigen um flackern zu vermeiden.

Das wäre mein gedanke dazu. Wie sehen es die anderen?
Willst du unbedingt bilder verwenden? Sprich ein Image, welches du eingescannt hast? Oder langt hierbei nicht einfach die Java2D API zu nehmen und die farbigen kreise selbst einbinden, bzw. die linienzüge?

Ansonsten: Thomas Darimont hat mal einen schönen Thread bzgl. Spieleprogrammierung in Java aufgemacht: http://www.tutorials.de/forum/showthread.php?t=176378

Hier wirst du bestimmt mit deinen Fragen fündig.

Grüsse

Torsten
 
x_Red_Eagle_x hat gesagt.:
Ich möchte ein Spiel (gleicht einem Puzzle) implementieren welches aus einem Spielbrett und verschiedenen Spielsteinen besteht. Die Spielsteine sollen auf das Spielbrett per Drag&Drop gezogen bzw. vom Spielbrett genommen werden.

Ich habe mir zwei Varianten überlegt wie es funktionieren könnte:

1. Jedes Objekt (Spielstein/Spielbrett) zeichnet sich selbst.
Wie kann ich da Drag&Drop einbinden?
Immer ein eigenes JPanel oder so verwenden?
Da JPanels ja rechteckig sind und die Spielsteine nicht immer das ganze JPanel ausnutzen, gibt es sowas wie transparenz bzw. wie schaut es mit Spielsteinüberlagerungen aus?

2. Das Spielfeld alles zeichnen lassen, da es sowieso wissen muss welche Spielfelder belegt sind und welche nicht.

Ich kenne mich noch nicht wirklich gut aus in Java, also möchte ich mal um eure Meinungen zu dieser "Aufgabe" bitten. -> die GUI ist das größte Problem für mich (falls ein paar meinen es ist das Einzige, stimmt nicht ganz; das ist nur ein Teil vom Projekt)

schon mal danke fürs durchlesen
mfg

Wir hatten ein ähnliches Problem mit einem Schachprogramm, allerdings zunächst ohne Drag&Drop. Geht via Anklicken Ausgangsfeld-Zielfeld, kannst Dir die Sourcen ja mal anschauen: http://www.java-chess.de
Und zum Thema Drag&Drop gab es hier im Forum auch schon Beiträge.
 
Halli hallo,
also ich habe solche Dinge imemr so gelöst indem ich die paintComponent-Routine für meine Bedürfnisse angepasst habe.
diese Zeichnet dann anhand der Spielsteine, die ihr eigenes Image beinhalten, die sie aus einem Spiel-Model (s. MVC) bekommt.
Drag und Drop habe ich bisher nie in der 'neueren' Java-Standard-Technik bewerkstelligt, sondern immer mit den Mouse- und MouseMove-Listenern (oder wie die so heißen). Man benötigt für solches dann natürlich entsprehcende KoordinatentransformationsRoutinen, die die physische Mouse-Koordinate in eine logische umrechnen und umgekehrt. (Ist eigentlich nichts anderes als Dreisatz-Rechnung, da man ja die Größe des Panels berücksichtigen muß.)

Da ich bisher sowas immer nur in Swing bewerkstelligt habe, habe ich mich um double-buffering nie wirklich gekümert, denn Swing liefert das ja eigetnlich mit.

(hier mal Reklame in eigener Sache :) )
Ich habe einen Prototypen eines Schachspiels, welches man mit 4 Personen spielen kann.
Es ist als Java-Webstart-Anwendung gebaut und funktioniert auch weitgehend sogar übers Netz, mit sicher noch dem ein oder anderen Bug.

http://schachspiele.game-host.org

(dies ist allerdings eine Seite mit einer dynamschen IP, und nur dann online, wenn ich explizit freischalte. Also nicht wundern wenn sie öfters nicht im Netz ist.)

Takidoso
 

Neue Beiträge

Zurück