/*********************** Conway Game of Life ************************/ #include #include #define NI 1000 /* array sizes */ #define NJ 1000 #define NSTEPS 500 /* number of time steps */ int i, j, n, im, ip, jm, jp, ni, nj, nsum, isum; int **old, **new; float x; FILE *outFile; // doTimeStep(int n); void doTimeStep(int n){ /* corner boundary conditions */ old[0][0] = old[NI][NJ]; old[0][NJ + 1] = old[NI][1]; old[NI + 1][NJ + 1] = old[1][1]; old[NI + 1][0] = old[1][NJ]; /* left-right boundary conditions */ for (i = 1; i <= NI; i++){ old[i][0] = old[i][NJ]; old[i][NJ + 1] = old[i][1]; } /* top-bottom boundary conditions */ for (j = 1; j <= NJ; j++){ old[0][j] = old[NI][j]; old[NI + 1][j] = old[1][j]; } for (i = 1; i <= NI; i++){ for (j = 1; j <= NJ; j++){ im = i - 1; ip = i + 1; jm = j - 1; jp = j + 1; nsum = old[im][jp] + old[i][jp] + old[ip][jp] + old[im][j] + old[ip][j] + old[im][jm] + old[i][jm] + old[ip][jm]; switch (nsum){ case 3: new[i][j] = 1; break; case 2: new[i][j] = old[i][j]; break; default: new[i][j] = 0; } } } /* copy new state into old state */ for (i = 1; i <= NI; i++){ for (j = 1; j <= NJ; j++){ old[i][j] = new[i][j]; } } } int main(int argc, char *argv[]) { /* allocate arrays */ ni = NI + 2; /* add 2 for left and right ghost cells */ nj = NJ + 2; old = malloc(ni*sizeof(int*)); new = malloc(ni*sizeof(int*)); for(i=0; i