X-Git-Url: https://git.wirehaze.ovh/lifeboot.git/blobdiff_plain/ce6b08625d3382eab9926f382a6080f108539b21..535076b839d14aeb4502b7b8479dcb6d3eb51cf0:/prototype.c?ds=sidebyside diff --git a/prototype.c b/prototype.c index 5c6f052..c297953 100644 --- a/prototype.c +++ b/prototype.c @@ -1,8 +1,8 @@ #include #include -#include #include #include +#include #define COLS 80 #define ROWS 25 @@ -10,18 +10,14 @@ #define DEAD ' ' #define ALIVE '#' -#define INIT_RATIO 10 +#define INIT_RATIO 4 #define STR(x) _STR(x) #define _STR(x) #x -static void clearscr() { - printf("\e[1;1H\e[2J"); -} +static void clearscr() { printf("\e[1;1H\e[2J"); } -static void print_row(char row[COLS]) { - printf("%." STR(COLS) "s\n", row); -} +static void print_row(char row[COLS]) { printf("%." STR(COLS) "s\n", row); } static void print_grid(char grid[COLS * ROWS]) { for (int i = 0; i < ROWS; i++) @@ -37,22 +33,24 @@ static void init_grid(char grid[COLS * ROWS]) { } } -static char get_state(char grid[COLS * ROWS], int idx) { - if (idx < 0 || idx >= COLS * ROWS) +static char get_state(char grid[COLS * ROWS], int row, int col) { + if (row < 0 || row >= ROWS || col < 0 || col >= COLS) return DEAD; - return grid[idx]; + return grid[row * COLS + col]; } static int alive_neighbours(char grid[COLS * ROWS], int idx) { + int row = idx / COLS; + int col = idx % COLS; int neighbours = 0; - for (int i = -1; i <= 1; i++) /* row */ - for (int j = -1; j <= 1; j++) /* col */ - if (get_state(grid, idx + i * COLS + j) == ALIVE) + for (int i = -1; i <= 1; i++) + for (int j = -1; j <= 1; j++) + if (get_state(grid, row + i, col + j) == ALIVE) neighbours++; - if (get_state(grid, idx) == ALIVE) + if (get_state(grid, row, col) == ALIVE) neighbours--; return neighbours; @@ -61,7 +59,7 @@ static int alive_neighbours(char grid[COLS * ROWS], int idx) { static char next_state(char grid[COLS * ROWS], int idx) { int n = alive_neighbours(grid, idx); - if (get_state(grid, idx) == ALIVE) { + if (get_state(grid, idx / COLS, idx % COLS) == ALIVE) { if (n < 2 || n > 3) return DEAD; @@ -83,18 +81,17 @@ static void update_grid(char grid[COLS * ROWS]) { memcpy(grid, new, COLS * ROWS); } -int main () { +int main() { char grid[COLS * ROWS]; srand(time(0)); init_grid(grid); - for (;;) { + do { clearscr(); print_grid(grid); update_grid(grid); - getchar(); - } + } while (getchar() != 'q'); return 0; }