Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. //game_of_life.c - generates a random initial state of the grid, then cycles through the # of generations specified.
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <unistd.h>
  6. #include <math.h>
  7. #include <string.h>
  8.  
  9. #define KBLU "\x1B[34m"
  10.  
  11. const int NUM_ROWS = 65; // note: one-cell border is included in this size
  12. const int NUM_COLS = 129; // ^
  13. const int GENERATIONS = 128;
  14.  
  15. void generate(int grid[NUM_ROWS][NUM_COLS]);
  16.  
  17. int main(void)
  18. {
  19. int grid[NUM_ROWS][NUM_COLS];
  20. srand(time(NULL));
  21. // initialise one-cell border around grid
  22. for(int i = 0; i < NUM_ROWS; i++)
  23. {
  24. grid[i][0] = 0;
  25. grid[i][NUM_COLS - 1] = 0;
  26. }
  27. for(int i = 1; i < NUM_COLS; i++)
  28. {
  29. grid[0][i] = 0;
  30. grid[NUM_ROWS - 1][i] = 0;
  31. }
  32. for(int i = 1; i < NUM_ROWS - 1; i++)
  33. {
  34. for(int j = 1; j < NUM_COLS - 1; j++)
  35. {
  36. grid[i][j] = rint((float) (rand() % 10) - 5);
  37. }
  38. }
  39. // cycle through generations
  40. generate(grid);
  41. }
  42.  
  43. void generate(int grid[NUM_ROWS][NUM_COLS])
  44. {
  45. for(int i = 0; i < GENERATIONS; i++)
  46. {
  47. int new_grid[NUM_ROWS][NUM_COLS];
  48. printf("\e[1;1H\e[2J");
  49. sleep(1);
  50. // print current state to screen
  51. for (int i = 0; i < NUM_ROWS; i++)
  52. {
  53. for(int j = 0; j < NUM_COLS; j++)
  54. {
  55. printf(KBLU "%c", grid[i][j] == 1 ? 'o' : ' ');
  56. }
  57. printf("\n");
  58. }
  59. // initialise one-cell border around grid
  60. for(int i = 0; i < NUM_ROWS; i++)
  61. {
  62. new_grid[i][0] = 0;
  63. new_grid[i][NUM_COLS - 1] = 0;
  64. }
  65. for(int i = 1; i < NUM_COLS; i++)
  66. {
  67. new_grid[0][i] = 0;
  68. new_grid[NUM_ROWS - 1][i] = 0;
  69. }
  70. // apply rules
  71. for(int i = 1; i < NUM_ROWS - 1; i++)
  72. {
  73. for(int j = 1; j < NUM_COLS - 1; j++)
  74. {
  75. int count = 0;
  76. count = grid[i-1][j-1] + grid[i-1][j] + grid[i-1][j+1] + grid[i][j-1] + grid[i][j+1]
  77. + grid[i+1][j-1] + grid[i+1][j] + grid[i+1][j+1];
  78. if(grid[i][j] && (count < 2 || count > 3))
  79. new_grid[i][j] = 0;
  80. else if (grid[i][j])
  81. new_grid[i][j] = 1;
  82. else if (!grid[i][j] && count == 3)
  83. new_grid[i][j] = 1;
  84. else
  85. new_grid[i][j] = 0;
  86. }
  87.  
  88. }
  89. memcpy(grid, new_grid, NUM_ROWS * NUM_COLS * sizeof(int));
  90.  
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement