tmain.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
       ---
       tmain.c (2028B)
       ---
            1 #include <stdio.h>
            2 #include <unistd.h>
            3 #include <stdlib.h>
            4 #include <ctype.h>
            5 #include "utility.h"
            6 #include "rules.h"
            7 
            8 #define GOLVERSION 0.1
            9 
           10 /*#define SHOW_NEIGHBORS*/
           11 
           12 int main(int argc, char **argv)
           13 {
           14     int **cells;
           15     int **neighbors;
           16     int nx = 80;
           17     int ny = 30;
           18     int c;
           19     unsigned int it = 0;
           20     int world_is_dead = 0;
           21 
           22     while ((c = getopt(argc, argv, "hv")) != -1)
           23         switch (c)
           24     {
           25         case 'h':
           26             printf("usage: %s [OPTIONS] nx ny\n"
           27                     "where nx and ny are the grid dimensions.\n"
           28                     "-h\tDisplay help\n"
           29                     "-v\tDisplay version information\n", argv[0]);
           30             return 0;
           31             break;
           32         case 'v':
           33             printf("%s: Conway's Game of Life, version %.1f\n"
           34                     "Written by Anders Damsgaard, "
           35                     "https://github.com/anders-dc/game-of-life\n", argv[0], GOLVERSION);
           36             return 0;
           37             break;
           38         case '?':
           39             if (isprint(optopt))
           40                 fprintf(stderr, "Unknown option `-%c`.\n", optopt);
           41             else
           42                 fprintf(stderr, "Unknown option character `\\x%x`.\n", optopt);
           43             return 1;
           44 
           45         default:
           46             abort();
           47     }
           48 
           49     if (optind == argc - 2) {
           50         nx = atoi(argv[optind]);
           51         ny = atoi(argv[optind + 1]);
           52     } 
           53 
           54     printf("Grid dimensions: %dx%d\n", nx, ny);
           55 
           56     allocate_matrix(&cells, nx, ny);
           57     allocate_matrix(&neighbors, nx, ny);
           58 
           59     random_population(cells, nx, ny, 0.5);
           60 
           61     print_cell_matrix(cells, nx, ny);
           62 
           63     while (world_is_dead == 0) {
           64 
           65         world_is_dead = find_neighbor_count(cells, neighbors, nx, ny);
           66         cell_transitions(cells, neighbors, nx, ny);
           67 
           68         printf("\n%d. generation (end with Ctrl-C)\n", it);
           69 #ifdef SHOW_NEIGHBORS
           70         print_matrix("neighbors", neighbors, nx, ny);
           71 #endif
           72         print_cell_matrix(cells, nx, ny);
           73 
           74         usleep(5e5);
           75 
           76         it++;
           77     }
           78 
           79     free_matrix(&cells, nx);
           80     free_matrix(&neighbors, nx);
           81 
           82     return 0;
           83 }