#include <iostream>
using namespace std;
void winCondition(string board[3][3], int &xWin, int &oWin) {
for (int a = 0; a <= 2; a++) {
if (board[a][0] == board[a][1] && board[a][1] == board[a][2]) {
if (board[a][0] == "X") {
cout << "\nX Player Won Horizontally\n";
xWin++;
break;
} else if (board[a][0] == "O") {
cout << "\nO Player Won Horizontally\n";
oWin++;
break;
}
}
if (board[0][a] == board[1][a] && board[1][a] == board[2][a]) {
if (board[0][a] == "X") {
cout << "\nX Player Won Vertically\n";
xWin++;
break;
} else if (board[0][a] == "O") {
cout << "\nO Player Won Vertically\n";
oWin++;
break;
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]) {
if (board[1][1] == "X") {
cout << "\nX Player Won Diagonally\n";
xWin++;
break;
} else if (board[1][1] == "O") {
cout << "\nO Player Won Diagonally\n";
oWin++;
break;
}
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]) {
if (board[1][1] == "X") {
cout << "\nX Player Won Diagonally\n";
xWin++;
break;
} else if (board[1][1] == "O") {
cout << "\nO Player Won Diagonally\n";
oWin++;
break;
}
}
}
}
void playerTurn(string board[3][3], string player) {
int row, column;
while (true) {
cout << "\n" << player << " Player\nInput Column(1-3) : ";
cin >> column;
cout << "Input Row(1-3) : ";
cin >> row;
if (column >= 1 && column <= 3 && row >= 1 && row <= 3 &&
board[column - 1][row - 1] == "") {
board[column - 1][row - 1] = player;
return;
} else {
cout << "Invalid input or spot already filled. Try again.\n";
}
}
}
void drawBoard(string board[3][3]) {
for (int a = 0; a <= 2; a++) {
for (int b = 0; b <= 2; b++) {
cout << "| " << board[a][b] << " |";
}
cout << "\n";
}
}
int main() {
string board[3][3] = {{"", "", ""}, {"", "", ""}, {"", "", ""}};
int menu;
bool xTurn = true;
int xWin = 0;
int oWin = 0;
do {
cout << "Play Tic Tac Toe ? \n1. Play\n2. Quit\n";
cin >> menu;
switch (menu) {
case 1:
do {
drawBoard(board);
if (xTurn) {
playerTurn(board, "X");
} else {
playerTurn(board, "O");
}
winCondition(board, xWin, oWin);
xTurn = !xTurn;
} while (xWin < 1 && oWin < 1);
break;
case 2:
return 0;
break;
default:
cout << "\nInvalid Choice\n";
break;
}
} while (menu != 2);
}