1 #include <DrawingWindow.h>
2 #include <QApplication>
8 #define VIVANT 0x000000ffU // bleu
9 #define MORT 0x00ffffffU // blanc
16 cell cells[LARGEUR][HAUTEUR];
18 void majVoisins(int i, int j, int delta)
20 for (int k = i - 1 ; k <= i + 1 ; ++k)
21 for (int l = j - 1 ; l <= j + 1 ; ++l)
22 if (k != i || l != j) {
23 int vi = (k + LARGEUR) % LARGEUR;
24 int vj = (l + HAUTEUR) % HAUTEUR;
25 cells[vi][vj].neigh += delta;
29 void dessine(DrawingWindow& w, int i, int j, unsigned couleur)
35 void init(DrawingWindow& w)
38 for (int i = 0 ; i < LARGEUR ; ++i)
39 for (int j = 0 ; j < HAUTEUR ; ++j)
40 cells[i][j].neigh = 0;
41 for (int i = 0 ; i < LARGEUR ; ++i)
42 for (int j = 0 ; j < HAUTEUR ; ++j) {
43 cells[i][j].now = cells[i][j].next = (rand() < RAND_MAX / 2);
44 if (cells[i][j].now) {
46 dessine(w, i, j, VIVANT);
51 void update0(DrawingWindow& w __attribute__((unused)))
53 for (int i = 0 ; i < LARGEUR ; ++i)
54 for (int j = 0 ; j < HAUTEUR ; ++j) {
55 switch (cells[i][j].neigh) {
57 // cells[i][j].next = cells[i][j].now; // useless
60 cells[i][j].next = true;
63 cells[i][j].next = false;
69 void update1(DrawingWindow& w)
71 for (int i = 0 ; i < LARGEUR ; ++i)
72 for (int j = 0 ; j < HAUTEUR ; ++j) {
73 if (cells[i][j].now) {
74 if (!cells[i][j].next) {
75 cells[i][j].now = false;
77 dessine(w, i, j, MORT);
80 if (cells[i][j].next) {
81 cells[i][j].now = true;
83 dessine(w, i, j, VIVANT);
89 void jeudelavie(DrawingWindow& w)
95 for (int gen = 0 ; ; ++gen) {
97 std::cerr << "generation " << gen << std::endl;
104 int main(int argc, char *argv[])
106 QApplication app(argc, argv);
107 DrawingWindow win(jeudelavie, LARGEUR, HAUTEUR);