Ich baue gerade an meinem Minesweeper und habe ein 2Dimensionales Array dafür gebaut.
MineField ist eine Klasse aus ein paar integern und booleans.
Dieses grid habe ich als Klasse gebaut und mir dabei etwa solche Funktionen gegeben:
Im eigentlich Spiel initalisiere ich das array mit
Diese Werte werden auch angenommen und korrekt gelesen, so weit kein Problem. Wenn ich jetzt aber auf eine Bombe klicke, führe ich diesen Code aus:
Das Problem liegt jetzt darin, dass sämtlich Felder mit einem B markiert sind. (ausser dem an Stelle x,y). An keiner Stelle ausser bei der initialisierung habe ich ein grid.get(x,y).mined=true stehen, so dass mich das verhalten etwas wundert.
Möglicherweise mache ich sonst etwas falsch, ich programmiere erst seit ein paar Wochen mit Java, davor hab ich mit Pascal gearbeitet und heute habe ich die Lists zum ersten Mal benutzt.
Code:
static List<List<MineField>> grid = new ArrayList<List<MineField>>();
Dieses grid habe ich als Klasse gebaut und mir dabei etwa solche Funktionen gegeben:
Code:
public MineField get(int x, int y) {
// Wenn das zu holende Element nicht da ist:
try {return grid.get(x).get(y);}
catch (IndexOutOfBoundsException e ) {
System.out.println("IndexOutOfBounds bei grid.get: x="+x+ "y="+y);
return null;
}
}
Im eigentlich Spiel initalisiere ich das array mit
Code:
// Die Minen werden gelegt:
for (int i=0; i<countX; i++) {
for (int j=0;j<countY; j++) {
grid.get(i,j).flagged = false;
grid.get(i,j).opened=false;
if (r.nextDouble() < mineProb) {
grid.get(i,j).mined=true; // Bombe
bombCount++;}
else
grid.get(i,j).mined=false; // keine Bombe
} // for y
} // for x
Code:
// eine Mine wurde an der übergebenen Position aufgedeckt
public static void handleDefeat(int x, int y) {
System.out.println("defeat");
f.setTitle("verloren");
for (int i=0; i<countX; i++) {
for (int j=0;j<countY; j++) {
// Bei nicht verminten Feldern werden die Nachbarbomben angezeigt
if (grid.get(x,y).mined) {
if (grid.get(x,y).flagged)
Buttons[i][j].setText("(B)"); // markierte Bombe
else
Buttons[i][j].setText("B"); // nicht markierte Bombe
} else { // Feld ist nicht vermint
int cnt = grid.get(x,y).mineCount;
if (grid.get(x,y).flagged) {
Buttons[i][j].setText("F"); // Falsch markiert
continue;
}
if (cnt==0)
Buttons[i][j].setVisible(false);
else
Buttons[i][j].setText(""+cnt);
}
} // schleife y
} // schleife x
// Die falsche Entscheidung wird angezeigt:
Buttons[x][y].setText("X");
} // handledefeat
Möglicherweise mache ich sonst etwas falsch, ich programmiere erst seit ein paar Wochen mit Java, davor hab ich mit Pascal gearbeitet und heute habe ich die Lists zum ersten Mal benutzt.