AWT Images aus Imagearray an die Maus pappen und bewegen

gulty

Mitglied
Hallo,
bei vielen Dingen bin ich bisher auf dieses Forum gestoßen und es hat mir sehr geholfen, hier etwas zu lesen. Jetzt hab ich mich mal dazu durchgerungen einen Account zu erstellen, um eine Frage bzgl. eines Spiels, welches ich programmiere, loszuwerden.

Es geht um eine Schachspiel Application mit einem Frame. Das Schachbrett wird über eine for Schleife gezeichnet, d.h. es werden Rechtecke aneinandergefügt und dabei immer überprüft, ob das vorherige Feld schwarz oder weiß ist und das Gegenteil wird gezeichnet. Soweit sogut, klappt. Dann habe ich ein zweidimensionales Image Array erstellt. Dieses enthält die Schachfiguren, welche gleichzeitig in startaufstellung angeordnet sind.

Aus diesem Feld lasse ich bisher auch gleichzeitig über die Schleife, welche das Brett zeichnet die Startposition zeichnen.

Nun ist meine Frage, wie ich am besten mit dem MouseListener ein Feld auswählen kann und das Image was auf diesem Feld liegt an die Maus pappen und auf ein neues Feld verschieben.

Die Idee ist, die Mauskoordinaten auszulesen und beim Click/Drag mit einer riesigen switch anweisung nochmal zu überprüfen, wo die koordinaten liegen. wenn sie zb zwischen 0 und 60 (für x und y) liegen, dann ist feld 1 gemeint. dafür wird auf das array figuren[0][0] (1. position) zugegriffen, der inhalt an die maus gepappt. beim loslassen werden wieder die koordinaten überprüft und der arrayinhalt in das neue feld geschrieben und aus dem alten gelöscht.

Meine Frage: Ist diese Denkweise denn sinnvoll? Geht es nicht auch viel einfacher, als für jedes Kästchen eine riesen Switch Abfrage zu machen? Kann ich den Mauslistener direkt an ein Bild aus einem Feld hängen oder ist es sinnvoller ein weiteres Array mit den Kästchenkoordinaten zu erstellen?

Wie pappe ich überhaupt ein Image aus einem Array an die Maus?

Ziel ist es in meine Malschleife neben den Kästchen auch immer das korrekte ArrayImage an die korrekte Stelle zu malen und durch Mausbewegung auch die Speicherung durchzuführen..

Ist jetzt etwas allgemein, wenn jemand am Quellcode interesse hat, bitte ich um eine PM.

Liebe Grüße,
gulty
 
n / Breite der Schachfelder = Feld.
Damit kannst du es dir ausrechnen, vorrausgesetzt, das Panel hat genau die Größe Breite der Schachfelder * 8. Sonst musst du vorher von n natürlich den Rand als Differenz abziehen.
z. B. x = 213, Breite der Schachfelder = 60px,
213 / 60 = 3.55, Abgerundet = 3, also befindet sich die Maus auf dem 4. Feld horizontal.
So kannst du die momentane Figur beim Klicken im MouseListener (mousePressed) herausfinden, das Feld der Figur ausrechnen und die Mausposition cachen. In einen MouseMotionListener/mouseDragged kannst du die Figur dann um die Differenz verschieben, beim Loslassen (mouseReleased) wieder das richtige Feld ausrechnen und sie darauf ausrichten.
 
Vielen dank für die schnelle Antwort. Genau auf dem Wege habe ich mir das auch vorgestellt.. Aber ist etwas kürzer, als das, was ich bisher habe..

Mir geht es hauptsächlich um die Funktionen, d.h. wie kann ich das Image aus dem Array "Figur [4][4]" an die maus packen beim click?
 
Du speicherst die Klickposition zwischen, errechnest dir bei der Mausbewegung die Differenz und zeichnest das Bild um die Differenz verschoben?
 
Es geht darum, dass ich gern das Bild an der Maus hängen haben will.. Das verschieben ist mir klar, aber das Drag and Drop. Die Figur soll bei gedrückter Maus am Zeiger hängen..
 

Zurück
Oben