Hallo zusammen!
Wir arbeiten an einem MapEditor. Dank dem Button "New Map" kann der Benutzer ein Spielfeld mit gewünschter Grösse initialisieren. Das Spielfeld besteht dann aus entsprechend vielen Hexagone. Der Anfangszustand der Hexagone ist blau (die Map besteht nur aus Wasser). Der Benutzer kann im nächsten Schritt dank Buttons (Wald,Wiese,Wasser,Fels) einzelne Hexagons neu färben.
Ziel des Editors:
Die Attribute der Hexagons werden in einem dahinterliegenden 2Dim.Array gespeichert.
Beispiel:
Das erste Hexagon wird grün gefärbt. Die Information grün wird im Array[0][0] gespeichert.
Die einzelnen Informationen sind dann in einer Tabelle gespeichert und haben somit eine Position auf der Karte. Dies ist für die nächste Instanz wichtig, denn sie zeichnet die Map - grün würde in dem Fall eine Wiese ergeben.
Meine Probleme:
1) Wenn ich mein "HexGrid" in einem JPanel öffnen will geschieht nichts (in einem JFrame aber schon)
2)Wie kann ich dem einzelnen Hexagon einen MouseListener geben? (also wie kann ich einzelne Hexagons durch Mausklick verändern?)
Hier ist mein bestehender code:
ps: die zwei Polygonen pi & po (polygon in & polygon out) werden übereinander gezeichnet. Pi ist kleiner als po. Der grössere wird schwarz bemalt, damit der Effekt eines Randes entsteht.
Vielen Dank
Wir arbeiten an einem MapEditor. Dank dem Button "New Map" kann der Benutzer ein Spielfeld mit gewünschter Grösse initialisieren. Das Spielfeld besteht dann aus entsprechend vielen Hexagone. Der Anfangszustand der Hexagone ist blau (die Map besteht nur aus Wasser). Der Benutzer kann im nächsten Schritt dank Buttons (Wald,Wiese,Wasser,Fels) einzelne Hexagons neu färben.
Ziel des Editors:
Die Attribute der Hexagons werden in einem dahinterliegenden 2Dim.Array gespeichert.
Beispiel:
Das erste Hexagon wird grün gefärbt. Die Information grün wird im Array[0][0] gespeichert.
Die einzelnen Informationen sind dann in einer Tabelle gespeichert und haben somit eine Position auf der Karte. Dies ist für die nächste Instanz wichtig, denn sie zeichnet die Map - grün würde in dem Fall eine Wiese ergeben.
Meine Probleme:
1) Wenn ich mein "HexGrid" in einem JPanel öffnen will geschieht nichts (in einem JFrame aber schon)
2)Wie kann ich dem einzelnen Hexagon einen MouseListener geben? (also wie kann ich einzelne Hexagons durch Mausklick verändern?)
Hier ist mein bestehender code:
ps: die zwei Polygonen pi & po (polygon in & polygon out) werden übereinander gezeichnet. Pi ist kleiner als po. Der grössere wird schwarz bemalt, damit der Effekt eines Randes entsteht.
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
public class Hexagon {
Polygon pi;
Polygon po;
int posx;
int posy;
String color;
Hexagon(int posx, int posy, String color) {
this.color = color;
this.posx = posx;
this.posy = posy;
pi = new Polygon();
po = new Polygon();
}
public void draw(Graphics g) {
// draw outline
for (int i = 0; i < 6; i++) {
po.addPoint((int) (posx + 32 * Math.cos(i * 2 * Math.PI / 6)),
(int) (posy + 32 * Math.sin(i * 2 * Math.PI / 6)));
}
g.setColor(Color.BLACK);
g.fillPolygon(po);
// draw inside
for (int i = 0; i < 6; i++)
pi.addPoint((int) (posx + 30 * Math.cos(i * 2 * Math.PI / 6)),
(int) (posy + 30 * Math.sin(i * 2 * Math.PI / 6)));
// set color
if (color.equals("YELLOW")) {
g.setColor(Color.YELLOW);
g.fillPolygon(pi);
} else if (color.equals("CYAN")) {
g.setColor(Color.CYAN);
g.fillPolygon(pi);
} else if (color.equals("GREEN")) {
g.setColor(Color.GREEN);
g.fillPolygon(pi);
} else if (color.equals("MAGENTA")) {
g.setColor(Color.MAGENTA);
g.fillPolygon(pi);
}
}
}
Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.Polygon;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
class HexGrid extends JPanel {
private static final long serialVersionUID = 1L;
Hexagon[][] hexArray;
int height;
int length;
HexGrid(int length,int height){
this.height= height;
this.length= length;
}
public void paintComponent(Graphics g) {
int posx = 35;
int posy = 35;
hexArray = new Hexagon[height][length];
for (int i = 0; i <= length - 1; i++) {
for(int j=0;j<=height-1;j++){
hexArray[j][i] = new Hexagon(posx, posy, "CYAN");
hexArray[j][i].draw(g);
posy = posy + 53;
}
posx=posx+47;
if (posy == 35+height*53)posy=62;
else posy=35;
}
}
}
Vielen Dank