Guest User

Tic Tac Toe

a guest
Sep 25th, 2013
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.66 KB | None | 0 0
  1.  
  2.  
  3.     // 4/24/2013
  4.     // Tic Tac Toe
  5.     ////////////////////////////////////
  6.     #include <iostream>
  7.     #include <ctime>
  8.     #include <cstdlib>
  9.     using namespace std;
  10.  
  11.  
  12.  
  13.  
  14.     void exit(){ // Quit program
  15.     cout << "stop: Loaded successfully.";
  16.     }
  17.  
  18.     void info(){ // Print instructions for this silly command-line game
  19.     cout << "The rules of Tic Tac Toe should be burnt into your head already.\n";
  20.     cout << "Choose either X or O and be the first to get 3 in a row!\n";
  21.     cout << "In this command-line variant, the playing field is displayed like so: \n";
  22.     cout << "###\n";
  23.     cout << "###\n";
  24.     cout << "###\n";
  25.     cout << "The keys on your keyboard correspond to the nine locations on the grid.\n";
  26.     cout << "To input your command, enter one of the following when prompted:\n";
  27.     cout << "QWE\n";
  28.     cout << "ASD\n";
  29.     cout << "ZXC\n";
  30.     cout << "The rest should be self-explanatory. Have fun!";
  31.     }
  32.  
  33.     void game(){
  34.         // Values for game board display
  35.         enum PlayerLetter{BLANK, X, O};
  36.         char q = '#', w = '#', e = '#';    // TopLeft, TopCenter, TopRight
  37.         char a = '#', s = '#', d = '#';    // MiddleLeft, MiddleCenter, MiddleRight
  38.         char z = '#', x = '#', c = '#';    // BottomLeft, BottomCenter, BottomRight
  39.         // Other necessary variables
  40.         char p1Letter;              // Player 1's letter
  41.         char p2Letter;              // Player 2's letter
  42.         char currentSpace;          // Space player chose
  43.         int loopControl = 1;        // Putting loop stuff up top
  44.         int turnsPassed = 0;        // Turns passed during game
  45.         int currentPlayer = 1;      // redundant variable for display purposes
  46.         char playerDisplay = 'X';   // Label current player
  47.  
  48.  
  49.         while(loopControl==1){      // Choose player 1's input and set player 2's to the opposite
  50.             cout << "Player 1: Choose your letter (X/O)." << endl;
  51.             cin >> p1Letter;
  52.             switch(p1Letter){
  53.                 case 'x':
  54.                 case 'X':
  55.                     p2Letter = O;
  56.                     --loopControl;
  57.                     cout << "Player 1 is X. Player 2 is O." << endl;
  58.                     break;
  59.                 case 'o':
  60.                 case 'O':
  61.                     p2Letter = X;
  62.                     --loopControl;
  63.                     cout << "Player 1 is O. Player 2 is X." << endl;
  64.                     break;
  65.                 default:
  66.                     cout << "Invalid input." << endl;
  67.                 }
  68.         } // end input
  69.  
  70.  
  71.         cout << "Game start!" << endl;      // oh boy here comes the actual game
  72.             srand(time(0));                 // generate random number to determine who goes first
  73.             int random = (rand() % 2);
  74.             if (random == 0){
  75.             currentPlayer = false;          // simplify to a bool for logic purposes
  76.         }
  77.         else if (random == 1){
  78.             currentPlayer = true;
  79.         }
  80.  
  81.         while (turnsPassed < 9){
  82.             if (currentPlayer == false){         // unsimplify for display purposes
  83.                 playerDisplay = 'X';}
  84.             else {
  85.                     playerDisplay = 'O';
  86.             }
  87.             cout << playerDisplay << " moves first." << endl;
  88.             // MAIN DISPLAY CODE
  89.             cout << q << w << e << endl; // print board
  90.             cout << a << s << d << endl;
  91.             cout << z << x << c << endl;
  92.             cout << playerDisplay << ", pick a space to place your piece." << endl;
  93.             cin >> currentSpace;
  94.  
  95.             /*
  96.             Jesus, this code is a mess. Basically, it's 9 iterations of the same case statement; one for
  97.             each letter-coded space in the grid. First, it checks if the space is empty, and then checks
  98.             who's selecting the space. If the space is empty, it places the player's mark, passes the
  99.             currentPlayer value over to the other player, and increments the turnsPassed value used to
  100.             determine a tie when the game is over. The double-case statement is failproofing to accept
  101.             input from either the uppercase or lowercase name.
  102.             */
  103.             switch(currentSpace){
  104.                 case 'Q':
  105.                 case 'q':
  106.                     if ((q == '#') && (currentPlayer == 'X')){
  107.                         q = 'X';
  108.                         currentPlayer = 'Y';
  109.                         turnsPassed = turnsPassed++;}
  110.                     else if ((q == '#') && (currentPlayer == 'Y')){
  111.                         q = 'Y';
  112.                         currentPlayer = !currentPlayer;
  113.                         turnsPassed = turnsPassed++;}
  114.                     else {
  115.                         cout << "Space is occupied or invalid. Choose another." << endl;
  116.                         }
  117.                     break;
  118.                 case 'W':
  119.                 case 'w':
  120.                     if ((w == '#') && (currentPlayer == 'X')){
  121.                         w = 'X';
  122.                         currentPlayer = 'Y';
  123.                         turnsPassed = turnsPassed++;}
  124.                     else if ((w == '#') && (currentPlayer == 'Y')){
  125.                         w = 'Y';
  126.                         currentPlayer = 'Y';
  127.                         turnsPassed = turnsPassed++;}
  128.                     else {
  129.                         cout << "Space is occupied or invalid. Choose another." << endl;
  130.                         }
  131.                     break;
  132.                 case 'E':
  133.                 case 'e':
  134.                     if ((e == '#') && currentPlayer == 'X'){
  135.                         e = 'X';
  136.                         currentPlayer = 'Y';
  137.                         turnsPassed = turnsPassed++;}
  138.                     else if ((e == '#') && (currentPlayer == 'Y')){
  139.                         e = 'Y';
  140.                         currentPlayer = !currentPlayer;
  141.                         turnsPassed = turnsPassed++;}
  142.                     else {
  143.                         cout << "Space is occupied or invalid. Choose another." << endl;
  144.                         }
  145.                     break;
  146.                 case 'A':
  147.                 case 'a':
  148.                     if ((a == '#') && (currentPlayer == 'X')){
  149.                         a = 'X';
  150.                         currentPlayer = 'Y';
  151.                         turnsPassed = turnsPassed++;}
  152.                     else if ((a == '#') && (currentPlayer == 'Y')){
  153.                         a = 'Y';
  154.                         currentPlayer = !currentPlayer;
  155.                         turnsPassed = turnsPassed++;}
  156.                     else {
  157.                         cout << "Space is occupied or invalid. Choose another." << endl;
  158.                         }
  159.                     break;
  160.                 case 'S':
  161.                 case 's':
  162.                     if ((s == '#') && (currentPlayer == 'X')){
  163.                         s = 'X';
  164.                         currentPlayer = 'Y';
  165.                         turnsPassed = turnsPassed++;}
  166.                     else if ((s == '#') && (currentPlayer == 'Y')){
  167.                         s = 'Y';
  168.                         currentPlayer = 'X';
  169.                         turnsPassed = turnsPassed++;}
  170.                     else {
  171.                         cout << "Space is occupied or invalid. Choose another." << endl;
  172.                         }
  173.                     break;
  174.                 case 'D':
  175.                 case 'd':
  176.                     if ((d == '#') && (currentPlayer == 'X')){
  177.                         d = 'X';
  178.                         currentPlayer = 'Y';
  179.                         turnsPassed = turnsPassed++;}
  180.                     else if ((d == '#') && (currentPlayer == 'Y')){
  181.                         d = 'Y';
  182.                         currentPlayer = 'X';
  183.                         turnsPassed = turnsPassed++;}
  184.                     else {
  185.                         cout << "Space is occupied or invalid. Choose another." << endl;
  186.                         }
  187.                     break;
  188.                 case 'Z':
  189.                 case 'z':
  190.                     if ((z == '#') && (currentPlayer == 'X')){
  191.                         z = 'X';
  192.                         currentPlayer = 'Y';
  193.                         turnsPassed = turnsPassed++;}
  194.                     else if ((z == '#') && (currentPlayer == 'Y')){
  195.                         z = 'Y';
  196.                         currentPlayer = 'X';
  197.                         turnsPassed = turnsPassed++;}
  198.                     else {
  199.                         cout << "Space is occupied or invalid. Choose another." << endl;
  200.                         }
  201.                     break;
  202.                 case 'X':
  203.                 case 'x':
  204.                     if ((x == '#') && (currentPlayer == 'X')){
  205.                         x = 'X';
  206.                         currentPlayer = 'Y';
  207.                         turnsPassed = turnsPassed++;}
  208.                     else if ((x == '#') && (currentPlayer == 'Y')){
  209.                         x = 'Y';
  210.                         currentPlayer = 'X';
  211.                         turnsPassed = turnsPassed++;}
  212.                     else {
  213.                         cout << "Space is occupied or invalid. Choose another." << endl;
  214.                         }
  215.                     break;
  216.                 case 'C':
  217.                 case 'c':
  218.                     if ((c == '#') && (currentPlayer == 'X')){
  219.                         c = 'X';
  220.                         currentPlayer = 'Y';
  221.                         turnsPassed = turnsPassed++;}
  222.                     else if ((c == '#') && (currentPlayer == 'Y')){
  223.                         c = 'Y';
  224.                         currentPlayer = 'X';
  225.                         turnsPassed = turnsPassed++;}
  226.                     else {
  227.                         cout << "Space is occupied or invalid. Choose another." << endl;
  228.                         }
  229.                     break;
  230.                     }
  231.  
  232.                 }
  233.  
  234.         }
  235.  
  236.  
  237.     int main(){
  238.         enum GameOption{BLANK, PLAY, INFO, EXIT};
  239.         int menuOption = BLANK;
  240.         cout << "Hello, and welcome to Tic Tac Toe!" << endl;
  241.         cout << "To get started, please select an option:" << endl;
  242.         cout << "1 to begin playing" << endl;
  243.         cout << "2 for instructions on how to play" << endl;
  244.         cout << "3 to exit the game" << endl;
  245.         cin >> menuOption;
  246.             switch(menuOption){
  247.                 case PLAY:
  248.                     game();
  249.                     break;
  250.                 case INFO:
  251.                     info();
  252.                     break;
  253.                 case EXIT:
  254.                     exit();
  255.                     break;
  256.                 default:
  257.                     cout << "Unsupported input. Please try again." << endl;
  258.                     break;
  259.                 }
  260.  
  261.  
  262.     }
Advertisement
Add Comment
Please, Sign In to add comment