From a0171f8a7c25cc7f0699d3ccb64ac88dc4f7c612 Mon Sep 17 00:00:00 2001 From: Phyks Date: Sun, 28 Jul 2013 15:23:35 +0200 Subject: [PATCH] Initial commit --- Rules | 5 ++ a.out | Bin 0 -> 11823 bytes main.c | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 Rules create mode 100755 a.out create mode 100644 main.c diff --git a/Rules b/Rules new file mode 100644 index 0000000..c26ae7e --- /dev/null +++ b/Rules @@ -0,0 +1,5 @@ +Jeu de la vie : + + Si une cellule a < 2 voisines ou > 3 voisines, elle meurt + Si une cellule a == 3 voisines, elle naƮt + Si une cellule a == 2 voisines, elle ne change pas diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..45941e383b56ca6c44e8f7af1ee5eebceec801e5 GIT binary patch literal 11823 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 +#include +#include +#include +#include +#include +#include +#include + +//TODO !!!! +// Inverser X et Y cf. Le retour +int kbhit(void) +{ + struct termios oldt, newt; + int ch; + int oldf; + + tcgetattr(STDIN_FILENO, &oldt); + newt = oldt; + newt.c_lflag &= ~(ICANON | ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &newt); + oldf = fcntl(STDIN_FILENO, F_GETFL, 0); + fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); + + ch = getchar(); + + tcsetattr(STDIN_FILENO, TCSANOW, &oldt); + fcntl(STDIN_FILENO, F_SETFL, oldf); + + if(ch != EOF) + { + ungetc(ch, stdin); + return 1; + } + + return 0; +} + +int main(int argc, char **argv) +{ + // Defines the 2*X*Y matrice + // i, j, k for counters + // count, density + // o (=old), n(=new) for switching between the two matrices X*Y + //Nbre_iterations = number of iterations + int **m[2]; + int i, j, k; + int count = 0, density = 50, o = 0, n, Y, X, nbre_iterations=0; + int carac = 64; //@ + + initscr(); + getmaxyx(stdscr, X, Y); + + Y -= 1; + X -= 1; + + // If there's not enough args, give a short How-To + if(argc < 1) + { + printw("Usage : %s [density in %] \n", argv[0]); + refresh(); + return 0; + } + + // Put the 2nd (if exists) into density + if (argv[2] != NULL) density = atoi(argv[2]); + + // Initialize random generator + srand(time(NULL)); + + // Dynamically allocate memory for both matrices + for (o = 0; o < 2; o++) + { + if((m[o] = malloc(sizeof(*m[o]) * X)) == NULL) + { + perror("malloc:"); + exit(-1); + } + for(i = 0; i < X; i++) + { + if((m[o][i] = malloc(sizeof(**m[o]) * Y)) == NULL) + { + perror("malloc:"); + exit(-1); + } + } + } + + // Fill the matrix 0 with random number between 1 and 0 + for(i = 0; i < X; i++) + { + for(j = 0; j < Y; j++) + { + // We put 1 if the number token is > density + m[0][i][j] = (rand() % 100 > density) ? 1 : 0; + } + } + // Clear the screen and print the matrice 0 + clear(); + + for(i = 0; i < X; i++) + { + for(j = 0; j < Y; j++) + { + (m[0][i][j] == 1) ? addch(carac) : addch(32); + } + printw("\n"); + refresh(); + } + + // Reset o to 0 + o = 0; + + while(!kbhit()) + { + n = 1-o; // If the old indice o = 0, then n = 1 + + move(0,0); + + for(i = 0; i < X; i++) + { + for(j = 0; j < Y; j++) + { + // Add 1 to count for each neighbour + count += (i < X-1 && j > 0 && m[o][i+1][j-1] == 1) ? 1 : 0; + count += (i < X-1 && m[o][i+1][j] == 1) ? 1 : 0; + count += (i < X-1 && j < Y-1 && m[o][i+1][j+1] == 1) ? 1 : 0; + count += ( j < Y-1 && m[o][i][j+1] == 1) ? 1 : 0; + count += ( j > 0 && m[o][i][j-1] == 1) ? 1 : 0; + count += (i > 0 && j > 0 && m[o][i-1][j-1] == 1) ? 1 : 0; + count += (i > 0 && m[o][i-1][j] == 1) ? 1 : 0; + count += (i > 0 && j < Y-1 && m[o][i-1][j+1] == 1) ? 1 : 0; + + // Determine whether or not the cellular dies + if(count < 2 || count > 3) + m[n][i][j] = 0; + else if(count == 3) + m[n][i][j] = 1; + else + m[n][i][j] = m[o][i][j]; + + (m[n][i][j] == 1) ? addch(carac) : addch(32); + count = 0; + } + printw("\n"); + } + nbre_iterations++; + printw("%d", nbre_iterations); + refresh(); + + usleep(100000); + + //Exchange n and o -> New 'old' is old 'new' :) + o = n; + } + endwin(); + return 0; +}