Dec 8, 2016 at 5:24pm UTC
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;
}
}
}
Dec 8, 2016 at 6:55pm UTC
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 Dec 8, 2016 at 7:05pm UTC