Jump to content
  • Advertisement
Sign in to follow this  
Sarkurd

Tic Tac Toe need some help

This topic is 1660 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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;

}

Share this post


Link to post
Share on other sites
Advertisement

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!