Pourquoi mon C ++ jeu de la vie ne fonctionne pas correctement?
-
25-09-2019 - |
Question
compile et fonctionne bien, mais les résultats sont tout à fait différents de ce qu'ils devraient être.
Je suis Snipped Code hors de propos:
bool grid[1280][1024]; // hardcoded to my screen res for now
for (int x = 0; x<1280; x++) //init grid to false
{
for (int y = 0; y<1024; y++)
{
grid[x][y] = false;
}
}
grid[320][120] = true; // add a simple pattern
grid[320][121] = true;
grid[320][122] = true;
grid[320][123] = true;
grid[320][124] = true;
grid[320][125] = true;
grid[320][126] = true;
grid[320][127] = true;
grid[320][128] = true;
// [snipped]
for (int x = 1; x< (1280 - 1); x++)
{
for (int y = 1; y< (1024 - 1); y++)
{
int n = 0; // neighbours
if (grid[x-1][y-1]) n++; // top left
if (grid[x][y-1]) n++; // top middle
if (grid[x+1][y-1]) n++; // top right
if (grid[x-1][y]) n++; // left
if (grid[x+1][y]) n++; // right
if (grid[x-1][y+1]) n++; // bottom left
if (grid[x][y+1]) n++; // bottom middle
if (grid[x+1][y+1]) n++; // bottom right
if (grid[x][y]) // current cell is on
{
SetPixel(screen, x, y, on); // drawing function
if (n < 2) grid[x][y] = false; // die. :(
if (n > 3) grid[x][y] = false; // die. :(
// otherwise (2 or 3), survive. :)
}
else // current cell is off
{
SetPixel(screen, x, y, off); // drawing function
if (n == 3) grid[x][y] = true; // IT'S ALIVE!!!
}
}
}
La solution
Tout d'abord, il ne fonctionne pas parce que vous n'êtes pas séparés, à savoir si la grille des résultats de chaque cellule [0] [0] meurt, ce sera immédiatement répercutée sur la grille [1] [0] de la vie ou la mort, ce qui est la façon dont fonctionne la vie de jeu. En second lieu, cela ne fonctionne pas parce que vous ne semblez pas avoir couru le jeu plus d'une itération.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow