From d60ba0002dc244a2b71e1c698ebeab1fac71b6a4 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Tue, 13 Dec 2011 01:33:24 -0500 Subject: Write tick() and friends. Functions written: * void tick() * int count_live_neighbors(int i, int j) * bool get_cell(int i, int j) * void set_cell(int i, int j, bool s) --- diff --git a/src/cgol.c b/src/cgol.c index d4411d0..427df83 100644 --- a/src/cgol.c +++ b/src/cgol.c @@ -29,6 +29,10 @@ void init_curses(); void init_game(); void fini_game(); void fini_curses(); +void tick(); +int count_live_neighbors(int i, int j); +bool get_cell(int i, int j); +void set_cell(int i, int j, bool s); void print_cell(int i, int j); void usage(const char *invocation); @@ -162,6 +166,63 @@ fini_curses() } void +tick() +{ + int i, j, n; + bool *grid_tmp; + + for (i = 0; i < height; ++i) { + for (j = 0; j < width; ++j) { + n = count_live_neighbors(i, j); + if (get_cell(i, j)) { + if (n < 2 || n > 3) { + set_cell(i, j, false); + print_cell(i, j); + } + } else { + if (n == 3) { + set_cell(i, j, true); + print_cell(i, j); + } + } + } + } + + /* Swap grids. */ + grid_tmp = grid_cur; + grid_cur = grid_next; + grid_next = grid_tmp; +} + +int +count_live_neighbors(int i, int j) +{ + return + get_cell(i - 1, j - 1) + get_cell(i - 1, j) + get_cell(i - 1, j + 1) + + get_cell(i, j - 1) + get_cell(i, j + 1) + + get_cell(i + 1, j - 1) + get_cell(i + 1, j) + get_cell(i + 1, j + 1); +} + +bool +get_cell(int i, int j) +{ + if (i < 0 || j < 0 || i >= height || j >= width) { + /* This is something of a sanity check. Anything off the finite grid + * is by definition dead. With this, count_live_neighbors() can be + * dumb. */ + return 0; + } else { + return grid_cur[i * width + j]; + } +} + +void +set_cell(int i, int j, bool s) +{ + grid_cur[i * width + j] = s; +} + +void print_cell(int i, int j) { mvprintw(1 + i, 1 + j * 2, "%c", grid_cur[i * width + j] ? 'o' : ' '); -- cgit v0.9.1