Regeln für das Spiel des Lebens:
Hat ein lebendes Feld mehr als 3 oder weniger als 2 lebende Nachbarn stirbt es.
Hat ein totes Feld genau 3 lebende Nachbarn wird es lebendig.
Ich habe einen Fehler in meinem Code und kann ich einfach nicht finden. Hab schon tagelang gesucht. Das Problem ist, dass bei der Methode berechneMatrix, während der Berechnung, die durch jedes Feld geht, schon das berechnete eingetragen wird.
Das Programm sollte eigentlich jedes einzelne Feld in der Matrix1 durchgehen, prüfen ob Leben beim nächsten Durchgang entsteht oder stirbt, und das "berechnete" in Matrix2 eintragen. Jedoch wird schon während der Berechnung in Matrix1 eingetragen und so die Berechnung gefälscht.
Danke fürs Helfen.
MfG Vigol13
Hat ein lebendes Feld mehr als 3 oder weniger als 2 lebende Nachbarn stirbt es.
Hat ein totes Feld genau 3 lebende Nachbarn wird es lebendig.
Ich habe einen Fehler in meinem Code und kann ich einfach nicht finden. Hab schon tagelang gesucht. Das Problem ist, dass bei der Methode berechneMatrix, während der Berechnung, die durch jedes Feld geht, schon das berechnete eingetragen wird.
Das Programm sollte eigentlich jedes einzelne Feld in der Matrix1 durchgehen, prüfen ob Leben beim nächsten Durchgang entsteht oder stirbt, und das "berechnete" in Matrix2 eintragen. Jedoch wird schon während der Berechnung in Matrix1 eingetragen und so die Berechnung gefälscht.
Danke fürs Helfen.
MfG Vigol13
Java:
boolean[][] matrix1 = new boolean[ANZAHL_ZEILEN][ANZAHL_SPALTEN];
boolean[][] matrix2 = matrix1.clone();
public void paint(Graphics g) {
//füllt in die Matrix zufällig Leben
fuellenMatrix(matrix2);
int schritte = 0;
do {
ausgebenMatrix(matrix2);
matrix1 = matrix2.clone();
berechneMatrix(matrix1, matrix2);
schritte++;
//PAUSE 3 SEK
bremse(3000);
System.out.println(schritte);
} while (schritte < MAX_SCHRITTE && existierenUnterschiede(matrix1, matrix2));
}
public static void berechneMatrix(boolean[][] matrix1, boolean [][] matrix2) {
for(int i = 0; i < matrix1.length; i++)
for(int j = 0; j < matrix1[i].length; j++){
if(matrix1[i][j] == false)
if(anzLebendeNachbarn(matrix1, i, j) == 3)
matrix2[i][j] = true;
else
matrix2[i][j] = false;
else
if(anzLebendeNachbarn(matrix1, i, j) > 3 || anzLebendeNachbarn(matrix1, i, j) < 2)
matrix2[i][j] = false;
else
matrix2[i][j] = true;
}
}
public static int anzLebendeNachbarn(boolean [][]matrix, int zeile, int spalte){
int ret = 0;
for(int i = zeile-1; i <= zeile+1; i++)
for(int j = spalte-1; j <= spalte+1; j++)
if(i>=0 && i<matrix.length && j>=0 && j<matrix[i].length)
if(matrix[i][j] == true && !(i == zeile && j == spalte))
ret++;
return ret;
}
}