Jump to content

  • Log In with Google      Sign In   
  • 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.

  • You cannot reply to this topic
4 replies to this topic

#1 Sarkurd   Members   -  Reputation: 157

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;

}



Sponsor:

#2 foxcode   Members   -  Reputation: 237

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.


#3 Sarkurd   Members   -  Reputation: 157

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



#4 rip-off   Moderators   -  Reputation: 8109

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.

#5 foxcode   Members   -  Reputation: 237

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.



PARTNERS