From: Arnaud Giersch Date: Mon, 20 Oct 2014 14:36:00 +0000 (+0200) Subject: Add JeuDeLaVie.java. X-Git-Tag: extracted~11 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/graphlib_java.git/commitdiff_plain/42a6ea408edb5d43639948675234b14a71c0d919?hp=c5db8c437ef6b59c2092926ab67e6d4277aac0e5 Add JeuDeLaVie.java. --- diff --git a/MoreEx/JeuDeLaVie.java b/MoreEx/JeuDeLaVie.java new file mode 100644 index 0000000..4acc4a8 --- /dev/null +++ b/MoreEx/JeuDeLaVie.java @@ -0,0 +1,107 @@ +import java.util.*; + +class JeuDeLaVie { + + static final Random random = new Random(); + + static final int LARGEUR = 1200; + static final int HAUTEUR = 900; + + static final int VIVANT = 0x000000ff; // bleu + static final int MORT = 0x00ffffff; // blanc + + static class Cell { + int neigh; + boolean now; + boolean next; + }; + static Cell[][] cells; + + static void majVoisins(int i, int j, int delta) + { + for (int k = i - 1 ; k <= i + 1 ; ++k) + for (int l = j - 1 ; l <= j + 1 ; ++l) + if (k != i || l != j) { + int vi = (k + LARGEUR) % LARGEUR; + int vj = (l + HAUTEUR) % HAUTEUR; + cells[vi][vj].neigh += delta; + } + } + + static void dessine(DrawingWindow w, int i, int j, int couleur) + { + w.setColor(couleur); + w.drawPoint(i, j); + } + + static void init(DrawingWindow w) + { + cells = new Cell[LARGEUR][HAUTEUR]; + for (int i = 0 ; i < LARGEUR ; ++i) + for (int j = 0 ; j < HAUTEUR ; ++j) + cells[i][j] = new Cell(); + for (int i = 0 ; i < LARGEUR ; ++i) + for (int j = 0 ; j < HAUTEUR ; ++j) + cells[i][j].neigh = 0; + for (int i = 0 ; i < LARGEUR ; ++i) + for (int j = 0 ; j < HAUTEUR ; ++j) { + cells[i][j].now = cells[i][j].next = random.nextBoolean(); + if (cells[i][j].now) { + majVoisins(i, j, 1); + dessine(w, i, j, VIVANT); + } + } + } + + static void update0(DrawingWindow w) + { + for (int i = 0 ; i < LARGEUR ; ++i) + for (int j = 0 ; j < HAUTEUR ; ++j) { + switch (cells[i][j].neigh) { + case 2: + // cells[i][j].next = cells[i][j].now; // useless + break; + case 3: + cells[i][j].next = true; + break; + default: + cells[i][j].next = false; + break; + } + } + } + static void update1(DrawingWindow w) + { + for (int i = 0 ; i < LARGEUR ; ++i) + for (int j = 0 ; j < HAUTEUR ; ++j) { + if (cells[i][j].now) { + if (!cells[i][j].next) { + cells[i][j].now = false; + majVoisins(i, j, -1); + dessine(w, i, j, MORT); + } + } else { + if (cells[i][j].next) { + cells[i][j].now = true; + majVoisins(i, j, 1); + dessine(w, i, j, VIVANT); + } + } + } + } + + public static void main(String[] args) { + DrawingWindow w = new DrawingWindow("Jeau de la vie", LARGEUR, HAUTEUR); + w.setBgColor(MORT); + w.clearGraph(); + init(w); + w.sync(); + for (int gen = 0 ; ; ++gen) { + if (gen % 10 == 0) + System.err.println("generation " + gen); + update0(w); + update1(w); + w.sync(); + } + } +}