2017-11-26 5 views
-1

Ich entwickle Spiel des Lebens für meine Aufgabe. Ich versuche die Zufallszahl für das Seeding zu verwenden, aber die nächste Generation funktioniert nicht. Wie kann ich die zufällige Seeding verwenden, um die nächste Generation zu überprüfen. Wenn ich den manuellen Seeding benutze, funktioniert der Code gut. Aber wird nicht funktionieren, wenn ich zufälliges Seeding verwende.Zufällige Aussaat in Game of Life kann nicht gut funktionieren

Handbuch Seeding

for (int i = 0;i<n;i++) 
{ 
    cout << "Enter the coordinates of cell " << i + 1 << " : "; 
    cin >> x >> y; 
    gridOne[x][y] = true; 
    printGrid(gridOne); 
} 

Zufalls Seeding

void generation(int gridOne[gridSize + 1][gridSize + 1]) 
{ 
int row, col; 
srand(time(0)); 
for (row = 0; row < gridSize + 1; row++) 
{ 
    for (col = 0; col < gridSize + 1; col++) 
    { 
     gridOne[gridSize + 1][gridSize + 1] = (int)(rand() % 2); 
     cout << gridOne[gridSize + 1][gridSize + 1] << ' '; 
    } 
    cout << endl; 
} 
} 

Hauptprogramm

int main() 
{ 
clock_t begin, finish; 
bool gridOne[gridSize + 1][gridSize + 1] = {}; 

//seeding code 

cout << "Please enter number of iteration : " << endl; 
cin >> iteration; 

for (int a = 0; a<iteration; a++) 
{ 
    begin = clock(); 

    printGrid(gridOne); 
    determineState(gridOne); 
    cout << endl; 
} 
finish = clock(); 
cout << "The elapsed time : " << (double)(finish - begin)/CLOCKS_PER_SEC; 
system("pause"); 
return 0; 
} 


void printGrid(bool gridOne[gridSize + 1][gridSize + 1]) { 
for (int a = 1; a < gridSize; a++) 
{ 
    for (int b = 1; b < gridSize; b++) 
    { 
     if (gridOne[a][b] == true) 
     { 
      cout << " \xDB "; 
     } 
     else 
     { 
      cout << " . "; 
     } 
     if (b == gridSize - 1) 
     { 
      cout << endl; 
     } 
    } 
    } 
    } 


    void compareGrid(bool gridOne[gridSize + 1][gridSize + 1], bool gridTwo[gridSize + 1][gridSize + 1]) { 

for (int a = 0; a < gridSize; a++) 
{ 
    for (int b = 0; b < gridSize; b++) 
    { 
     gridTwo[a][b] = gridOne[a][b]; 
    } 
} 
} 

void determineState(bool gridOne[gridSize + 1][gridSize + 1]) { 
bool gridTwo[gridSize + 1][gridSize + 1] = {}; 
compareGrid(gridOne, gridTwo); 

for (int a = 1; a < gridSize; a++) 
{ 
    for (int b = 1; b < gridSize; b++) 
    { 
     int alive = 0; 
     for (int c = -1; c < 2; c++) 
     { 
      for (int d = -1; d < 2; d++) 
      { 
       if (!(c == 0 && d == 0)) 
       { 
        if (gridTwo[a + c][b + d]) 
        { 
         ++alive; 
        } 
       } 
      } 
     } 
     if (alive < 2) 
     { 
      gridOne[a][b] = false; 
     } 
     else if (alive == 3) 
     { 
      gridOne[a][b] = true; 
     } 
     else if (alive > 3) 
     { 
      gridOne[a][b] = false; 
     } 
    } 
} 
} 

Vielen Dank im Voraus.

+2

"nicht funktioniert" ist bedeutungslos, bitte erklären, was und wie es "nicht funktioniert". Ihr manuelles Seeding hat überhaupt keine Seeding und keine Aufrufe von 'rand()'. –

+1

Möglicherweise relevant https://stackoverflow.com/questions/27209282/how-does-calling-srand-more-than-once-affef-the-quality-of-randomness – Galik

Antwort

2
for (col = 0; col < gridSize + 1; col++) 
{ 
    gridOne[gridSize + 1][gridSize + 1] = (int)(rand() % 2); 
    cout << gridOne[gridSize + 1][gridSize + 1] << ' '; 
} 

Überprüfen Sie die Indizes auf der Gridone Array, die Sie bearbeiten, immer den gleichen Platz im Speicher, die über das Ende des Arrays ist. Sollte sein

for (col = 0; col < gridSize + 1; col++) 
{ 
    gridOne[row][col] = (int)(rand() % 2); 
    cout << gridOne[row][col] << ' '; 
} 
Verwandte Themen