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


  • Mod

    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.


Anmelden zum Antworten