C++ Tic Tac Toe
//Araf Shihab
//Knaughts and Crosses Lab.
#include <iostream>
#include <vector>
#include <cstdlib>
#include <string>
#include <sstream>
using namespace std;
string table[9] = {"1","2","3","4","5","6","7","8","9"};
string player = "X"; //First Player
int fullTable = 0;
int playagainStateMachine = 0;
void showBoard();
void playerInput();
string checkWinner();
string tableNotFull();
void changePlayer();
void checkState();
void clearTable();
int main(){
showBoard();
while (1)
{
fullTable++;
playerInput();
showBoard();
if (checkWinner() == "X")
{
cout << "\nPlayer 1: X wins!" << endl;
playagainStateMachine = 1;
checkState();
}
else if (checkWinner() == "O")
{
cout << "\nPlayer 2: O wins!" << endl;
playagainStateMachine = 1;
checkState();
}
else if (checkWinner() == "DRAW" && fullTable == 9)
{
cout << "\nIt's a draw! No winner!" << endl;
playagainStateMachine = 1;
checkState();
}
changePlayer();
}
system("pause");
return 0;
}
void checkState(){
char a;
if (playagainStateMachine != 0) {
cout << "\nWould you like to play again 'Y' for yes 'N' for no" << endl;
cin >> a;
a = toupper(a);
if (a == 'N'){
cout << "\nExiting tic tac toe" << endl;
exit(EXIT_FAILURE);
}else if(a == 'Y'){
clearTable();
showBoard();
}else{
cout << "\nEntered incorrect data, game exiting" << endl; exit(EXIT_FAILURE);
}
}
if (playagainStateMachine == 1){
cout << "\nWho will go first 'X' or 'O'?: " << endl;
cin >> a;
a = toupper(a);
if (a == 'X'){ player = "X"; }
if (a == 'Y') { player = "O"; }
}
}
void clearTable(){
for(int i = 0; i < 9; i++){
if(i == 8){table[i] = "9";}
if(i == 7){table[i] = "8";}
if(i == 6){table[i] = "7";}
if(i == 5){table[i] = "6";}
if(i == 4){table[i] = "5";}
if(i == 3){table[i] = "4";}
if(i == 2){table[i] = "3";}
if(i == 1){table[i] = "2";}
if(i == 0){table[i] = "1";}
}
}
void showBoard(){
system("cls");
cout << "Tic Tac Toe Board" << endl;
for(int i = 0; i < 9; i++){
if(i == 3 || i == 6){
cout << endl;
}
cout << " " << table[i] << " ";
}
}
void playerInput(){
int a;
cout << endl << "It's " << player << " turn. " <<"Press the number of the field: " << endl;
cin >> a;
switch(a){
case 1:
if (table[0] == "1"){
table[0] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 2:
if (table[1] == "2"){
table[1] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 3:
if (table[2] == "3"){
table[2] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 4:
if (table[3] == "4"){
table[3] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 5:
if (table[4] == "5"){
table[4] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 6:
if (table[5] == "6"){
table[5] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 7:
if (table[6] == "7"){
table[6] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 8:
if (table[7] == "8"){
table[7] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
case 9:
if (table[8] == "9"){
table[8] = player;
}
else
{
cout << "I'm sorry field is in use please try another position" << endl;
playerInput();
}
break;
}
}
void changePlayer()
{
if (player == "X")
player = "O";
else
player = "X";
}
string checkWinner()
{
//first player
if (table[0] == "X" && table[1] == "X" && table[2] == "X")
return "X";
if (table[0] == "X" && table[3] == "X" && table[6] == "X")
return "X";
if (table[1] == "X" && table[4] == "X" && table[7] == "X")
return "X";
if (table[3] == "X" && table[6] == "X" && table[9] == "X")
return "X";
if (table[4] == "X" && table[5] == "X" && table[6] == "X")
return "X";
if (table[6] == "X" && table[7] == "X" && table[8] == "X")
return "X";
if (table[3] == "X" && table[5] == "X" && table[7] == "X")
return "X";
if (table[0] == "X" && table[4] == "X" && table[8] == "X")
return "X";
//second player
if (table[0] == "O" && table[1] == "O" && table[2] == "O")
return "O";
if (table[0] == "O" && table[3] == "O" && table[6] == "O")
return "O";
if (table[1] == "O" && table[4] == "O" && table[7] == "O")
return "O";
if (table[2] == "O" && table[5] == "O" && table[8] == "O")
return "O";
if (table[4] == "O" && table[5] == "O" && table[6] == "O")
return "O";
if (table[7] == "O" && table[8] == "O" && table[9] == "O")
return "O";
if (table[3] == "O" && table[5] == "O" && table[7] == "O")
return "O";
if (table[0] == "O" && table[4] == "O" && table[8] == "O")
return "O";
return "DRAW";
}