Hallo liebe Java-Gemeinde,
ich programmiere ein Spiel, bei dem ich Spielfeldplatten kodieren muss. Die Kodierung wird an einen Server übertragen. Sie besteht aus zwei Werten, einem Buchstaben und einer Zahl, die konkateniert werden. Die Buchstaben stehen für bestimmte Plattengrößen, die Zahl sagt etwas über die spätere Belegung der Platten aus und ändert sich während des Spiels. Ich habe für beide Werte Enums erstellt:
Die Platte B6 ohne Belegung wäre 2x3 Felder groß mit der Kodierung
b0b0b0
b0b0b0
die Platte F4 mit der Kodierung
f1f2
f0f2
wäre 2x2 Felder groß, mit einer roten Murmel und zwei schwarzen Murmeln belegt und hätte noch ein freies Feld.
Zum Erstellen dieser Platten habe ich folgende Klasse (noch nicht ganz fertig) erstellt:
Aufgerufen werden die Platten mit folgender Main-Methode:
Mit diesen Klassen kann ich mir schon mal jede Plattengröße ausgeben lassen, sowohl auf der Konsole, als auch zeichnen lassen bei entsprechendem Aufruf. Logischerweise hat aber jede Platte die Kodierung "b0" für jedes einzelne Feld, weil ich im Augenblick diese Werte im Konstrukor zuweise. Ich möchte meinen Konstruktor jetzt dahingehend ändern, dass ich die beiden Enum-Werte als Parameter im Aufruf übergebe, etwa in dieser Art:
Ich habe aber leider keine Idee, wie ich meinen Konstruktor in der Klasse Plate die Enum-Werte als Parameter übergeben kann. Kann mir jemand helfen?
Vielen Dank!
ich programmiere ein Spiel, bei dem ich Spielfeldplatten kodieren muss. Die Kodierung wird an einen Server übertragen. Sie besteht aus zwei Werten, einem Buchstaben und einer Zahl, die konkateniert werden. Die Buchstaben stehen für bestimmte Plattengrößen, die Zahl sagt etwas über die spätere Belegung der Platten aus und ändert sich während des Spiels. Ich habe für beide Werte Enums erstellt:
Code:
public enum EFieldStatePlate {
// die verschiedenen Plates
A10, B6, C6, D6, E6, F4, G4, H4, I4, J4, K3, L3, M3, N3, O2, P2, Q2, R2;
@Override
public String toString() {
switch (this) {
case B6:
return "b";
case C6:
return "c";
case D6:
return "b";
case E6:
return "c";
case F4:
return "b";
case G4:
return "c";
case H4:
return "b";
case I4:
return "c";
case J4:
return "b";
case K3:
return "c";
case L3:
return "b";
case M3:
return "c";
case N3:
return "b";
case O2:
return "c";
case P2:
return "b";
case Q2:
return "c";
case R2:
return "b";
default:
return "a";
}
}
}
Code:
public enum EFieldStateMarble {
// rote Murmel, schwarze Murmel, keine Murmel
RED, BLACK, EMPTY;
@Override
public String toString() {
switch (this) {
case RED:
return "1";
case BLACK:
return "2";
default:
return "0";
}
}
}
Die Platte B6 ohne Belegung wäre 2x3 Felder groß mit der Kodierung
b0b0b0
b0b0b0
die Platte F4 mit der Kodierung
f1f2
f0f2
wäre 2x2 Felder groß, mit einer roten Murmel und zwei schwarzen Murmeln belegt und hätte noch ein freies Feld.
Zum Erstellen dieser Platten habe ich folgende Klasse (noch nicht ganz fertig) erstellt:
Code:
public class Plate extends JPanel {
// Eigenschaften
public String plate[][];
// Konstruktor
public Plate(int r, int c,) {
plate = new String[r][c];
for (r = 0; r < plate.length; r++) { // waagerecht
for (c = 0; c < plate[r].length; c++) { // senkrecht
plate[r][c] = EFieldStatePlate.B6.toString()
+ EFieldStateMarble.EMPTY.toString(); // Codierung Feld
}
}
}
// Methoden
public void showPlate() { // Konsolenausgabe Spielfeldplatte
for (int r = 0; r < plate.length; r++) {
for (int c = 0; c < plate[r].length; c++) {
System.out.print(plate[r][c]);
}
System.out.println();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
drawPlateField(g2d, 2, 3);
}
private void drawPlateField(Graphics2D g2d, int x, int y) {
int posX = x;
int posY = y;
g2d.setColor(Color.BLACK);
g2d.drawRect(posX, posY, 60, 60);
g2d.setColor(new Color(242, 203, 130));
g2d.fillRect(posX + 1, posY + 1, 59, 59);
g2d.setColor(Color.BLACK);
g2d.drawOval(x + 15, y + 15, 30, 30);
g2d.setColor(new Color(242, 203, 130));
g2d.fillOval(x + 16, y + 16, 29, 29);
}
private void drawPlate(Graphics g2d, int x, int y) {
try {
for (int r = 0; r < x; r++) {
for (int c = 0; c < y; c++) {
drawPlateField((Graphics2D) g2d, c * 60, r * 60);
}
}
} catch (Exception e) {
System.out.print(e);
}
}
}
Code:
public class Test {
public static void main(String[] args) {
Plate b0 = new Plate(2, 3);
Plate c0 = new Plate(2, 3);
Plate d0 = new Plate(2, 3);
Plate e0 = new Plate(2, 3);
Plate f0 = new Plate(2, 2);
Plate g0 = new Plate(2, 2);
Plate h0 = new Plate(2, 2);
Plate i0 = new Plate(2, 2);
Plate j0 = new Plate(2, 2);
Plate k0 = new Plate(1, 3);
Plate l0 = new Plate(1, 3);
Plate m0 = new Plate(1, 3);
Plate n0 = new Plate(1, 3);
Plate o0 = new Plate(1, 2);
Plate p0 = new Plate(1, 2);
Plate q0 = new Plate(1, 2);
Plate r0 = new Plate(1, 2);
b0.showPlate();
c0.showPlate();
d0.showPlate();
e0.showPlate();
f0.showPlate();
g0.showPlate();
h0.showPlate();
i0.showPlate();
j0.showPlate();
k0.showPlate();
l0.showPlate();
m0.showPlate();
n0.showPlate();
o0.showPlate();
p0.showPlate();
q0.showPlate();
r0.showPlate();
}
}
Code:
public class Test {
public static void main(String[] args) {
Plate b0 = new Plate(2, 3, EFieldStatePlate, EFieldStateMarble);
b0.showPlate();
}
}
Vielen Dank!