Bonjour !
Après deux ans sans avoir touché au C++, j’ai décidé de m’y remettre en faisant un petit Game Of Life. Je suis en train de faire la fonction pour voir si une cellule doit vivre ou mourir mais je bloque totalement. Voici ce que j’ai fait pour le moment :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | void liveOrDie(bool (&grid)[gridSize][gridSize]) { for (unsigned int i = 0; i < gridSize; ++i) { for (unsigned int j = 0; j < gridSize; ++j) { unsigned int alive{0}; // count alive cells around the grid[i][j] cell. for (int a = -1; a < 2; ++a) { for (int b = -1; b < 2; ++b) { if (grid[a][b] && (a != 0 && b != 0)) ++alive; } } // change the state of the grid[i][j] cell. if (!grid[i][j] && alive == 3) grid[i][j] = true; else grid[i][j] = grid[i][j] && (alive == 2 || alive == 3); } } } |
Pour compter les cellules vivantes autour de ma cellule, j’aimerais faire quelque chose de propre et éviter 36000 if pour vérifier que ma cellule ne soit pas en bordure de grille (sinon je fais une erreur comme quoi je sors des limites du tableau). Je suis certain qu’il y a une solution plus propre qui m’éviterais ça.
Merci de votre aide !
Je vous met le programme complet, si vous avez des remarques, n’hésitez surtout pas :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <iostream> const unsigned int gridSize{10}; void drawGrid(bool const (&grid)[gridSize][gridSize]); void liveOrDie(bool (&grid)[gridSize][gridSize]); int main() { bool grid[gridSize][gridSize] = {false}; // Making a glider grid[2][5] = true; grid[3][6] = true; grid[4][4] = true; grid[4][5] = true; grid[4][6] = true; drawGrid(grid); liveOrDie(grid); drawGrid(grid); return 0; } void drawGrid(bool const (&grid)[gridSize][gridSize]) { for (unsigned int i = 0; i < gridSize; ++i) { for (unsigned int j = 0; j < gridSize; ++j) { if (grid[i][j]) std::cout << " O "; else std::cout << " . "; } std::cout << std::endl; } } void liveOrDie(bool (&grid)[gridSize][gridSize]) { for (unsigned int i = 0; i < gridSize; ++i) { for (unsigned int j = 0; j < gridSize; ++j) { unsigned int alive{0}; // count alive cells around the grid[i][j] cell. for (int a = -1; a < 2; ++a) { for (int b = -1; b < 2; ++b) { if (grid[a][b] && (a != 0 && b != 0)) ++alive; } } // change the state of the grid[i][j] cell. if (!grid[i][j] && alive == 3) grid[i][j] = true; else grid[i][j] = grid[i][j] && (alive == 2 || alive == 3); } } } |
+0
-0