]>
wirehaze git hosting - lifeboot.git/blob - prototype.c
15 #define STR(x) _STR(x)
18 static void clearscr() { printf("\e[1;1H\e[2J"); }
20 static void print_row(char row
[COLS
]) { printf("%." STR(COLS
) "s\n", row
); }
22 static void print_grid(char grid
[COLS
* ROWS
]) {
23 for (int i
= 0; i
< ROWS
; i
++)
24 print_row(grid
+ i
* COLS
);
27 static void init_grid(char grid
[COLS
* ROWS
]) {
28 for (int i
= 0; i
< COLS
* ROWS
; i
++) {
29 if (rand() % INIT_RATIO
)
36 static char get_state(char grid
[COLS
* ROWS
], int row
, int col
) {
37 if (row
< 0 || row
>= ROWS
|| col
< 0 || col
>= COLS
)
40 return grid
[row
* COLS
+ col
];
43 static int alive_neighbours(char grid
[COLS
* ROWS
], int idx
) {
48 for (int i
= -1; i
<= 1; i
++)
49 for (int j
= -1; j
<= 1; j
++)
50 if (get_state(grid
, row
+ i
, col
+ j
) == ALIVE
)
53 if (get_state(grid
, row
, col
) == ALIVE
)
59 static char next_state(char grid
[COLS
* ROWS
], int idx
) {
60 int n
= alive_neighbours(grid
, idx
);
62 if (get_state(grid
, idx
/ COLS
, idx
% COLS
) == ALIVE
) {
75 static void update_grid(char grid
[COLS
* ROWS
]) {
76 char new[COLS
* ROWS
];
78 for (int i
= 0; i
< COLS
* ROWS
; i
++)
79 new[i
] = next_state(grid
, i
);
81 memcpy(grid
, new, COLS
* ROWS
);
85 char grid
[COLS
* ROWS
];
94 } while (getchar() != 'q');