Nisheeth

Tic Tac Toe

Jul 5th, 2011
436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <iomanip>
  6. #include <exception>
  7. #include <vector>
  8. #include <time.h>
  9. #include <cstdlib>
  10.  
  11. using std::cout;
  12. using std::cin;
  13. using std::string;
  14. using std::endl;
  15. using std::vector;
  16.  
  17. string Name;
  18. bool LoopCheck = true;
  19. bool Skip = false;
  20.  
  21. void DrawLine (string Lin, int Length = 80)
  22. {
  23.     int j;
  24.         j = 0;
  25.     cout << endl;
  26.     for(int i = 0; i < Length && i < 80; i++)
  27.     {
  28.         cout << Lin[j];
  29.         j++;
  30.         if (j == Lin.size())
  31.         {j = 0;}
  32.     }
  33.     cout << endl;
  34. }
  35.  
  36. class Board_t
  37. {
  38.     public:
  39.     char board[9];
  40.     void SetBoard();
  41.     void PrintBoard();
  42. };
  43.  
  44. Board_t Board;
  45.  
  46. void Board_t::SetBoard()
  47. {
  48.     for( int i = 0;i < 9; i++)
  49.     {
  50.         board[i] = ' ';
  51.     }
  52. }
  53.  
  54. void Board_t::PrintBoard()
  55. {
  56.     cout << endl << endl;
  57.     cout << "\t  1 2 3\n";
  58.     cout << "\t1 " << board[0] << "|" << board[1] << "|"  << board[2];
  59.     cout << "\n\t  -|-|-\n";
  60.     cout << "\t2 " << board[3] << "|" << board[4] << "|" << board[5];
  61.     cout << "\n\t  -|-|-\n";
  62.     cout << "\t3 " << board[6] << "|" << board[7] << "|" << board[8];
  63.     cout << endl << endl;
  64. }
  65.  
  66. class Peg_t
  67. {
  68.     bool UserControl;
  69. public:
  70.     Peg_t (bool UserController);
  71.     char Peg;
  72.     void VictoryCheck();
  73.     void DefeatCheck();
  74.     void Move();
  75.     void CompMove();
  76. };
  77.  
  78. Peg_t User (false);
  79. Peg_t Comp (true);
  80.  
  81. Peg_t::Peg_t (bool UserController)
  82. {
  83.     UserControl = UserController;
  84. }
  85.  
  86. void Peg_t::VictoryCheck()
  87. {
  88.     //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  89.     //User Victory Check
  90.     //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  91.     if  (
  92.             ((Board.board[0] == User.Peg) && (Board.board[1] == User.Peg) && (Board.board[2] == User.Peg)) ||
  93.             ((Board.board[3] == User.Peg) && (Board.board[4] == User.Peg) && (Board.board[5] == User.Peg)) ||
  94.             ((Board.board[6] == User.Peg) && (Board.board[7] == User.Peg) && (Board.board[8] == User.Peg))
  95.         )
  96.     {
  97.         LoopCheck = false;
  98.         cout << "Congratulations " << Name << ". You have won the Game!!!";
  99.     }
  100.    
  101.     else if (
  102.                 ((Board.board[0] == User.Peg) && (Board.board[3] == User.Peg) && (Board.board[6] == User.Peg)) ||
  103.                 ((Board.board[1] == User.Peg) && (Board.board[4] == User.Peg) && (Board.board[7] == User.Peg)) ||
  104.                 ((Board.board[2] == User.Peg) && (Board.board[5] == User.Peg) && (Board.board[8] == User.Peg))
  105.                 )
  106.     {
  107.         LoopCheck = false;
  108.         cout << "Congratulations " << Name << ". You have won the Game!!!";
  109.     }
  110.  
  111.     else if (
  112.                 ((Board.board[0] == User.Peg) && (Board.board[4] == User.Peg) && (Board.board[8] == User.Peg)) ||
  113.                 ((Board.board[2] == User.Peg) && (Board.board[4] == User.Peg) && (Board.board[6] == User.Peg))
  114.                 )
  115.     {
  116.         LoopCheck = false;
  117.         cout << "Congratulations " << Name << ". You have won the Game!!!";
  118.     }
  119. }
  120.  
  121. void Peg_t::DefeatCheck()
  122. {
  123.     //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  124.     //User Defeat Check
  125.     //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  126.     if  (
  127.             (Board.board[0] == Comp.Peg && Board.board[1] == Comp.Peg && Board.board[2] == Comp.Peg) ||
  128.             (Board.board[3] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[5] == Comp.Peg) ||
  129.             (Board.board[6] == Comp.Peg && Board.board[7] == Comp.Peg && Board.board[8] == Comp.Peg)
  130.         )
  131.     {
  132.         LoopCheck = false;
  133.         cout << "You have Lost the game!!!";
  134.     }
  135.    
  136.     else if (
  137.                     (Board.board[0] == Comp.Peg && Board.board[3] == Comp.Peg && Board.board[6] == Comp.Peg) ||
  138.                     (Board.board[1] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[7] == Comp.Peg) ||
  139.                     (Board.board[2] == Comp.Peg && Board.board[5] == Comp.Peg && Board.board[8] == Comp.Peg)
  140.                 )
  141.     {
  142.         LoopCheck = false;
  143.         cout << "You have Lost the game!!!";
  144.     }
  145.  
  146.     else if (
  147.                     (Board.board[0] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[8] == Comp.Peg) ||
  148.                     (Board.board[2] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[6] == Comp.Peg)
  149.                 )
  150.     {
  151.         LoopCheck = false;
  152.         cout << "You have Lost the game!!!";
  153.     }
  154. }
  155.  
  156. void Peg_t::Move()
  157. {
  158.    
  159.         int Loc;
  160.         cout << "\nPlease enter the position of the Place you want to move:  ";
  161.         cin >> Loc;
  162.         cin.sync();
  163.         switch(Loc)
  164.         {
  165.         //
  166.         //Row 1:
  167.         //
  168.         case 11:
  169.             if (Board.board[0] == ' ')
  170.             {
  171.                 Board.board[0] = User.Peg;
  172.             }
  173.             else
  174.             {
  175.                 cout << "You made an illegal move! Turn Skipped";
  176.                 Skip = true;
  177.             }
  178.             break;
  179.         case 12:
  180.             if (Board.board[1] == ' ')
  181.             {
  182.                 Board.board[1] = User.Peg;
  183.             }
  184.             else
  185.             {
  186.                 cout << "You made an illegal move! Turn Skipped";
  187.                 Skip = true;
  188.             }
  189.             break;
  190.         case 13:
  191.             if (Board.board[2] == ' ')
  192.             {
  193.                 Board.board[2] = User.Peg;
  194.             }
  195.             else
  196.             {
  197.                 cout << "You made an illegal move! Turn Skipped";
  198.                 Skip = true;
  199.             }
  200.             break;
  201.         //
  202.         //Row 2:
  203.         //
  204.         case 21:
  205.             if (Board.board[3] == ' ')
  206.             {
  207.                 Board.board[3] = User.Peg;
  208.             }
  209.             else
  210.             {
  211.                 cout << "You made an illegal move! Turn Skipped";
  212.                 Skip = true;
  213.             }
  214.             break;
  215.         case 22:
  216.             if (Board.board[4] == ' ')
  217.             {
  218.                 Board.board[4] = User.Peg;
  219.             }
  220.             else
  221.             {
  222.                 cout << "You made an illegal move! Turn Skipped";
  223.                 Skip = true;
  224.             }
  225.             break;
  226.         case 23:
  227.             if (Board.board[5] == ' ')
  228.             {
  229.                 Board.board[5] = User.Peg;
  230.             }
  231.             else
  232.             {
  233.                 cout << "You made an illegal move! Turn Skipped";
  234.                 Skip = true;
  235.             }
  236.             break;
  237.        
  238.         //
  239.         //Row 3:
  240.         //
  241.         case 31:
  242.             if (Board.board[6] == ' ')
  243.             {
  244.                 Board.board[6] = User.Peg;
  245.             }
  246.             else
  247.             {
  248.                 cout << "You made an illegal move! Turn Skipped";
  249.                 Skip = true;
  250.             }
  251.             break;
  252.         case 32:
  253.             if (Board.board[7] == ' ')
  254.             {
  255.                 Board.board[7] = User.Peg;
  256.             }
  257.             else
  258.             {
  259.                 cout << "You made an illegal move! Turn Skipped";
  260.                 Skip = true;
  261.             }
  262.             break;
  263.         case 33:
  264.             if (Board.board[8] == ' ')
  265.             {
  266.                 Board.board[8] = User.Peg;
  267.             }
  268.             else
  269.             {
  270.                 cout << "You made an illegal move! Turn Skipped";
  271.                 Skip = true;
  272.             }
  273.             break;
  274.         default:
  275.             cout << "Illegal Move! Turn Skipped";
  276.                 Skip = true;
  277.         }
  278. }
  279.  
  280. void Peg_t::CompMove()
  281. {
  282.     {
  283.         //
  284.         //Winning Move Check:
  285.         //
  286.         //
  287.         //Rows
  288.         //Row 1
  289.         if (Board.board[0] == Comp.Peg && Board.board[1] == Comp.Peg && Board.board[2] == ' ')
  290.         {
  291.             Board.board[2] = Comp.Peg;
  292.         }
  293.        
  294.         else if (Board.board[0] == Comp.Peg && Board.board[2] == Comp.Peg && Board.board[1] == ' ')
  295.         {
  296.             Board.board[1] = Comp.Peg;
  297.         }
  298.        
  299.         else if (Board.board[1] == Comp.Peg && Board.board[2] == Comp.Peg && Board.board[0] == ' ')
  300.         {
  301.             Board.board[0] = Comp.Peg;
  302.         }
  303.        
  304.         //Row 2:
  305.        
  306.         else if (Board.board[3] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[5] == ' ')
  307.         {
  308.             Board.board[5] = Comp.Peg;
  309.         }
  310.        
  311.         else if (Board.board[3] == Comp.Peg && Board.board[5] == Comp.Peg && Board.board[4] == ' ')
  312.         {
  313.             Board.board[4] = Comp.Peg;
  314.         }
  315.        
  316.         else if (Board.board[4] == Comp.Peg && Board.board[5] == Comp.Peg && Board.board[3] == ' ')
  317.         {
  318.             Board.board[3] = Comp.Peg;
  319.         }
  320.        
  321.         //Row 3:
  322.        
  323.         else if (Board.board[6] == Comp.Peg && Board.board[7] == Comp.Peg && Board.board[8] == ' ')
  324.         {
  325.             Board.board[8] = Comp.Peg;
  326.         }
  327.        
  328.         else if (Board.board[6] == Comp.Peg && Board.board[8] == Comp.Peg && Board.board[7] == ' ')
  329.         {
  330.             Board.board[7] = Comp.Peg;
  331.         }
  332.        
  333.         else if (Board.board[7] == Comp.Peg && Board.board[8] == Comp.Peg && Board.board[6] == ' ')
  334.         {
  335.             Board.board[6] = Comp.Peg;
  336.         }
  337.        
  338.         //
  339.         //Columns
  340.         //
  341.         //Column 1:
  342.        
  343.         else if (Board.board[0] == Comp.Peg && Board.board[3] == Comp.Peg && Board.board[6] == ' ')
  344.         {
  345.             Board.board[6] = Comp.Peg;
  346.         }
  347.        
  348.         else if (Board.board[0] == Comp.Peg && Board.board[6] == Comp.Peg && Board.board[3] == ' ')
  349.         {
  350.             Board.board[3] = Comp.Peg;
  351.         }
  352.        
  353.         else if (Board.board[3] == Comp.Peg && Board.board[6] == Comp.Peg && Board.board[0] == ' ')
  354.         {
  355.             Board.board[0] = Comp.Peg;
  356.         }
  357.        
  358.         //Column 2:
  359.        
  360.         else if (Board.board[1] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[7] == ' ')
  361.         {
  362.             Board.board[7] = Comp.Peg;
  363.         }
  364.        
  365.         else if (Board.board[1] == Comp.Peg && Board.board[7] == Comp.Peg && Board.board[4] == ' ')
  366.         {
  367.             Board.board[4] = Comp.Peg;
  368.         }
  369.        
  370.         else if (Board.board[4] == Comp.Peg && Board.board[7] == Comp.Peg && Board.board[1] == ' ')
  371.         {
  372.             Board.board[1] = Comp.Peg;
  373.         }
  374.        
  375.         //Column 3:
  376.        
  377.         else if (Board.board[2] == Comp.Peg && Board.board[5] == Comp.Peg && Board.board[8] == ' ')
  378.         {
  379.             Board.board[8] = Comp.Peg;
  380.         }
  381.        
  382.         else if (Board.board[2] == Comp.Peg && Board.board[8] == Comp.Peg && Board.board[5] == ' ')
  383.         {
  384.             Board.board[5] = Comp.Peg;
  385.         }
  386.        
  387.         else if (Board.board[5] == Comp.Peg && Board.board[8] == Comp.Peg && Board.board[2] == ' ')
  388.         {
  389.             Board.board[2] = Comp.Peg;
  390.         }
  391.  
  392.         //
  393.         //Diagonals:
  394.         //
  395.         //Diagonal 1:
  396.         else if (Board.board[0] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[8] == ' ')
  397.         {
  398.             Board.board[8] = Comp.Peg;
  399.         }
  400.  
  401.         else if (Board.board[0] == Comp.Peg && Board.board[8] == Comp.Peg && Board.board[4] == ' ')
  402.         {
  403.             Board.board[4] = Comp.Peg;
  404.         }
  405.  
  406.         else if (Board.board[4] == Comp.Peg && Board.board[8] == Comp.Peg && Board.board[0] == ' ')
  407.         {
  408.             Board.board[0] = Comp.Peg;
  409.         }
  410.  
  411.         //Diagonal 2:
  412.         else if (Board.board[2] == Comp.Peg && Board.board[4] == Comp.Peg && Board.board[6] == ' ')
  413.         {
  414.             Board.board[6] = Comp.Peg;
  415.         }
  416.  
  417.         else if (Board.board[2] == Comp.Peg && Board.board[6] == Comp.Peg && Board.board[4] == ' ')
  418.         {
  419.             Board.board[4] = Comp.Peg;
  420.         }
  421.  
  422.         else if (Board.board[4] == Comp.Peg && Board.board[6] == Comp.Peg  && Board.board[2] == ' ')
  423.         {
  424.             Board.board[2] = Comp.Peg;
  425.         }
  426.         //
  427.         //
  428.         //Blocking Move:
  429.         //
  430.         //
  431.         //Rows:
  432.         //Row 1
  433.         else if (Board.board[0] == User.Peg && Board.board[1] == User.Peg && Board.board[2] == ' ')
  434.         {
  435.             Board.board[2] = Comp.Peg;
  436.         }
  437.        
  438.         else if (Board.board[0] == User.Peg && Board.board[2] == User.Peg && Board.board[1] == ' ')
  439.         {
  440.             Board.board[1] = Comp.Peg;
  441.         }
  442.        
  443.         else if (Board.board[1] == User.Peg && Board.board[2] == User.Peg && Board.board[0] == ' ')
  444.         {
  445.             Board.board[0] = Comp.Peg;
  446.         }
  447.        
  448.         //Row 2:
  449.        
  450.         else if (Board.board[3] == User.Peg && Board.board[4] == User.Peg && Board.board[5] == ' ')
  451.         {
  452.             Board.board[5] = Comp.Peg;
  453.         }
  454.        
  455.         else if (Board.board[3] == User.Peg && Board.board[5] == User.Peg && Board.board[4] == ' ')
  456.         {
  457.             Board.board[4] = Comp.Peg;
  458.         }
  459.        
  460.         else if (Board.board[4] == User.Peg && Board.board[5] == User.Peg && Board.board[3] == ' ')
  461.         {
  462.             Board.board[3] = Comp.Peg;
  463.         }
  464.        
  465.         //Row 3:
  466.        
  467.         else if (Board.board[6] == User.Peg && Board.board[7] == User.Peg && Board.board[8] == ' ')
  468.         {
  469.             Board.board[8] = Comp.Peg;
  470.         }
  471.        
  472.         else if (Board.board[6] == User.Peg && Board.board[8] == User.Peg && Board.board[7] == ' ')
  473.         {
  474.             Board.board[7] = Comp.Peg;
  475.         }
  476.        
  477.         else if (Board.board[7] == User.Peg && Board.board[8] == User.Peg && Board.board[6] == ' ')
  478.         {
  479.             Board.board[6] = Comp.Peg;
  480.         }
  481.        
  482.         //
  483.         //Columns
  484.         //
  485.         //Column 1:
  486.        
  487.         else if (Board.board[0] == User.Peg && Board.board[3] == User.Peg && Board.board[6] == ' ')
  488.         {
  489.             Board.board[6] = Comp.Peg;
  490.         }
  491.        
  492.         else if (Board.board[0] == User.Peg && Board.board[6] == User.Peg && Board.board[3] == ' ')
  493.         {
  494.             Board.board[3] = Comp.Peg;
  495.         }
  496.        
  497.         else if (Board.board[3] == User.Peg && Board.board[6] == User.Peg && Board.board[0] == ' ')
  498.         {
  499.             Board.board[0] = Comp.Peg;
  500.         }
  501.        
  502.         //Column 2:
  503.        
  504.         else if (Board.board[1] == User.Peg && Board.board[4] == User.Peg && Board.board[7] == ' ')
  505.         {
  506.             Board.board[7] = Comp.Peg;
  507.         }
  508.        
  509.         else if (Board.board[1] == User.Peg && Board.board[7] == User.Peg && Board.board[4] == ' ')
  510.         {
  511.             Board.board[4] = Comp.Peg;
  512.         }
  513.        
  514.         else if (Board.board[4] == User.Peg && Board.board[7] == User.Peg && Board.board[1] == ' ')
  515.         {
  516.             Board.board[1] = Comp.Peg;
  517.         }
  518.        
  519.         //Column 3:
  520.        
  521.         else if (Board.board[2] == User.Peg && Board.board[5] == User.Peg && Board.board[8] == ' ')
  522.         {
  523.             Board.board[8] = Comp.Peg;
  524.         }
  525.        
  526.         else if (Board.board[2] == User.Peg && Board.board[8] == User.Peg  && Board.board[5] == ' ')
  527.         {
  528.             Board.board[5] = Comp.Peg;
  529.         }
  530.        
  531.         else if (Board.board[5] == User.Peg && Board.board[8] == User.Peg && Board.board[2] == ' ')
  532.         {
  533.             Board.board[2] = Comp.Peg;
  534.         }
  535.  
  536.         //
  537.         //Diagonals:
  538.         //
  539.         //Diagonal 1:
  540.         else if (Board.board[0] == User.Peg && Board.board[4] == User.Peg  && Board.board[8] == ' ')
  541.         {
  542.             Board.board[8] = Comp.Peg;
  543.         }
  544.  
  545.         else if (Board.board[0] == User.Peg && Board.board[8] == User.Peg  && Board.board[4] == ' ')
  546.         {
  547.             Board.board[4] = Comp.Peg;
  548.         }
  549.  
  550.         else if (Board.board[4] == User.Peg && Board.board[8] == User.Peg && Board.board[0] == ' ')
  551.         {
  552.             Board.board[0] = Comp.Peg;
  553.         }
  554.  
  555.         //Diagonal 2:
  556.         else if (Board.board[2] == User.Peg && Board.board[4] == User.Peg  && Board.board[6] == ' ')
  557.         {
  558.             Board.board[6] = Comp.Peg;
  559.         }
  560.  
  561.         else if (Board.board[2] == User.Peg && Board.board[6] == User.Peg && Board.board[4] == ' ')
  562.         {
  563.             Board.board[4] = Comp.Peg;
  564.         }
  565.  
  566.         else if (Board.board[4] == User.Peg && Board.board[6] == User.Peg && Board.board[2] == ' ')
  567.         {
  568.             Board.board[2] = Comp.Peg;
  569.         }
  570.  
  571.  
  572.         //Random Move:
  573.         else
  574.         {
  575.             int Rand;
  576.             while (true)
  577.             {  
  578.                 Rand = (rand())%9;
  579.                 if (Board.board[Rand] == ' ')
  580.                 {
  581.                     break;
  582.                 }                  
  583.             }
  584.             Board.board[Rand] = Comp.Peg;
  585.         }
  586.        
  587.     }
  588. }
  589.  
  590. int main ()
  591. {
  592.     srand (time (NULL));
  593.  
  594.     User.Peg = 'X';
  595.     Comp.Peg = 'O';
  596.     cout << "\tTHE BOARD:";
  597.    
  598.     DrawLine ("_", 18);
  599.    
  600.     Board.SetBoard();
  601.     Board.PrintBoard();
  602.     DrawLine ("=");
  603.    
  604.     cout << "\t\t\t\t  Rules:";
  605.     cout << "\n\t\t\t\t =======" << endl << endl;
  606.     cout << "The Aim of the Game is to put 3 of your marks [X] in one Row, Column or Diagonal!" << endl;
  607.     cout << "You lose if the Computer put's 3 of its Marks [O] in one Row, Column or Doagonal!" << endl;
  608.     cout << "To put your Mark, Put in the Row Number and then the Column Number." << endl;
  609.     cout << "So in order to put a Cross in the (x = 1, y = 2), you will type in 12." << endl;
  610.     cout << "The following locations are allowed: 11, 12, 13; 21, 22, 23; 31, 32, 33;" << endl;
  611.     cout << "Any other entry will be considered invalid." << endl;
  612.     cout << "You cannot play on an already filled block! Your turned will be skipped f you do!" << endl;
  613.     DrawLine ("_");
  614.     cout << "Please enter your Name:  ";
  615.     getline (cin, Name);
  616.     DrawLine ("_");
  617.     int x = 9;
  618.     for (int i = 0;i < x && LoopCheck;i++)
  619.     {
  620.         if (i%2 == 0)
  621.         {
  622.             User.VictoryCheck();
  623.             User.DefeatCheck();
  624.             Board.PrintBoard();
  625.             User.Move();
  626.             if (Skip)
  627.             {
  628.                 x++;
  629.                 Skip = false;
  630.             }
  631.         }
  632.         else
  633.         {
  634.             Comp.VictoryCheck();
  635.             Comp.DefeatCheck();
  636.             cout << "The Computer's Turn:  ";
  637.             Comp.CompMove();
  638.             Board.PrintBoard();
  639.         }
  640.         DrawLine ("-");
  641.     }    
  642.     DrawLine ("~");
  643.     cout << "Thank You for Playing\n";
  644.     DrawLine ("~");
  645.     //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  646.     //Termination And Message:
  647.     //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  648.     ;cout << "Press Enter to exit . . .";  
  649.     cin.sync();
  650.     cin.get();
  651.     return 0;
  652. }
Advertisement
Add Comment
Please, Sign In to add comment