Tic Tac Toe need some help

Started by
3 comments, last by foxcode 9 years, 11 months ago

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;

}

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!

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

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.

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

This topic is closed to new replies.

Advertisement