trules.c - game-of-life - Conway's Game of Life
(HTM) git clone git://src.adamsgaard.dk/game-of-life
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
trules.c (2019B)
---
1 #include <stdlib.h>
2 #include <time.h>
3
4 /* Populate a 2D array with 0's and 1's in a pseudo-random fashion.
5 * The population will be ratio*100% consisting of 1's
6 */
7 void random_population(int **cells, int nx, int ny, double ratio)
8 {
9 int i, j;
10 srand(time(NULL));
11
12 for (i=0; i<nx; i++) {
13 for (j=0; j<ny; j++) {
14 if ((double)rand()/RAND_MAX < ratio)
15 cells[i][j] = 1;
16 else
17 cells[i][j] = 0;
18 }
19 }
20 }
21
22 int find_neighbor_count(int **cells, int **neighbors, int nx, int ny)
23 {
24 int world_is_dead = 0;
25 int i, j, x, y;
26 int nneighbors;
27
28 /*for (i=1; i<nx-1; i++) {
29 for (j=1; j<ny-1; j++) {*/
30 for (i=0; i<nx; i++) {
31 for (j=0; j<ny; j++) {
32 nneighbors = 0;
33
34 for (x=-1; x<2; x++) {
35 for (y=-1; y<2; y++) {
36 if (x != 0 && y != 0 &&
37 i+x > 0 && i+x < nx &&
38 j+y > 0 && j+y < ny) {
39 nneighbors += cells[i+x][j+y];
40 }
41 }
42 }
43 neighbors[i][j] = nneighbors;
44 if (nneighbors > 0)
45 world_is_dead = 0;
46 }
47 }
48
49 if (world_is_dead == 1)
50 return 1;
51 else
52 return 0;
53 }
54
55 void cell_transitions(int **cells, int **neighbors, int nx, int ny)
56 {
57 int i, j, nneighbors;
58 for (i=0; i<nx; i++) {
59 for (j=0; j<ny; j++) {
60 nneighbors = neighbors[i][j];
61
62 if (cells[i][j] == 1) { /* alive */
63 if (nneighbors < 2) /* under-population */
64 cells[i][j] = 0;
65 else if (nneighbors > 3) /* over-population */
66 cells[i][j] = 0;
67 else /* survive */
68 cells[i][j] = 1;
69 } else { /* dead */
70 if (nneighbors == 3) /* reproduction */
71 cells[i][j] = 1;
72 }
73 }
74 }
75 }