Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //game_of_life.c - generates a random initial state of the grid, then cycles through the # of generations specified.
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <unistd.h>
- #include <math.h>
- #include <string.h>
- #define KBLU "\x1B[34m"
- const int NUM_ROWS = 65; // note: one-cell border is included in this size
- const int NUM_COLS = 129; // ^
- const int GENERATIONS = 128;
- void generate(int grid[NUM_ROWS][NUM_COLS]);
- int main(void)
- {
- int grid[NUM_ROWS][NUM_COLS];
- srand(time(NULL));
- // initialise one-cell border around grid
- for(int i = 0; i < NUM_ROWS; i++)
- {
- grid[i][0] = 0;
- grid[i][NUM_COLS - 1] = 0;
- }
- for(int i = 1; i < NUM_COLS; i++)
- {
- grid[0][i] = 0;
- grid[NUM_ROWS - 1][i] = 0;
- }
- for(int i = 1; i < NUM_ROWS - 1; i++)
- {
- for(int j = 1; j < NUM_COLS - 1; j++)
- {
- grid[i][j] = rint((float) (rand() % 10) - 5);
- }
- }
- // cycle through generations
- generate(grid);
- }
- void generate(int grid[NUM_ROWS][NUM_COLS])
- {
- for(int i = 0; i < GENERATIONS; i++)
- {
- int new_grid[NUM_ROWS][NUM_COLS];
- printf("\e[1;1H\e[2J");
- sleep(1);
- // print current state to screen
- for (int i = 0; i < NUM_ROWS; i++)
- {
- for(int j = 0; j < NUM_COLS; j++)
- {
- printf(KBLU "%c", grid[i][j] == 1 ? 'o' : ' ');
- }
- printf("\n");
- }
- // initialise one-cell border around grid
- for(int i = 0; i < NUM_ROWS; i++)
- {
- new_grid[i][0] = 0;
- new_grid[i][NUM_COLS - 1] = 0;
- }
- for(int i = 1; i < NUM_COLS; i++)
- {
- new_grid[0][i] = 0;
- new_grid[NUM_ROWS - 1][i] = 0;
- }
- // apply rules
- for(int i = 1; i < NUM_ROWS - 1; i++)
- {
- for(int j = 1; j < NUM_COLS - 1; j++)
- {
- int count = 0;
- count = grid[i-1][j-1] + grid[i-1][j] + grid[i-1][j+1] + grid[i][j-1] + grid[i][j+1]
- + grid[i+1][j-1] + grid[i+1][j] + grid[i+1][j+1];
- if(grid[i][j] && (count < 2 || count > 3))
- new_grid[i][j] = 0;
- else if (grid[i][j])
- new_grid[i][j] = 1;
- else if (!grid[i][j] && count == 3)
- new_grid[i][j] = 1;
- else
- new_grid[i][j] = 0;
- }
- }
- memcpy(grid, new_grid, NUM_ROWS * NUM_COLS * sizeof(int));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement