]>
wirehaze git hosting - lifeboot.git/blob - prototype.c
2e9ef3fe12298e26a20eebb77af2c01ce8311e19
15 #define STR(x) _STR (x)
21 printf ("\e[1;1H\e[2J");
25 print_row (char row
[COLS
])
27 printf ("%." STR (COLS
) "s\n", row
);
31 print_grid (char grid
[COLS
* ROWS
])
33 for (int i
= 0; i
< ROWS
; i
++)
34 print_row (grid
+ i
* COLS
);
38 init_grid (char grid
[COLS
* ROWS
])
40 for (int i
= 0; i
< COLS
* ROWS
; i
++)
42 if (rand () % INIT_RATIO
)
50 get_state (char grid
[COLS
* ROWS
], int row
, int col
)
52 if (row
< 0 || row
>= ROWS
|| col
< 0 || col
>= COLS
)
55 return grid
[row
* COLS
+ col
];
59 alive_neighbours (char grid
[COLS
* ROWS
], int idx
)
65 for (int i
= -1; i
<= 1; i
++)
66 for (int j
= -1; j
<= 1; j
++)
67 if (get_state (grid
, row
+ i
, col
+ j
) == ALIVE
)
70 if (get_state (grid
, row
, col
) == ALIVE
)
77 next_state (char grid
[COLS
* ROWS
], int idx
)
79 int n
= alive_neighbours (grid
, idx
);
81 if (get_state (grid
, idx
/ COLS
, idx
% COLS
) == ALIVE
)
96 update_grid (char grid
[COLS
* ROWS
])
98 char new[COLS
* ROWS
];
100 for (int i
= 0; i
< COLS
* ROWS
; i
++)
101 new[i
] = next_state (grid
, i
);
103 memcpy (grid
, new, COLS
* ROWS
);
109 char grid
[COLS
* ROWS
];
120 while (getchar () != 'q');