1 #include <DrawingWindow.h>
2 #include <QApplication>
8 #define TCELL 5 // taille d'une cellule
10 #define BORDURE 0x00000000U // noir
11 #define NAISSANT 0x0000ff00U // vert
12 #define VIVANT 0x000000ffU // bleu
13 #define MOURANT 0x00ff0000U // rouge
14 #define MORT 0x00ffffffU // blanc
16 bool cells[LARGEUR][HAUTEUR][2];
21 for (int i = 0 ; i < LARGEUR ; ++i)
22 for (int j = 0 ; j < HAUTEUR ; ++j)
23 cells[i][j][0] = cells[i][j][1] = (rand() < RAND_MAX / 2);
26 void draw(DrawingWindow& w)
28 for (int i = 0 ; i < LARGEUR ; ++i)
29 for (int j = 0 ; j < HAUTEUR ; ++j) {
30 if (cells[i][j][0] == cells[i][j][1])
31 w.setColor(cells[i][j][1] ? VIVANT : MORT);
33 w.setColor(cells[i][j][1] ? NAISSANT : MOURANT);
34 w.fillRect(TCELL * i + 1, TCELL * j + 1,
35 TCELL * (i + 1) - 1, TCELL * (j + 1) - 1);
36 cells[i][j][0] = cells[i][j][1];
40 int nbVoisins(int i, int j)
43 for (int k = i - 1 ; k <= i + 1 ; ++k)
44 for (int l = j - 1 ; l <= j + 1 ; ++l)
45 if (k != i || l != j) {
46 int vi = (k + LARGEUR) % LARGEUR;
47 int vj = (l + HAUTEUR) % HAUTEUR;
56 for (int i = 0 ; i < LARGEUR ; ++i)
57 for (int j = 0 ; j < HAUTEUR ; ++j) {
58 int v = nbVoisins(i, j);
60 cells[i][j][1] = (v == 2 || v == 3);
62 cells[i][j][1] = (v == 3);
66 void jeudelavie(DrawingWindow& w)
68 w.setBgColor(BORDURE);
71 for (int gen = 0 ; ; ++gen) {
73 std::cerr << "generation " << gen << std::endl;
80 int main(int argc, char *argv[])
82 QApplication app(argc, argv);
83 DrawingWindow win(jeudelavie, TCELL * LARGEUR + 1, TCELL * HAUTEUR + 1);