]> git.friedersdorff.com Git - max/gol.git/blob - tick.c
Making more progress (hopefully)
[max/gol.git] / tick.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include "tick.h"
4
5 int gol_tick(struct gol_board *state)
6 {
7         struct gol_board tmp_state;
8         tmp_state = (struct gol_board ) {
9                 .live_cells = malloc(10 * sizeof(typeof(*tmp_state.live_cells))),
10                 .n = 0,
11                 .size = 10,
12                 .max_x = 0,
13                 .min_x = 0,
14                 .max_y = 0,
15                 .min_y = 0
16         };
17         if (!tmp_state.live_cells) {
18                 return 0;
19         }
20         unsigned char n_live_adj;
21         for (int i = state->min_x; i < state->max_x; ++i) {
22                 for (int j = state->min_y; j < state->max_y; ++j) {
23                         n_live_adj = gol_is_live(state, i - 1, j - 1) +
24                                 gol_is_live(state, i, j - 1) +
25                                 gol_is_live(state, i + 1, j - 1) +
26                                 gol_is_live(state, i - 1, j) +
27                                 gol_is_live(state, i + 1, j) +
28                                 gol_is_live(state, i - 1 , j + 1) +
29                                 gol_is_live(state, i, j + 1) +
30                                 gol_is_live(state, i + 1, j + 1);
31                                 
32                         switch (n_live_adj) {
33                         case (3):
34                                 gol_vivify(&tmp_state, i, j);
35                                 break;
36                         case(2):
37                                 if (gol_is_live(state, i, j)) {
38                                         gol_vivify(&tmp_state, i, j);
39                                 }
40                         default:
41                                 break;
42                         }
43                         
44                 }
45         }
46         free(state->live_cells);
47         *state = tmp_state;
48         return 1;
49 }