• Create Account

## Tic Tac Toe need some help

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

4 replies to this topic

### #1Sarkurd  Members

163
Like
0Likes
Like

Posted 24 May 2014 - 04:13 AM

Hi
after some months learing basics of C++, today i started by creating a simple game
but i have a problem

checkwin() doesn't work properly

sorry for my english

#include <iostream>

using namespace std;

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

void GameBoard();
int checkwin();

int main(){

GameBoard();
int choice, i;
int player = 1;
char mark;
do{
if (player == 1)
mark = 'X';
else
mark = 'O';
cout << "Player " << player << " Enter a number: ";
cin >> choice;
if (choice == 1 && square[1] == '1')
square[1] = mark;
else if (choice == 2 && square[2] == '2')
square[2] = mark;
else if (choice == 3 && square[3] == '3')
square[3] = mark;
else if (choice == 4 && square[4] == '4')
square[4] = mark;
else if (choice == 5 && square[5] == '5')
square[5] = mark;
else if (choice == 6 && square[6] == '6')
square[6] = mark;
else if (choice == 7 && square[7] == '7')
square[7] = mark;
else if (choice == 8 && square[8] == '8')
square[8] = mark;
else if (choice == 9 && square[9] == '9')
square[9] = mark;
else
{
cout << "This Block already taken!" << endl;
player--;
}
if (player == 1)
player++;
else
player--;
system("cls");
GameBoard();
i = checkwin();
} while (i=-1);

if (i == 1){
cout << "Player " << player << "is win!" << endl;
}
else{
cout << "Draw!" << endl;
}
cin.ignore();
cin.get();
return 0;
}

int checkwin()
{
if (square[1] == square[2] && square[2] == square[3])

return 1;
else if (square[4] == square[5] && square[5] == square[6])

return 1;
else if (square[7] == square[8] && square[8] == square[9])

return 1;
else if (square[1] == square[4] && square[4] == square[7])

return 1;
else if (square[2] == square[5] && square[5] == square[8])

return 1;
else if (square[3] == square[6] && square[6] == square[9])

return 1;
else if (square[1] == square[5] && square[5] == square[9])

return 1;
else if (square[3] == square[5] && square[5] == square[7])

return 1;
else 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')

return 0;
else
return -1;
}

void GameBoard(){
cout << "         Tic Tac Toe         " << endl << endl;
cout << "Player 1: X , Player 2: O" << 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;

}

### #2foxcode  Members

299
Like
3Likes
Like

Posted 24 May 2014 - 04:32 AM

Hello, while I am not sure I fully understand the way you have done this, I have spotted something that looks suspect.

GameBoard();
i = checkwin();
} while (i=-1);

the condition in the do while loop, you are assigning i to -1, not checking for equality, are you sure this is not what you want
}while (i==-1);

EDIT:

I just compiled this, I was correct, change your while condition to what I have and it will work, though now you have another bug, the incorrect player is credited with the win, happy debugging and don't worry, everyone on this site has made the double equals error, probably more than once, you are doing great!

Edited by foxcode, 24 May 2014 - 04:36 AM.

### #3Sarkurd  Members

163
Like
0Likes
Like

Posted 24 May 2014 - 05:34 AM

Hello, while I am not sure I fully understand the way you have done this, I have spotted something that looks suspect.

GameBoard();
i = checkwin();
} while (i=-1);

the condition in the do while loop, you are assigning i to -1, not checking for equality, are you sure this is not what you want
}while (i==-1);

EDIT:

I just compiled this, I was correct, change your while condition to what I have and it will work, though now you have another bug, the incorrect player is credited with the win, happy debugging and don't worry, everyone on this site has made the double equals error, probably more than once, you are doing great!

OMG i can't believe i made this mistake i was trying to solve this problem the whole night >_< but i couldn't figure out what the problem is

Thank you

### #4rip-off  Moderators

10730
Like
3Likes
Like

Posted 24 May 2014 - 10:14 AM

Try increasing the warning level on your toolchain. Compiling the code you posted on Visual Studio 2012 with Warnings set to Level4, you would get the following error:

warning C4706: assignment within conditional expression

C++ is designed under the thinking "the programmer is always right" - which is why some things that are clearly "wrong" are accepted with just a shy little warning. While there are a few warnings that can ultimately be spurious, as a beginner every warning should be treated as a likely bug.

Also, strongly consider turning on the option to treat warnings as errors, which will force you to deal with warnings before running the code.

### #5foxcode  Members

299
Like
2Likes
Like

Posted 24 May 2014 - 03:17 PM

One other thing you can do, though disliked by many coders is yoda conditions.

This is where instead of i==-1 you write -1==i

If you forget an equals, the compiler will show an error because you cannot assign a value to a constant

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.