Advertisement
Guest User

Tic-Tac-Toe

a guest
May 17th, 2012
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.88 KB | None | 0 0
  1. ///////HEADER/////////////
  2. #ifndef TTT_H
  3. #define TTT_H
  4.  
  5. namespace ttt
  6. {
  7.     class Player{
  8.             char symbol;
  9.         public:
  10.             void setPiece(char c);
  11.             char getPiece() const;
  12.     };
  13.  
  14.     void printInfo();
  15.     void drawBoard(char cArr[][3]);
  16.     void quadBoard();
  17.     int getQuad();
  18.     bool quadFree(int i, bool status[]);
  19.     void placePiece(char cArr[][3], Player& piece, int quad);
  20.     bool checkWinner(char cArr[][3], bool status[]);
  21.     void resetGame(char cArr[][3], bool status[], bool& win);
  22. }
  23.  
  24. #endif
  25.  
  26. //////////////////////CPP FILE//////////////////////////
  27. #include "ttt.h"
  28. #include <iostream>
  29. using namespace std;
  30.  
  31. namespace ttt{
  32.     void Player::setPiece(char c){ symbol = c; }
  33.     char Player::getPiece() const { return symbol;}
  34.  
  35.     void printInfo()
  36.     {
  37.         cout << "\t\t\t***********************************\n";
  38.         cout << "\t\t\t***********************************\n";
  39.         cout << "\t\t\t********** TIC-TAC-TOE ************\n";
  40.         cout << "\t\t\t***********************************\n";
  41.         cout << "\t\t\t***********************************\n";
  42.    
  43.         cout << "Player 1 is 'x' and Player 2 is 'o'!\n";
  44.     }
  45.  
  46.     void drawBoard(char cArr[][3])
  47.     {
  48.         for (int i = 0; i < 3; i++)
  49.         {
  50.             for(int j = 0; j < 3; j++)
  51.             {
  52.                 cout << " " << cArr[i][j] << " ";
  53.                 if(j == 0 || j == 1)
  54.                     cout << "|";
  55.             }
  56.             if(i == 0 || i == 1)
  57.                 cout << "\n===========\n";
  58.             else
  59.                 cout << endl;
  60.         }
  61.     }
  62.  
  63.     void quadBoard()
  64.     {
  65.         int arr[3][3] = { { 1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
  66.         for (int i = 0; i < 3; i++)
  67.         {
  68.             for (int j = 0; j < 3; j++)
  69.             {
  70.                 cout << " " << arr[i][j] << " ";
  71.                 if(j == 0 || j == 1)
  72.                     cout << "|";
  73.             }
  74.             if(i == 0 || i == 1)
  75.                 cout << "\n===========\n";
  76.             else
  77.                 cout << endl;
  78.         }
  79.     }
  80.    
  81.     int getQuad()
  82.     {
  83.         int quad;
  84.         cout << "Player, pick a quadrant: ";
  85.         cin >> quad;
  86.         while(cin.fail() || quad < 1 || quad > 9)
  87.         {
  88.             cout << "That isn't a number between 1 and 9. Try again.\n";
  89.             cin.clear();
  90.             cin.ignore(100, '\n');
  91.             cout << "Player, pick a quadrant: ";
  92.             cin >> quad;
  93.         }
  94.        
  95.         return quad;
  96.     }
  97.  
  98.     bool quadFree(int i, bool status[])
  99.     {
  100.         i = i - 1;
  101.         if(status[i] == true)
  102.         {
  103.             status[i] = false;
  104.             return true;
  105.         }
  106.         else
  107.             return false;
  108.     }  
  109.    
  110.     void placePiece(char cArr[][3], Player& piece, int quad)
  111.     {
  112.         switch(quad)
  113.         {
  114.           case 1:
  115.             cArr[0][0] = piece.getPiece();
  116.             break;
  117.           case 2:
  118.             cArr[0][1] = piece.getPiece();
  119.             break;
  120.           case 3:
  121.             cArr[0][2] = piece.getPiece();
  122.             break;
  123.           case 4:
  124.             cArr[1][0] = piece.getPiece();
  125.             break;
  126.           case 5:
  127.             cArr[1][1] = piece.getPiece();
  128.             break;
  129.           case 6:
  130.             cArr[1][2] = piece.getPiece();
  131.             break;
  132.           case 7:
  133.             cArr[2][0] = piece.getPiece();
  134.             break;
  135.           case 8:
  136.             cArr[2][1] = piece.getPiece();
  137.             break;
  138.           case 9:
  139.             cArr[2][2] = piece.getPiece();
  140.             break;
  141.           default:
  142.             cout << "Something happened. No pieces were placed.\n";
  143.             break;
  144.         }
  145.     }
  146.    
  147.     bool checkWinner(char cArr[][3], bool status[])
  148.     {
  149.       bool win = false;
  150.       if(cArr[0][0] == 'x' && cArr[0][1] == 'x' && cArr[0][2] == 'x')
  151.       {
  152.         win = true;
  153.         cout << "Player 1 Wins\n";
  154.         return true;
  155.       }
  156.      
  157.       if(cArr[0][0] == 'o' && cArr[0][1] == 'o' && cArr[0][2] == 'o')
  158.       {
  159.         win = true;
  160.         cout << "Player 2 Wins\n";
  161.         return true;
  162.       } // end of row 1 checks
  163.        if(cArr[1][0] == 'x' && cArr[1][1] == 'x' && cArr[1][2] == 'x')
  164.       {
  165.         win = true;
  166.         cout << "Player 1 Wins\n";
  167.         return true;
  168.       }
  169.      
  170.       if(cArr[1][0] == 'o' && cArr[1][1] == 'o' && cArr[1][2] == 'o')
  171.       {
  172.         win = true;
  173.         cout << "Player 2 Wins\n";
  174.         return true;
  175.       }// end of row two checks
  176.        if(cArr[2][0] == 'x' && cArr[2][1] == 'x' && cArr[2][2] == 'x')
  177.       {
  178.         win = true;
  179.         cout << "Player 1 Wins\n";
  180.         return true;
  181.       }
  182.      
  183.       if(cArr[2][0] == 'o' && cArr[2][1] == 'o' && cArr[2][2] == 'o')
  184.       {
  185.         win = true;
  186.         cout << "Player 2 Wins\n";
  187.         return true;
  188.       }// end of row three checks
  189.       if(cArr[0][0] == 'x' && cArr[1][1] == 'x' && cArr[2][2] == 'x')
  190.       {
  191.         win = true;
  192.         cout << "Player 1 Wins\n";
  193.         return true;
  194.       }
  195.      
  196.       if(cArr[0][0] == 'o' && cArr[1][1] == 'o' && cArr[2][2] == 'o')
  197.       {
  198.         win = true;
  199.         cout << "Player 2 Wins\n";
  200.         return true;
  201.       }// end of diagonal checks
  202.        if(cArr[2][0] == 'x' && cArr[1][1] == 'x' && cArr[0][2] == 'x')
  203.       {
  204.         win = true;
  205.         cout << "Player 1 Wins\n";
  206.         return true;
  207.       }
  208.      
  209.       if(cArr[2][0] == 'o' && cArr[1][1] == 'o' && cArr[0][2] == 'o')
  210.       {
  211.         win = true;
  212.         cout << "Player 2 Wins\n";
  213.         return true;
  214.       }// end of second diagonal
  215.       // check status
  216.       if(status[0] == false && status[1] == false && status[2] == false && status[3] == false && status[4] == false && status[5] == false && status[6] == false && status[7] == false && status[8] == false && win == false)
  217.       {
  218.         cout << "Draw!\n";
  219.         return true;
  220.       }
  221.     }
  222.    
  223.     void resetGame(char cArr[][3], bool status[], bool& win)
  224.     {
  225.         for (int i = 0; i < 3; i++)
  226.         {
  227.           for (int j = 0; j < 3; j++)
  228.           {
  229.             cArr[i][j] = '\0';
  230.           }
  231.         }
  232.        
  233.         for (int k = 0; k < 9; k++)
  234.         {
  235.           status[k] = true;
  236.         }
  237.         win = false;
  238.     }  
  239.                
  240. }
  241.  
  242. ///////////////MAIN FILE/////////////////////
  243.  
  244. #include <iostream>
  245. #include "ttt.h"
  246.  
  247. using namespace std;
  248. using namespace ttt;
  249.  
  250. int main()
  251. {
  252.     Player crosses;
  253.     crosses.setPiece('x');
  254.     Player naughts;
  255.     naughts.setPiece('o');
  256.     char board[3][3] = {"\0"};
  257.     bool flags[9] = {true, true, true, true, true, true, true, true, true};
  258.     bool answer, winner;
  259.     int quad, num;
  260.     bool done = false;
  261.     char fin;
  262.     printInfo();  // print game rules and who is player one and who is player two
  263.    
  264.     while (!done)
  265.     {
  266.         quadBoard();  // draw the board showing the 9 quadrants
  267.         quad = getQuad(); // get the quadrant to place pieces              
  268.         answer = quadFree(quad, flags); // is quadrant empty?
  269.         if (answer == true)
  270.         {
  271.             cout << "Which player (1 or 2): ";
  272.             cin >> num;
  273.             while(cin.fail() || num < 1 || num > 2)
  274.             {
  275.               cout << "That isn't Player 1 or 2. Try again.\n";
  276.               cin.clear();
  277.               cin.ignore(100, '\n');
  278.               cout << "Which player (1 or 2): ";
  279.               cin >> num;
  280.             }
  281.             if (num == 1)
  282.             {
  283.               placePiece(board, crosses, quad);
  284.             }
  285.             if (num == 2)
  286.             {
  287.               placePiece(board, naughts, quad);
  288.             }
  289.         }
  290.         else
  291.             cout << "Quadrant taken. Pick a new one.\n";
  292.         cout << '\n';
  293.         drawBoard(board);
  294.         winner = checkWinner(board, flags);
  295.         if(winner == true)
  296.         {
  297.           cout << "Do you want to quit? (y/n): ";
  298.           cin >> fin;
  299.           switch(fin)
  300.           {
  301.             case 'y':
  302.             case 'Y':
  303.               done = true;
  304.               break;
  305.             case 'n':
  306.             case 'N':
  307.               done = false;
  308.               resetGame(board, flags, winner);
  309.               printInfo();
  310.               break;
  311.             default:
  312.               cout << "That isn't y or n. Try again.\n";
  313.               break;
  314.           }
  315.         }
  316.     }  
  317.     return 0;
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement