Conways Spiel des Lebens
-
Hey leude
mein code generiert am ende irgentwie nur die einfache blockform als stabile kolonie eigentlich sollten aber mehrere formen enstehen//--------------------------------------------------------------------------- #include<iostream.h> #include<iomanip.h> #include<conio.h> #include<stdlib.h> #include<time.h> #include<dos.h> //--------------------------------------------------------------------------- void fuellenheute(); void sterben_leben(); void print(); void erase(); //--------------------------------------------------------------------------- const int Ebene = 2, Zeile=24, Spalte=70; int feld [Ebene][Zeile][Spalte]; //--------------------------------------------------------------------------- void main() { srand(time(NULL)); fuellenheute(); sterben_leben(); getch(); } //--------------------------------------------------------------------------- void fuellenheute() { for (int z = 0;z < Zeile ;z++) for (int s = 0 ;s < Spalte ; s++) feld [0][z][s] = rand() % 2; print(); } //--------------------------------------------------------------------------- void sterben_leben() { while (true) { for (int z = 0;z < Zeile ;z++ ) for (int s = 0;s < Spalte ; s++) { for (int rausZeile = z - 1;rausZeile <= z+1 ;rausZeile++){ for (int rausSpalte = s - 1;rausSpalte <= s+1 ; rausSpalte++){ if (rausSpalte < 0) continue; else if (rausZeile < 0) continue; else if (rausSpalte > Spalte - 1) continue; else if (rausZeile > Zeile - 1) continue; if (z != rausZeile) feld [1][z][s] += feld [0][rausZeile][rausSpalte]; else if (s != rausSpalte) feld [1][z][s] += feld [0][rausZeile][rausSpalte]; } if (feld [1][z][s] > 3) feld [0][z][s] = 0; else if (feld [1][z][s] < 2) feld [0][z][s] = 0; else if (feld [1][z][s] == 3) feld [0][z][s] = 1; } } print (); erase (); } } //--------------------------------------------------------------------------- void print(){ clrscr(); for (int z = 0;z < Zeile ;z++ ) { for (int s = 0;s < Spalte ;s++ ) { if (feld [0][z][s] == 1) cout << "*"; else cout << " "; } cout << endl; } sleep(1); } //--------------------------------------------------------------------------- void erase() { for (int z = 0;z < Zeile ;z++) for (int s = 0 ;s < Spalte ; s++) feld [1][z][s] = 0; }kann mir einer sagen, wo der harken ist?
oder vllt einfach nur verbesserungsvorschläge allgemein...danke schonmal
CMW
-
CMW schrieb:
if (feld [1][z][s] > 3) feld [0][z][s] = 0; else if (feld [1][z][s] < 2) feld [0][z][s] = 0; else if (feld [1][z][s] == 3) feld [0][z][s] = 1;Das gehört in eine eigene Schleife, andernfalls überschreibst du vorzeitig Daten, die für die folgenden Felder noch gebraucht werden.