Created
September 2, 2013 05:57
-
-
Save dariye/6409606 to your computer and use it in GitHub Desktop.
tic-tac-toe...woeful implementation in C++
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <iomanip> | |
using namespace std; | |
using std::cout; | |
using std::cin; | |
using std::endl; | |
const int BOARD_SIZE = 9; //3x3 tic-tac-toe board | |
//function prototypes | |
int CheckBoard( int (*) ); //function checks board for win or stalemate | |
void resetBoard( int (*) ); // function resets board after play | |
int main(int argc, const char * argv[]) { | |
int choice; | |
cout << "\tGame: Tic-Tac-Toe: \n" | |
<< "\t-------------------\n"; | |
int Board[BOARD_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; | |
cout << "Enter steps 0 through 8 to place 'X's and 'O's " << endl; | |
for( int i = 0; i < 9; i++) { | |
cout << "|" << setw(4) << Board[i] << setw(4); | |
cout << ( ( ( i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
cout << "\t" << "Play: \n" | |
<< "\t" << "-------\n" | |
<< "\t" << "Player 1 -> 'X' <--> Player 2 -> 'O': \n" | |
<< "\t" << "----------------------------------\n" << endl; | |
PlayerSelect: | |
cout << "\t" << "who will begin? (1/2): \n" << endl; | |
cin >> choice; | |
switch(choice) { | |
case 1: { cout << "Player " << choice << " begin" << endl; } | |
break; | |
case 2: { cout << "Player " << choice << " begin" << endl; } | |
break; | |
default: cout << "No valid player number entered..." << endl; | |
goto PlayerSelect; | |
} | |
//Play | |
int playCount = 1; //play count keeper | |
int mark; //player move {0 through 8} | |
char replay; //player answer to play again | |
if(choice == 1) { | |
goto Play1; | |
} | |
else if( choice == 2) { | |
goto Play2; | |
} | |
else { | |
cout << "No valid player number entered..." << endl; | |
goto PlayerSelect; | |
} | |
do { | |
//first player label | |
Play1: | |
cin >> mark; | |
if( Board[mark] == 1 || Board[mark] == 2) { | |
cout << "Not empty!\n Enter Another Space \n" << endl; | |
goto Play1; | |
} | |
else { | |
Board[mark] = 1; | |
} | |
//diplay board | |
for( int i = 0; i < BOARD_SIZE; i++) { | |
cout << "|" << setw(4); | |
if(Board[i] == 1){ | |
cout << "X" << setw(4); | |
cout << ( ( ( i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
else if( Board[i] == 2) { | |
cout << "O" << setw(4); | |
cout << ( ( ( i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
else { | |
cout << Board[i] << setw(4); | |
cout << ( ( ( i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
} | |
//second player label | |
Play2: | |
cin >> mark; | |
if(Board[mark] == 1 || Board[mark] == 2) { | |
cout << "Not empty!\n Enter Another Space \n" << endl; | |
goto Play2; | |
} | |
else { | |
Board[mark] = 2; | |
} | |
//display board | |
for( int i = 0; i < BOARD_SIZE; i++) { | |
cout << "|" << setw(4); | |
if(Board[i] == 1){ | |
cout << "X" << setw(4); | |
cout << ( ( ( i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
else if( Board[i] == 2) { | |
cout << "O" << setw(4); | |
cout << ( ( ( i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
else { | |
cout << Board[i] << setw(4); | |
cout << ( ( (i + 1 )%3 == 0) ? "|" : "" ) << ( ( ( i + 1 )%3 == 0) ? "\n\n" : "" ); | |
} | |
} | |
//check for win or stalemate | |
if( playCount == 4 ) { | |
if( CheckBoard( Board ) == 1 ) { | |
cout << "Player 1 -> 'X' is the winner "; | |
goto playAgain; | |
} | |
else if( CheckBoard( Board ) == 2 ) { | |
cout << "Player 2 -> 'O' is the winner "; | |
goto playAgain; | |
} | |
else { | |
cout << "Stalemate!!!"; | |
goto playAgain; | |
} | |
} | |
//play counter | |
playCount++; | |
} while( playCount <= 4 ); | |
//Replay Label | |
playAgain: | |
cout << "Play Again? (y/n)"; | |
cin >> replay; | |
//reset array | |
switch( replay ) { | |
case 'y' | 'Y': resetBoard(Board); goto PlayerSelect; | |
break; | |
case 'n' | 'N': cout << "Thank you for Playing! Bye"; exit(0); | |
break; | |
} | |
} | |
//function checks board for win or stalemate | |
int CheckBoard( int (*Board) ) { | |
int winner = 0; | |
for( int i = 0; i < BOARD_SIZE; i++) { | |
if( ( Board[0] == Board[1] == Board[2] == 1 ) || ( Board[0] == Board[3] == Board[6] == 1 ) || (Board[0] == Board[4] == Board[8] == 1) || (Board[1] == Board[4] == Board[7] == 1) || (Board[2] == Board[5] == Board[8] == 1) || (Board[2] == Board[4] == Board[6] == 1) || (Board[3] == Board[4] == Board[5] == 1) || (Board[6] == Board[7] == Board[8] == 1) ){ | |
winner = 1; | |
} | |
if( (Board[0] == Board[1] == Board[2] == 2) || (Board[0] == Board[3] == Board[6] == 2) || (Board[0] == Board[4] == Board[8] == 2) || (Board[1] == Board[4] == Board[7] == 2) || (Board[2] == Board[5] == Board[8] == 2) || (Board[2] == Board[4] == Board[6] == 2) || (Board[3] == Board[4] == Board[5] == 2) || (Board[6] == Board[7] == Board[8] == 2) ) { | |
winner = 2; | |
} | |
} | |
return winner; | |
} | |
// function resets board after play | |
void resetBoard( int (*Board) ) { | |
for(int i = 0; i < BOARD_SIZE; i++) { | |
Board[i] = 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment