Java:
boolean[][] matrix1 = new boolean[ANZAHL_ZEILEN][ANZAHL_SPALTEN];
boolean[][] matrix2 = matrix1.clone();
public void paint(Graphics g) {
fuellenMatrix(matrix2, 1);
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;
}
}