Habe Conway's Game of Life vor einiger Zeit mal geschrieben. Habe allerdings keine variable Feldgröße und die Startbelegung der Zellen ist bei mir im Quelltext festgelegt, werde mal gucken das ich diese Sachen noch mache.
Habe aber als Spielefläche die Form eines Torus genommen, so kommen sich bewegende Gebilde wieder ins Spielfeld gelaufen.
Code:
#include <stdio.h>
#include<stdlib.h>
int zeile = 15;
int spalte = 30;
int zustand[15][30];
int tmp[15][30];
void initialisieren(){
for ( int i = 0; i < zeile; i++){
for (int j = 0; j < spalte ;j++){
zustand[i][j] = 0;
}
}
zustand[0][0] = 1;
zustand[0][1] = 1;
zustand[0][29] = 1;
zustand[1][0] = 1;
zustand[4][11] = 1;
zustand[5][10] = 1;
zustand[5][11] = 1;
zustand[5][12] = 1;
zustand[6][11] = 1;
zustand[14][0] = 1;
for ( int i = 0; i < zeile; i++){
for (int j = 0; j < spalte ;j++){
tmp[i][j] = 0;
}
}
}
void neuegeneration(){
for (int laufzeile = 0; laufzeile < zeile; laufzeile++){
for ( int laufspalte = 0; laufspalte < spalte; laufspalte++){
int zelllebend = 0;
for ( int zaehllaufzeile = laufzeile - 1; zaehllaufzeile < (laufzeile + 2); zaehllaufzeile++){
for ( int zaehllaufspalte = laufspalte - 1; zaehllaufspalte < (laufspalte + 2); zaehllaufspalte++){
zelllebend = zelllebend + zustand[(zaehllaufzeile + zeile) % zeile][(zaehllaufspalte + spalte) % spalte];
}
}
if (zustand[laufzeile][laufspalte] == 0 && zelllebend ==3){
tmp[laufzeile][laufspalte] = 1;
}
else{
if (zustand[laufzeile][laufspalte] == 1 && (zelllebend ==3 || zelllebend ==4)){
tmp[laufzeile][laufspalte] = 1;
}
else{
tmp[laufzeile][laufspalte] = 0;
}
}
}
}
}
void genuebertrag(){
for ( int i = 0; i < zeile; i++){
for (int j = 0; j < spalte ;j++){
zustand[i][j] = tmp[i][j];
}
}
}
void ausgabe(){
for ( int i = 0; i < zeile; i++){
for (int j = 0; j < spalte ;j++){
printf("%d", zustand[i][j]);
}
printf("\n");
}
printf("\n");
}
int main(){
system("cls");
initialisieren();
printf("Ausgangszustand:\n");
ausgabe();
for ( int i = 0; true; i++){
printf("%d.Iteration:\n", i+1);
neuegeneration();
genuebertrag();
ausgabe();
system("pause");
system("cls");
}
}