Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 4/24/2013
- // Tic Tac Toe
- ////////////////////////////////////
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- using namespace std;
- void exit(){ // Quit program
- cout << "stop: Loaded successfully.";
- }
- void info(){ // Print instructions for this silly command-line game
- cout << "The rules of Tic Tac Toe should be burnt into your head already.\n";
- cout << "Choose either X or O and be the first to get 3 in a row!\n";
- cout << "In this command-line variant, the playing field is displayed like so: \n";
- cout << "###\n";
- cout << "###\n";
- cout << "###\n";
- cout << "The keys on your keyboard correspond to the nine locations on the grid.\n";
- cout << "To input your command, enter one of the following when prompted:\n";
- cout << "QWE\n";
- cout << "ASD\n";
- cout << "ZXC\n";
- cout << "The rest should be self-explanatory. Have fun!";
- }
- void game(){
- // Values for game board display
- enum PlayerLetter{BLANK, X, O};
- char q = '#', w = '#', e = '#'; // TopLeft, TopCenter, TopRight
- char a = '#', s = '#', d = '#'; // MiddleLeft, MiddleCenter, MiddleRight
- char z = '#', x = '#', c = '#'; // BottomLeft, BottomCenter, BottomRight
- // Other necessary variables
- char p1Letter; // Player 1's letter
- char p2Letter; // Player 2's letter
- char currentSpace; // Space player chose
- int loopControl = 1; // Putting loop stuff up top
- int turnsPassed = 0; // Turns passed during game
- int currentPlayer = 1; // redundant variable for display purposes
- char playerDisplay = 'X'; // Label current player
- while(loopControl==1){ // Choose player 1's input and set player 2's to the opposite
- cout << "Player 1: Choose your letter (X/O)." << endl;
- cin >> p1Letter;
- switch(p1Letter){
- case 'x':
- case 'X':
- p2Letter = O;
- --loopControl;
- cout << "Player 1 is X. Player 2 is O." << endl;
- break;
- case 'o':
- case 'O':
- p2Letter = X;
- --loopControl;
- cout << "Player 1 is O. Player 2 is X." << endl;
- break;
- default:
- cout << "Invalid input." << endl;
- }
- } // end input
- cout << "Game start!" << endl; // oh boy here comes the actual game
- srand(time(0)); // generate random number to determine who goes first
- int random = (rand() % 2);
- if (random == 0){
- currentPlayer = false; // simplify to a bool for logic purposes
- }
- else if (random == 1){
- currentPlayer = true;
- }
- while (turnsPassed < 9){
- if (currentPlayer == false){ // unsimplify for display purposes
- playerDisplay = 'X';}
- else {
- playerDisplay = 'O';
- }
- cout << playerDisplay << " moves first." << endl;
- // MAIN DISPLAY CODE
- cout << q << w << e << endl; // print board
- cout << a << s << d << endl;
- cout << z << x << c << endl;
- cout << playerDisplay << ", pick a space to place your piece." << endl;
- cin >> currentSpace;
- /*
- Jesus, this code is a mess. Basically, it's 9 iterations of the same case statement; one for
- each letter-coded space in the grid. First, it checks if the space is empty, and then checks
- who's selecting the space. If the space is empty, it places the player's mark, passes the
- currentPlayer value over to the other player, and increments the turnsPassed value used to
- determine a tie when the game is over. The double-case statement is failproofing to accept
- input from either the uppercase or lowercase name.
- */
- switch(currentSpace){
- case 'Q':
- case 'q':
- if ((q == '#') && (currentPlayer == 'X')){
- q = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((q == '#') && (currentPlayer == 'Y')){
- q = 'Y';
- currentPlayer = !currentPlayer;
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'W':
- case 'w':
- if ((w == '#') && (currentPlayer == 'X')){
- w = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((w == '#') && (currentPlayer == 'Y')){
- w = 'Y';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'E':
- case 'e':
- if ((e == '#') && currentPlayer == 'X'){
- e = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((e == '#') && (currentPlayer == 'Y')){
- e = 'Y';
- currentPlayer = !currentPlayer;
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'A':
- case 'a':
- if ((a == '#') && (currentPlayer == 'X')){
- a = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((a == '#') && (currentPlayer == 'Y')){
- a = 'Y';
- currentPlayer = !currentPlayer;
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'S':
- case 's':
- if ((s == '#') && (currentPlayer == 'X')){
- s = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((s == '#') && (currentPlayer == 'Y')){
- s = 'Y';
- currentPlayer = 'X';
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'D':
- case 'd':
- if ((d == '#') && (currentPlayer == 'X')){
- d = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((d == '#') && (currentPlayer == 'Y')){
- d = 'Y';
- currentPlayer = 'X';
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'Z':
- case 'z':
- if ((z == '#') && (currentPlayer == 'X')){
- z = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((z == '#') && (currentPlayer == 'Y')){
- z = 'Y';
- currentPlayer = 'X';
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'X':
- case 'x':
- if ((x == '#') && (currentPlayer == 'X')){
- x = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((x == '#') && (currentPlayer == 'Y')){
- x = 'Y';
- currentPlayer = 'X';
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- case 'C':
- case 'c':
- if ((c == '#') && (currentPlayer == 'X')){
- c = 'X';
- currentPlayer = 'Y';
- turnsPassed = turnsPassed++;}
- else if ((c == '#') && (currentPlayer == 'Y')){
- c = 'Y';
- currentPlayer = 'X';
- turnsPassed = turnsPassed++;}
- else {
- cout << "Space is occupied or invalid. Choose another." << endl;
- }
- break;
- }
- }
- }
- int main(){
- enum GameOption{BLANK, PLAY, INFO, EXIT};
- int menuOption = BLANK;
- cout << "Hello, and welcome to Tic Tac Toe!" << endl;
- cout << "To get started, please select an option:" << endl;
- cout << "1 to begin playing" << endl;
- cout << "2 for instructions on how to play" << endl;
- cout << "3 to exit the game" << endl;
- cin >> menuOption;
- switch(menuOption){
- case PLAY:
- game();
- break;
- case INFO:
- info();
- break;
- case EXIT:
- exit();
- break;
- default:
- cout << "Unsupported input. Please try again." << endl;
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment