I coded a little text based Tick Tack Toe game today and I have a few bugs with it. The rules are fairly simple:
Player one must move first
Player one uses X
Player two uses O
The game is over when you get three in a row.
The only problem is on the first run though of the game it acts differentally. Instead of asking for player ones move it asks for player 49's, and player 49 starts with O, then it moves to player 2 with X, then back to player one O. But then if you decide to start a new game, it runs the way it should. Heres my code,
#include <iostream>
using namespace std;
int main()
{
char cSquare1('1');
char cSquare2('2');
char cSquare3('3');
char cSquare4('4');
char cSquare5('5');
char cSquare6('6');
char cSquare7('7');
char cSquare8('8');
char cSquare9('9');
int iPlayerTurn('1');
bool bGameOver('true');
do {
cout << cSquare1 << "|" << cSquare2 << "|" << cSquare3 << "\n";
cout << "-+-+-+\n";
cout << cSquare4 << "|" << cSquare5 << "|" << cSquare6 << "\n";
cout << "-+-+-+\n";
cout << cSquare7 << "|" << cSquare8 << "|" << cSquare9 << "\n";
char cPlayerMark;
if(iPlayerTurn == 1) {
cPlayerMark = 'X';
} else {
cPlayerMark = 'O';
}
cout << "Player " << iPlayerTurn << "'s move";
bool bValidMove;
do {
char cNextMove;
cin >> cNextMove;
bValidMove = true;
if (cNextMove == '1' && cSquare1 == '1') {
cSquare1 = cPlayerMark;
} else if (cNextMove == '2' && cSquare2 == '2') {
cSquare2 = cPlayerMark;
} else if (cNextMove == '3' && cSquare3 == '3') {
cSquare3 = cPlayerMark;
} else if (cNextMove == '4' && cSquare4 == '4') {
cSquare4 = cPlayerMark;
} else if (cNextMove == '5' && cSquare5 == '5') {
cSquare5 = cPlayerMark;
} else if (cNextMove == '6' && cSquare6 == '6') {
cSquare6 = cPlayerMark;
} else if (cNextMove == '7' && cSquare7 == '7') {
cSquare7 = cPlayerMark;
} else if (cNextMove == '8' && cSquare8 == '8') {
cSquare8 = cPlayerMark;
} else if (cNextMove == '9' && cSquare9 == '9') {
cSquare9 = cPlayerMark;
} else {
cout << "Invalid Move. Try again.";
bValidMove = false;
}
} while (!bValidMove);
bGameOver = false;
bool bWinGame = true;
// Check for end of game conditions
if (cSquare1 != '1') {
if (cSquare2 == cSquare1 && cSquare3 == cSquare1) {
bGameOver = true;
}
if (cSquare4 == cSquare1 && cSquare7 == cSquare1) {
bGameOver = true;
}
}
if (cSquare5 != '5') {
if (cSquare1 == cSquare5 && cSquare9 == cSquare5) {
bGameOver = true;
}
if (cSquare2 == cSquare5 && cSquare8 == cSquare5) {
bGameOver = true;
}
if (cSquare4 == cSquare5 && cSquare6 == cSquare5) {
bGameOver = true;
}
if (cSquare3 == cSquare5 && cSquare7 == cSquare5) {
bGameOver = true;
}
}
if (cSquare9 != '9') {
if (cSquare3 == cSquare9 && cSquare6 == cSquare9) {
bGameOver = true;
}
if (cSquare7 == cSquare9 && cSquare8 == cSquare9) {
bGameOver = true;
}
}
// Need to check the board full (no-win condition)
if (cSquare1 != '1' && cSquare2 != '2' && cSquare3 != '3' &&
cSquare4 != '4' && cSquare5 != '5' && cSquare6 != '6' &&
cSquare7 != '7' && cSquare8 != '8' && cSquare9 != '9' && !bGameOver)
{
bGameOver = true;
bWinGame = false;
}
if (bGameOver) {
if (bWinGame) {
std::cout << "Player" << iPlayerTurn << " wins!" << std::endl;
}
system("CLS");
std::cout << "Game Over!" << std::endl;
std::cout << "Play again (y/n)?" << std::endl;
char cPlayAgain;
std::cin >> cPlayAgain;
system("CLS");
if (cPlayAgain == 'y') {
bGameOver = false;
// Clear the board
cSquare1 = '1';
cSquare2 = '2';
cSquare3 = '3';
cSquare4 = '4';
cSquare5 = '5';
cSquare6 = '6';
cSquare7 = '7';
cSquare8 = '8';
cSquare9 = '9';
}
iPlayerTurn = 1;
} else {
// Alternate player turns
if (iPlayerTurn == 1) {
iPlayerTurn = 2;
} else {
iPlayerTurn = 1;
}
}
} while (!bGameOver);
}


Sign In
Create Account


Back to top









