K
KandesBunzler
Gast
Hallo Community.
Ich habe mir einen Minesweeper-Klon geschrieben und als Spielfeld ein zweidimensionales Array von JButtons benutzt. Es funktioniert auch alles so, wie es soll, außer eben das Einfärben. Damit meine ich, dass wie beim Vorbild die Zahl der umliegenden Mienen je nach Anzahl unterschiedlich gefärbt sein soll.
Nur das passiert einfach nicht. Keine Fehlermeldung, der Debugger in Eclipse hat mich auch nicht schlauer gemacht. Es bleibt einfach schwarz. Vielleicht weiß jemand von euch ja Rat. Vermute, dass es vielleicht an den Threads liegt, die die JVM erzeugt, aber ich weiß nicht, wie ich das dann umgehen soll.
Der komplette Sourcecode ist zu lang, hier mal ein Beispiel wie ich das gemacht habe:
Ich habe mir einen Minesweeper-Klon geschrieben und als Spielfeld ein zweidimensionales Array von JButtons benutzt. Es funktioniert auch alles so, wie es soll, außer eben das Einfärben. Damit meine ich, dass wie beim Vorbild die Zahl der umliegenden Mienen je nach Anzahl unterschiedlich gefärbt sein soll.
Nur das passiert einfach nicht. Keine Fehlermeldung, der Debugger in Eclipse hat mich auch nicht schlauer gemacht. Es bleibt einfach schwarz. Vielleicht weiß jemand von euch ja Rat. Vermute, dass es vielleicht an den Threads liegt, die die JVM erzeugt, aber ich weiß nicht, wie ich das dann umgehen soll.
Der komplette Sourcecode ist zu lang, hier mal ein Beispiel wie ich das gemacht habe:
Java:
private void deckeAuf(JButton[][] btns, int zeile, int spalte) {
//Iteration um das geklickte Feld herum
for (int a = zeile - 1; a < zeile + 2; a++) {
for (int b = spalte - 1; b < spalte + 2; b++) {
//IndexOutOfBounds verhindern
if (!(a == -1 || b == -1 || a == this.zeilenAnz || b == this.spaltenAnz || (a == zeile && b == spalte))) {
//Wenn das umliegende Feld keine Bombe enthält und keine 0 ist, aufdecken, bei 0 aufdecken und weiter schauen
if (this.spielfeld[a][b] != -1) {
btns[zeile][spalte].setEnabled(false);
if (this.spielfeld[zeile][spalte] != 0) {
btns[zeile][spalte].setText("" + this.spielfeld[zeile][spalte]);
}
Color tmp = this.getColorForNumber(this.spielfeld[zeile][spalte]);
btns[zeile][spalte].setBackground(Color.WHITE);
btns[zeile][spalte].setForeground(tmp);
if (this.spielfeld[a][b] == 0 && btns[a][b].isEnabled()) {
this.deckeAuf(btns, a, b);
} else {
btns[a][b].setEnabled(false);
//Hier hole ich die Farbe...
Color tmp2 = this.getColorForNumber(this.spielfeld[a][b]);
btns[a][b].setBackground(Color.WHITE);
if (this.spielfeld[a][b] != 0) {
btns[a][b].setText("" + this.spielfeld[a][b]);
}
//...hier setze ich sie. Nix passiert.
btns[a][b].setForeground(tmp2);
}
}
}
}
}
}
private Color getColorForNumber(int i) {
Color clr = null;
switch (i) {
case 1:
clr = new Color(32, 178, 170);
break;
case 2:
clr = new Color(0, 139, 0);
break;
case 3:
clr = new Color(255, 130, 71);
break;
case 4:
clr = new Color(139, 121, 94);
break;
case 5:
clr = new Color(255, 215, 0);
break;
case 6:
clr = new Color(0, 0, 139);
break;
case 7:
clr = new Color(255, 0, 255);
break;
case 8:
clr = new Color(139, 0, 0);
break;
}
return clr;
}