1 #include <DrawingWindow.h>
2 #include <QApplication>
8 #define BORDURE 0x00ffffffU // blanc
9 #define NAISSANT 0x0000ff00U // vert
10 #define VIVANT 0x000000ffU // bleu
11 #define MOURANT 0x00ff0000U // rouge
12 #define MORT 0x00ffffffU // blanc
19 cell cells[LARGEUR][HAUTEUR];
21 void majVoisins(int i, int j, int delta)
23 for (int k = i - 1 ; k <= i + 1 ; ++k)
24 for (int l = j - 1 ; l <= j + 1 ; ++l)
25 if (k != i || l != j) {
26 int vi = (k + LARGEUR) % LARGEUR;
27 int vj = (l + HAUTEUR) % HAUTEUR;
28 cells[vi][vj].neigh += delta;
32 void dessine(DrawingWindow& w, int i, int j, unsigned couleur)
38 void init(DrawingWindow& w)
41 for (int i = 0 ; i < LARGEUR ; ++i)
42 for (int j = 0 ; j < HAUTEUR ; ++j)
43 cells[i][j].neigh = 0;
44 for (int i = 0 ; i < LARGEUR ; ++i)
45 for (int j = 0 ; j < HAUTEUR ; ++j) {
46 cells[i][j].next = (rand() < RAND_MAX / 2);
47 cells[i][j].now = !cells[i][j].next;
48 if (cells[i][j].now) {
50 dessine(w, i, j, VIVANT);
52 dessine(w, i, j, MORT);
57 void update0(DrawingWindow& w)
59 for (int i = 0 ; i < LARGEUR ; ++i)
60 for (int j = 0 ; j < HAUTEUR ; ++j) {
61 int n = cells[i][j].neigh;
62 if (cells[i][j].now) {
64 cells[i][j].next = false;
65 dessine(w, i, j, MOURANT);
69 cells[i][j].next = true;
70 dessine(w, i, j, NAISSANT);
76 void update1(DrawingWindow& w)
78 for (int i = 0 ; i < LARGEUR ; ++i)
79 for (int j = 0 ; j < HAUTEUR ; ++j) {
80 if (cells[i][j].now) {
81 if (!cells[i][j].next) {
82 cells[i][j].now = false;
84 dessine(w, i, j, MORT);
87 if (cells[i][j].next) {
88 cells[i][j].now = true;
90 dessine(w, i, j, VIVANT);
96 void jeudelavie(DrawingWindow& w)
98 w.setBgColor(BORDURE);
102 for (int gen = 0 ; ; ++gen) {
104 std::cerr << "generation " << gen << std::endl;
112 int main(int argc, char *argv[])
114 QApplication app(argc, argv);
115 DrawingWindow win(jeudelavie, LARGEUR, HAUTEUR);