grzesiek11

TicTacToe #1

Aug 9th, 2018
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <ctime>
  4. #include <cstdlib>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. enum xo
  10. {
  11.     NONE = 0,
  12.     O = 1,
  13.     X = 2,
  14.     DRAW = -1
  15. };
  16.  
  17. struct sq
  18. {
  19.     xo val;
  20.     int num;
  21. };
  22.  
  23. class Board
  24. {
  25.   public:
  26.     Board(int size);
  27.     void prtVal(xo val);
  28.     void setTo(int x, int y, xo that);
  29.     void draw();
  30.     xo whoWin();
  31.     xo getTurn();
  32.     xo getFrom(int x, int y);
  33.     void nextTurn();
  34.     int search1D(int num, int &i2);
  35.  
  36.   private:
  37.     void prt(int x, int y);
  38.     int getNum(int x, int y);
  39.  
  40.     vector< vector<sq> > lvl;
  41.     //sq lvl[3][3];
  42.     xo turn;
  43.     int size = 3;
  44. };
  45.  
  46. Board::Board(int whatSize)
  47. {
  48.     size = whatSize;
  49.     lvl.resize(size);
  50.     for (int i = 0; i < size; i++)
  51.     {
  52.         lvl[i].resize(size);
  53.     }
  54.     if (rand() % 2 == 0)
  55.     {
  56.         turn = O;
  57.     }
  58.     else
  59.     {
  60.         turn = X;
  61.     }
  62.     for (int i = 0; i < size; i++)
  63.     {
  64.         for (int i2 = 0; i2 < size; i2++)
  65.         {
  66.             lvl[i2][i].val = NONE;
  67.         }
  68.     }
  69.     int temp = 0;
  70.     for (int i = 0; i < size; i++)
  71.     {
  72.         for (int i2 = 0; i2 < size; i2++)
  73.         {
  74.             lvl[i2][i].num = temp;
  75.             temp++;
  76.         }
  77.     }
  78. }
  79.  
  80. //Public:
  81.  
  82. void Board::prtVal(xo val)
  83. {
  84.     if (val != NONE)
  85.     {
  86.         if (val == X)
  87.         {
  88.             cout << 'X';
  89.         }
  90.         else
  91.         {
  92.             cout << 'O';
  93.         }
  94.     }
  95. }
  96.  
  97. void Board::draw()
  98. {
  99.     //Clear screen
  100.     for (int i = 0; i < size; i++)
  101.     {
  102.         for (int i2 = 0; i2 < size; i2++)
  103.         {
  104.             prt(i2, i);
  105.             cout << ' ';
  106.         }
  107.         cout << '\n';
  108.     }
  109. }
  110.  
  111. xo Board::whoWin()
  112. {
  113.     int inRow = 3;
  114.     int counter = 0;
  115.     //-X-X-X-
  116.     for (int i = 0; i < size; i++)
  117.     {
  118.         for (int i2 = 0; i2 < 1 + size - 3; i2++)
  119.         {
  120.             for (int i3 = i; i3 < inRow; i3++)
  121.             {
  122.                 counter = 0;
  123.                 if (getFrom(i3, i) == getFrom(i3 + 1, i))
  124.                 {
  125.                     counter++;
  126.                 }
  127.                 if (counter == 2 && !getFrom(i3, i) == NONE)
  128.                 {
  129.                     return getFrom(i3, i);
  130.                 }
  131.             }
  132.         }
  133.     }
  134.     /*
  135.     -X-
  136.     -X-
  137.     -X-
  138.     */
  139.     for (int i = 0; i < size; i++)
  140.     {
  141.         for (int i2 = 0; i2 < size - 1; i2++)
  142.         {
  143.             counter = 0;
  144.             if (getFrom(i, i2) == getFrom(i, i2 + 1))
  145.             {
  146.                 counter++;
  147.             }
  148.             if (counter == 2 && !getFrom(i, i2) == NONE)
  149.             {
  150.                 return getFrom(i, i2);
  151.             }
  152.         }
  153.         /*
  154.         -X-
  155.             -X-
  156.                 -X-
  157.         */
  158.         counter = 0;
  159.         for (int i = 0; i < size - 1; i++)
  160.         {
  161.             if (getFrom(i, i) == getFrom(i + 1, i + 1))
  162.             {
  163.                 counter++;
  164.             }
  165.             if (counter == 2 && !getFrom(i, i) == NONE)
  166.             {
  167.                 return getFrom(i, i);
  168.             }
  169.         }
  170.         /*
  171.         counter = 0;
  172.         for (int i = 0; i < 3; i++)
  173.         {
  174.             if (getFrom(i, i) == getFrom(0, 0))
  175.             {
  176.                 counter++;
  177.             }
  178.         }
  179.         if (counter == 3)
  180.         {
  181.             return getFrom(0, 0);
  182.         }
  183.         /*
  184.                 -X-
  185.             -X-
  186.         -X-
  187.         */
  188.         counter = 0;
  189.         for (int i = 0; i < size - 1; i++)
  190.         {
  191.             if (getFrom(i, 2 - i) == getFrom(i + 1, 2 - i + 1))
  192.             {
  193.                 counter++;
  194.             }
  195.             if (counter == 2 && !getFrom(i, 2 - i) == NONE)
  196.             {
  197.                 return getFrom(i, 2 - i);
  198.             }
  199.         }
  200.         /*
  201.         counter = 0;
  202.         for (int i = 0; i < 3; i++)
  203.         {
  204.             for (int i2 = 2; i >= 0; i--)
  205.             {
  206.                 if (getFrom(i2, i) == getFrom(2, 0))
  207.                 {
  208.                     counter++;
  209.                 }
  210.             }
  211.         }
  212.         if (counter == 3)
  213.         {
  214.             return getFrom(0, 2);
  215.         }
  216.         /*
  217.         -X-O-X-
  218.         -X-O-X-
  219.         -O-X-O-
  220.         */
  221.         counter = 0;
  222.         for (int i = 0; i < size; i++)
  223.         {
  224.             for (int i2 = 0; i2 < size; i2++)
  225.             {
  226.                 if (getFrom(i2, i) != NONE)
  227.                 {
  228.                     counter++;
  229.                 }
  230.             }
  231.         }
  232.         if (counter == size * size)
  233.         {
  234.             return DRAW;
  235.         }
  236.         //Other
  237.         return NONE;
  238.     }
  239. }
  240.  
  241. xo Board::getTurn()
  242. {
  243.     return turn;
  244. }
  245.  
  246. xo Board::getFrom(int x, int y)
  247. {
  248.     return lvl[x][y].val;
  249. }
  250.  
  251. void Board::nextTurn()
  252. {
  253.     if (getTurn() == X)
  254.     {
  255.         turn = O;
  256.     }
  257.     else
  258.     {
  259.         turn = X;
  260.     }
  261. }
  262.  
  263. int Board::search1D(int num, int &i2)
  264. {
  265.     for (int i = 0; i < size; i++)
  266.     {
  267.         for (i2 = 0; i2 < size; i2++)
  268.         {
  269.             if (getNum(i, i2) == num)
  270.             {
  271.                 return i;
  272.             }
  273.         }
  274.     }
  275.     return -1;
  276. }
  277.  
  278. void Board::setTo(int x, int y, xo that)
  279. {
  280.     lvl[x][y].val = that;
  281. }
  282.  
  283. //Private:
  284.  
  285. void Board::prt(int x, int y)
  286. {
  287.     if (lvl[x][y].val != NONE)
  288.     {
  289.         prtVal(lvl[x][y].val);
  290.     }
  291.     else
  292.     {
  293.         cout << lvl[x][y].num;
  294.     }
  295. }
  296.  
  297. int Board::getNum(int x, int y)
  298. {
  299.     return lvl[x][y].num;
  300. }
  301.  
  302. //Normal:
  303.  
  304. void game()
  305. {
  306.     int choice;
  307.     Board board(3);
  308.     while (1)
  309.     {
  310.         board.draw();
  311.         if (board.whoWin() != NONE)
  312.         {
  313.             if (board.whoWin() != DRAW)
  314.             {
  315.                 board.prtVal(board.whoWin());
  316.                 cout << " win!\n";
  317.             }
  318.             else
  319.             {
  320.                 cout << "Draw!\n";
  321.             }
  322.             cin.ignore();
  323.             cin.get();
  324.             break;
  325.         }
  326.         board.prtVal(board.getTurn());
  327.         cout << " turn...\n";
  328.         cout << "Enter square number:\n";
  329.         cin >> choice;
  330.         int y = 0;
  331.         int x = board.search1D(choice, y);
  332.         if (x != -1)
  333.         {
  334.             if (board.getFrom(x, y) == NONE)
  335.             {
  336.                 board.setTo(x, y, board.getTurn());
  337.                 board.nextTurn();
  338.             }
  339.             else
  340.             {
  341.                 cout << "Square isn't empty!\n";
  342.             }
  343.         }
  344.         else
  345.         {
  346.             cout << "Square don't exist!\n";
  347.         }
  348.     }
  349. }
  350.  
  351. int main()
  352. {
  353.     srand(time(NULL));
  354.     int choice;
  355.     while (1)
  356.     {
  357.         //Clear screen
  358.         cout << "TicTacToe v1.0 (C) Grzesiek11\n";
  359.         cout << "[1] Play\n";
  360.         cout << "[0] Exit\n";
  361.         cin >> choice;
  362.         switch (choice)
  363.         {
  364.         case 1:
  365.             game();
  366.             break;
  367.         case 0:
  368.             return 0;
  369.             break;
  370.         default:
  371.             cout << "Bad choice!\n";
  372.             break;
  373.         }
  374.     }
  375. }
Advertisement
Add Comment
Please, Sign In to add comment