]>
wirehaze git hosting - lifeboot.git/blob - prototype.c
15 #define STR(x) _STR(x)
18 static void clearscr() {
19 printf("\e[1;1H\e[2J");
22 static void print_row(char row
[COLS
]) {
23 printf("%." STR(COLS
) "s\n", row
);
26 static void print_grid(char grid
[COLS
* ROWS
]) {
27 for (int i
= 0; i
< ROWS
; i
++)
28 print_row(grid
+ i
* COLS
);
31 static void init_grid(char grid
[COLS
* ROWS
]) {
32 for (int i
= 0; i
< COLS
* ROWS
; i
++) {
33 if (rand() % INIT_RATIO
)
40 static char get_state(char grid
[COLS
* ROWS
], int idx
) {
41 if (idx
< 0 || idx
>= COLS
* ROWS
)
47 static int alive_neighbours(char grid
[COLS
* ROWS
], int idx
) {
50 for (int i
= -1; i
<= 1; i
++) /* row */
51 for (int j
= -1; j
<= 1; j
++) /* col */
52 if (get_state(grid
, idx
+ i
* COLS
+ j
) == ALIVE
)
55 if (get_state(grid
, idx
) == ALIVE
)
61 static char next_state(char grid
[COLS
* ROWS
], int idx
) {
62 int n
= alive_neighbours(grid
, idx
);
64 if (get_state(grid
, idx
) == ALIVE
) {
77 static void update_grid(char grid
[COLS
* ROWS
]) {
78 char new[COLS
* ROWS
];
80 for (int i
= 0; i
< COLS
* ROWS
; i
++)
81 new[i
] = next_state(grid
, i
);
83 memcpy(grid
, new, COLS
* ROWS
);
87 char grid
[COLS
* ROWS
];