Advertisement
TehVulpes

Conway's Game of Life

Sep 25th, 2013
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <chrono>
  3. #include <thread>
  4. #include <stdlib.h>
  5.  
  6. #define DELAY 300
  7. #define WIDTH 240
  8. #define HEIGHT 66
  9.  
  10. using namespace std;
  11.  
  12. void updateField(bool field[WIDTH][HEIGHT]);
  13. void printField(bool field[WIDTH][HEIGHT]);
  14. void randomizeField(bool field[WIDTH][HEIGHT]);
  15.  
  16. bool field[WIDTH][HEIGHT];
  17. const char BLCK = 219;
  18.  
  19. int main(){
  20.     chrono::milliseconds dura(DELAY);
  21.  
  22.     randomizeField(field);
  23.  
  24.     while(true){
  25.         printField(field);
  26.         this_thread::sleep_for(dura);
  27.  
  28.         updateField(field);
  29.     }
  30.  
  31.     return 0;
  32. }
  33.  
  34. void randomizeField(bool field[WIDTH][HEIGHT]){
  35.     for(register int y = 0; y < HEIGHT; y++)
  36.         for(register int x = 0; x < WIDTH; x++)
  37.             if(rand() % 100 < 9) field[x][y] = true;
  38. }
  39.  
  40. void printField(bool field[WIDTH][HEIGHT]){
  41.     for(register int y = 0; y < HEIGHT; y++){
  42.         for(register int x = 0; x < WIDTH; x++){
  43.             if(field[x][y]) cout << BLCK;
  44.             else cout << ' ';
  45.         }
  46.  
  47.         cout << '\n';
  48.     }
  49. }
  50.  
  51. void updateField(bool field[WIDTH][HEIGHT]){
  52.     int neighbors[WIDTH][HEIGHT];
  53.  
  54.     for(register int y = 0; y < HEIGHT; y++)
  55.         for(register int x = 0; x < WIDTH; x++)
  56.             neighbors[x][y] = 0;
  57.  
  58.     for(register int y = 0; y < HEIGHT; y++){
  59.         for(register int x = 0; x < WIDTH; x++){
  60.             if(field[x][y]){
  61.                 for(int x2 = x - 1; x2 <= x + 1; x2++){
  62.                     for(int y2 = y - 1; y2 <= y + 1; y2++){
  63.                         if(x2 == x && y2 == y) continue;
  64.  
  65.                         int x3 = x2 % WIDTH, y3 = y2 % HEIGHT;
  66.                         if(x3 < 0) x3 += WIDTH;
  67.                         if(y3 < 0) y3 += HEIGHT;
  68.  
  69.                         neighbors[x3][y3]++;
  70.                     }
  71.                 }
  72.             }
  73.         }
  74.     }
  75.  
  76.     for(register int y = 0; y < HEIGHT; y++){
  77.         for(register int x = 0; x < WIDTH; x++){
  78.             if(field[x][y]){
  79.                 int neighb = neighbors[x][y];
  80.                 if(neighb == 2 || neighb == 3) field[x][y] = true;
  81.                 else field[x][y] = false;
  82.             }
  83.             else{
  84.                 if(neighbors[x][y] == 3) field[x][y] = true;
  85.             }
  86.         }
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement