Skip to content

Instantly share code, notes, and snippets.

@dariye
Created September 2, 2013 05:57
Show Gist options
  • Save dariye/6409606 to your computer and use it in GitHub Desktop.
Save dariye/6409606 to your computer and use it in GitHub Desktop.
tic-tac-toe...woeful implementation in C++
#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