Urgent!! TicTacToe

Hi, i'm in urgent help on how to fix my code below. When I run the program, and type a number for where I want to place my naught or cross, it doesn't print out, and instead says 'Invalid turn'.

#include <iostream>
using namespace std;

char Square[10] = { 'O','1','2','3','4','5','6','7','8','9' };

int main()
{
int playerT = 1, i, move;
bool GameOver;
char identity;

cout << "...TIC TAC TOE!..." << endl;
cout << "Player 1 = X || Player 2 = 0" << endl;
cout << endl;

cout << " | | " << endl;
cout << " " << Square[1] << " " << Square[2] << " " << Square[3] << endl;
cout << "_____|_____|_____" << endl;
cout << " | | " << endl;
cout << " " << Square[4] << " " << Square[5] << " " << Square[6] << endl;
cout << "_____|_____|_____" << endl;
cout << " | | " << endl;
cout << " " << Square[7] << " " << Square[8] << " " << Square[9] << endl;
cout << " | | " << endl;

identity = (playerT == 1) ? 'X' : '0';

bool Vturn;
do {
playerT = (playerT % 2) ? 1 : 2;
cout << "It is Player " << playerT << "'s move! " << endl;
cout << "Enter a number between 1-9:" << endl;
cin >> move;
Vturn = true;

if (move == '1' && Square[1] == '1') {
Square[1] = identity;
}
else if (move == '2' && Square[2] == '2') {
Square[2] = identity;
}
else if (move == '3' && Square[3] == '3') {
Square[3] = identity;
}
else if (move == '4' && Square[4] == '4') {
Square[4] = identity;
}
else if (move == '5' && Square[5] == '5') {
Square[5] = identity;
}
else if (move == '6' && Square[6] == '6') {
Square[6] = identity;
}
else if (move == '7' && Square[7] == '7') {
Square[7] = identity;
}
else if (move == '8' && Square[8] == '8') {
Square[8] = identity;
}
else if (move == '9' && Square[9] == '9') {
Square[9] = identity;
}
else {
cout << "Invalid turn" << endl;
Vturn = false;

}

} while (!Vturn);

GameOver = false;

bool Win = true;

if (Square[1] != '1') {
if (Square[2] == Square[1] && Square[3] == Square[1]) {
GameOver = true;
}
if (Square[4] == Square[1] && Square[7] == Square[1]) {
GameOver = true;

}
if (Square[5] == Square[1] && Square[9] == Square[1]) {
GameOver = true;
}
}

if (Square[1] != '3') {
if (Square[6] == Square[3] && Square[9] == Square[3]) {
GameOver = true;

}
if (Square[5] == Square[3] && Square[7] == Square[3]) {
GameOver = true;

}
}
if (Square[1] != '5') {
if (Square[2] == Square[5] && Square[8] == Square[5]) {
GameOver = true;

}
if (Square[5] == Square[4] && Square[6] == Square[5]) {
GameOver = true;

}
if (Square[1] != '8') {
if (Square[7] == Square[8] && Square[9] == Square[8]) {
GameOver = true;
}

}
if (Square[1] != '1' && Square[2] != '2' && Square[3] != '3' &&
Square[4] != '4' && Square[5] != '5' && Square[6] != '6' &&
Square[7] != '7' && Square[8] != '8' && Square[9] != '9' && !GameOver) {
GameOver = true;
Win = false;

if (GameOver) {
if (Win) {
cout << "Player" << playerT << "wins!";
}
else
cout << "Game tied!";

} while (!GameOver);
system("pause");
return 0;
}
}
}
You read-in as an 'int', but test this against an ASCII-code character number.

You have defined:
int move;
But you check this 'int' variable against a 'char'.
'1' is ASCII-code number 41.
1
2
3
4
        ...
        if ( move == '1' && Square[1] == '1' ) {
            Square[1] = identity;
       ...

You could either test against int, simply by omitting the ''s:
1
2
        if ( move == 1 && Square[1] == '1' )
        ...

... or, you define your 'move'-variable as 'char':
char move;

*edit: '1' is ASCII-number 49
Last edited on
Topic archived. No new replies allowed.