]>
wirehaze git hosting - lifeboot.git/blob - prototype.c
a26ad5cda6fccb85face914f8d59ef4eed0e5f54
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 row
, int col
) {
41 if (row
< 0 || row
>= ROWS
|| col
< 0 || col
>= COLS
)
44 return grid
[row
* COLS
+ col
];
47 static int alive_neighbours(char grid
[COLS
* ROWS
], int idx
) {
52 for (int i
= -1; i
<= 1; i
++)
53 for (int j
= -1; j
<= 1; j
++)
54 if (get_state(grid
, row
+ i
, col
+ j
) == ALIVE
)
57 if (get_state(grid
, row
, col
) == ALIVE
)
63 static char next_state(char grid
[COLS
* ROWS
], int idx
) {
64 int n
= alive_neighbours(grid
, idx
);
66 if (get_state(grid
, idx
/ COLS
, idx
% COLS
) == ALIVE
) {
79 static void update_grid(char grid
[COLS
* ROWS
]) {
80 char new[COLS
* ROWS
];
82 for (int i
= 0; i
< COLS
* ROWS
; i
++)
83 new[i
] = next_state(grid
, i
);
85 memcpy(grid
, new, COLS
* ROWS
);
89 char grid
[COLS
* ROWS
];
98 } while (getchar() != 'q');