Advertisement
Wolfrost

C++ Basic Game of Life

Aug 24th, 2016
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <cstdlib>
  4. #include <ctime>
  5. using std::cout;
  6. using std::endl;
  7.  
  8. const unsigned int WIDTH = 1000;
  9. const unsigned int HEIGHT = 1000;
  10. const unsigned char LIFE = '1';
  11. const unsigned char DEATH = ' ';
  12.  
  13. unsigned char LifeBoard[WIDTH][HEIGHT];
  14. unsigned char LifeBoardCopy[WIDTH][HEIGHT];
  15.  
  16. void ClearBoard()
  17. {
  18.     for (int i=0; i<WIDTH; i++)
  19.         for (int j=0; j<HEIGHT; j++)
  20.             LifeBoard[i][j] = DEATH;
  21. }
  22.  
  23. void GenerateBoard()
  24. {
  25.     for (int i=0; i<WIDTH; i++)
  26.         for (int j=0; j<HEIGHT; j++)
  27.            LifeBoard[i][j] = rand() % 2 == 0 ? LIFE : DEATH;
  28.     //ClearBoard();
  29.     //LifeBoard[1][1] = LIFE;
  30.     //LifeBoard[1][2] = LIFE;
  31.     //LifeBoard[1][3] = LIFE;
  32. }
  33.  
  34. void PrintBoard()
  35. {
  36.     system("cls");
  37.     system("color 02");
  38.     for (int i=0; i<WIDTH; i++)
  39.     {
  40.         for (int j=0; j<HEIGHT; j++)
  41.             cout << LifeBoard[i][j];
  42.         cout << endl;
  43.     }
  44. }
  45.  
  46. void CopyBoard()
  47. {
  48.     for (int i=0; i<WIDTH; i++)
  49.         for (int j=0; j<HEIGHT; j++)
  50.             LifeBoardCopy[i][j] = LifeBoard[i][j];
  51. }
  52.  
  53. void CopyBoardReverse()
  54. {
  55.     for (int i=0; i<WIDTH; i++)
  56.         for (int j=0; j<HEIGHT; j++)
  57.             LifeBoard[i][j] = LifeBoardCopy[i][j];
  58. }
  59.  
  60. bool IsBoardEmpty()
  61. {
  62.     for (int i=0; i<WIDTH; i++)
  63.         for (int j=0; j<HEIGHT; j++)
  64.             if (LifeBoard[i][j] == LIFE) return false;
  65.     return true;
  66. }
  67.  
  68. void UpdateBoard()
  69. {
  70.     int celle_adiacenti = 0;
  71.     for (int i=0; i<WIDTH; i++)
  72.     {
  73.         for (int j=0; j<HEIGHT; j++)
  74.         {
  75.             for (int k=0; k<8; k++)
  76.             {
  77.                 if (k==0)
  78.                     if (j-1 >= 0)
  79.                         if (LifeBoard[i][j-1] == LIFE)
  80.                             celle_adiacenti++;
  81.                 if (k==1)
  82.                     if (i+1 < WIDTH && j-1 >= 0)
  83.                         if (LifeBoard[i+1][j-1] == LIFE)
  84.                             celle_adiacenti++;
  85.                 if (k==2)
  86.                     if (i+1 < WIDTH)
  87.                         if (LifeBoard[i+1][j] == LIFE)
  88.                             celle_adiacenti++;
  89.                 if (k==3)
  90.                     if (i+1 < WIDTH && j+1 < HEIGHT)
  91.                         if (LifeBoard[i+1][j+1] == LIFE)
  92.                             celle_adiacenti++;
  93.                 if (k==4)
  94.                     if (j+1 < HEIGHT)
  95.                         if (LifeBoard[i][j+1] == LIFE)
  96.                             celle_adiacenti++;
  97.                 if (k==5)
  98.                     if (i-1 >= 0 && j+1 < HEIGHT)
  99.                         if (LifeBoard[i-1][j+1] == LIFE)
  100.                             celle_adiacenti++;
  101.                 if (k==6)
  102.                     if (i-1 >= 0)
  103.                         if (LifeBoard[i-1][j] == LIFE)
  104.                             celle_adiacenti++;
  105.                 if (k==7)
  106.                     if (i-1 >= 0 && j-1 >= 0)
  107.                         if (LifeBoard[i-1][j-1] == LIFE)
  108.                             celle_adiacenti++;
  109.             }
  110.             if (LifeBoard[i][j] == DEATH)
  111.                 if (celle_adiacenti == 3)
  112.                     LifeBoardCopy[i][j] = LIFE;
  113.             if (LifeBoard[i][j] == LIFE)
  114.             {
  115.                 if (celle_adiacenti < 2)
  116.                     LifeBoardCopy[i][j] = DEATH;
  117.                 if (celle_adiacenti == 2 || celle_adiacenti == 3)
  118.                     LifeBoardCopy[i][j] = LIFE;
  119.                 if (celle_adiacenti > 3)
  120.                     LifeBoardCopy[i][j] = DEATH;
  121.             }
  122.             celle_adiacenti = 0;
  123.         }
  124.     }
  125.     CopyBoardReverse();
  126. }
  127.  
  128. int main()
  129. {
  130.     srand((unsigned)time(0));
  131.     GenerateBoard();
  132.     CopyBoard();
  133.     PrintBoard();
  134.  
  135.     while (!IsBoardEmpty())
  136.     {
  137.         UpdateBoard();
  138.         PrintBoard();
  139.         Sleep(250);
  140.     }
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement