Welcome to Dream.In.Code
Become a C++ Expert!

Join 149,926 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,888 people online right now. Registration is fast and FREE... Join Now!




Tic-tac-toe

 
Reply to this topicStart new topic

Tic-tac-toe, Need help with a boolean

unknownman
5 Dec, 2007 - 01:10 AM
Post #1

New D.I.C Head
*

Joined: 7 Nov, 2007
Posts: 4


My Contributions
I need a little help with my computer science project. i have written this code for a tic-tac-toe program
Here is the code
CODE
//This program descides where the computer moves by sellecting a random number.  
# include <iostream>
# include <ctime>
# include <cstdlib>

using namespace std;
char gameArray[3][3];
char player;
char computer;
int move;
int winner;
bool spaceFree = true;
bool spaceFreePlayer = true;
void printBoard(void);
void initializeBoard(void);
void setMove(int move, char playerType);
void playerMove(void);
void computerMove (void);
int winCheck(void);
int getRandomMove(void);
bool checkSpaceFree(int spaceNumber);
int turnCount = 1;

int main()
{
    int turnOrder;
    
    initializeBoard();
    cout << "Enter X or O: ";
    cin >> player;

    if (player == 'x' || player == 'X')
    {
        player = 'X';
        computer ='O';
    }
    else if (player == 'o' || player == 'O')
    {
        player = 'O';
        computer = 'X';
    }
    else
    {
        cout << "You are not good enough for the charactor" << endl
             << "that you selected you are stuck with O" << endl;
        player = 'O';
        computer = 'X';
    }

    cout << "\nWould you like to go first(1) or second(2)? ";
    cin >> turnOrder;
    while (turnOrder !=1 && turnOrder !=2)
    {
        cout << "\n\nInvalid choice!";
        cout << "\nWould you like to go first(1) or second(2)? ";
        cin >> turnOrder;
    }
    cout << "Player: " << player << "\tTurn: " << turnOrder << "\nComputer: " << computer << "\tTurn: " << (3 - turnOrder);
    printBoard();

    if (turnOrder == 1)
    {
        while (turnCount < 10)
        {
            if ((turnCount % 2) == 0)
            {
                computerMove();
                winCheck();
            }
            else
            {
                playerMove();
                winCheck();
            }
        }
    }
    else if(turnOrder == 2)
    {
        while (turnCount < 10)
        {
            if ((turnCount % 2) == 0)
            {
                playerMove();
                winCheck();
            }
            else
            {
                computerMove();
                winCheck();
            }
        }
    }
    
    if (winner == 1)
    {
        cout << "Player Wins" << endl;
    }
    else if (winner == 2)
    {
        cout << "Computer Wins" << endl;
    }
    else if (winner == 0)
    {
        cout << "It's a tie!!!" << endl;
    }
    else
    {
        cout << "Error in winner calculation!" << endl;
    }
    
    return 0;
}
void printBoard()
{
    cout << "\n\n\t" << gameArray[0][0] << "|" << gameArray[0][1] << "|" << gameArray[0][2] << endl;
    cout << "\t-+-+-" << endl;
    cout << "\t" << gameArray[1][0] << "|" << gameArray[1][1] << "|" << gameArray[1][2] << endl;
    cout << "\t-+-+-" << endl;
    cout << "\t" << gameArray[2][0] << "|" << gameArray[2][1] << "|" << gameArray[2][2] << endl << "\n";
}
void initializeBoard()
{
    gameArray[0][0] = '1';
    gameArray[0][1] = '2';
    gameArray[0][2] = '3';
    gameArray[1][0] = '4';
    gameArray[1][1] = '5';
    gameArray[1][2] = '6';
    gameArray[2][0] = '7';
    gameArray[2][1] = '8';
    gameArray[2][2] = '9';
}
void playerMove()
{
    turnCount++;
    cout << "Enter the number of the space that you want to move: ";
    cin >> move;
    spaceFreePlayer = checkSpaceFree(move);
    while (move != 1 && move != 2 && move != 3 && move != 4 && move != 5 && move != 6 && move != 7 && move != 8 && move != 9 && spaceFreePlayer == false)
    {
        cout << "\nInvalid Choice!! Please try again: ";
        cin >> move;
        
    }
    setMove (move, player);
    winner = winCheck();
    
}
void setMove (int move, char playerType)
{
    switch (move)
    {
        case 1:
            gameArray[0][0] = playerType;
            break;
        case 2:
            gameArray[0][1] = playerType;
            break;
        case 3:
            gameArray[0][2] = playerType;
            break;
        case 4:
            gameArray[1][0] = playerType;
            break;
        case 5:
            gameArray[1][1] = playerType;
            break;
        case 6:
            gameArray[1][2] = playerType;
            break;
        case 7:
            gameArray[2][0] = playerType;
            break;
        case 8:
            gameArray[2][1] = playerType;
            break;
        case 9:
            gameArray[2][2] = playerType;
            break;
        default:
            cout << "Invalid move option in setMove()!";
}
}
int winCheck ()
{
    if(gameArray [0][0] == player && gameArray[0][1] == player && gameArray[0][2] == player)
    {
        turnCount = 10;
        return 1;
    }
    else if (gameArray [1][0] == player && gameArray[1][1] == player && gameArray[1][2] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [2][0] == player && gameArray[2][1] == player && gameArray[2][2] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [0][0] == player && gameArray[1][0] == player && gameArray[2][0] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [0][1] == player && gameArray[1][1] == player && gameArray[2][1] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [0][2] == player && gameArray[1][2] == player && gameArray[2][2] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [0][0] == player && gameArray[1][1] == player && gameArray[2][2] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [2][0] == player && gameArray[1][1] == player && gameArray[0][2] == player)
    {    
        turnCount = 10;
        return 1;
    }
    else if (gameArray [0][0] == computer && gameArray[0][1] == computer && gameArray[0][2] == computer)
    {    
        turnCount = 10;
        return 2;
    }
    else if (gameArray [1][0] == computer && gameArray[1][1] == computer && gameArray[1][2] == computer)
    {    
        turnCount = 10;
        return 2;
    }
    else if (gameArray [2][0] == computer && gameArray[2][1] == computer && gameArray[2][2] == computer)
    {
        turnCount = 10;
        return 2;
    }
    else if (gameArray [0][0] == computer && gameArray[1][0] == computer && gameArray[2][0] == computer)
    {
        turnCount = 10;
        return 2;
    }
    else if (gameArray [0][1] == computer && gameArray[1][1] == computer && gameArray[2][1] == computer)
    {
        turnCount = 10;
        return 2;
    }
    else if (gameArray [0][2] == computer && gameArray[1][2] == computer && gameArray[2][2] == computer)
    {    
        turnCount = 10;
        return 2;
    }
    else if (gameArray [0][0] == computer && gameArray[1][1] == computer && gameArray[2][2] == computer)
    {
        turnCount = 10;
        return 2;
    }
    else if (gameArray [2][0] == computer && gameArray[1][1] == computer && gameArray[0][2] == computer)
    {
        turnCount = 10;
        return 2;
    }
    else
        return 0;
}

void computerMove()
{
   int randomMove = 1;

   turnCount++;

   while (spaceFree == false)
   {
        randomMove = getRandomMove();
    

        spaceFree = checkSpaceFree(randomMove);
   }

   setMove(randomMove, computer);
   cout << "\nComputer's move:";
   printBoard();
}

int getRandomMove()
{
srand((unsigned)time(0));
int random;

random = (rand()%9)+1;

while (1)
{
if (random < 1)
{
    random = (rand()%9)+1;
}
else if (random > 9)
{
    random = (rand()%9)+1;
}
else
{
    break;
}
}

return random;
}


bool checkSpaceFree (int spaceNumber)
{
   switch(spaceNumber)
   {
    case 1:
        if (gameArray[0][0] == '1')
        return true;
        else
        return false;
    case 2:
        if (gameArray[0][1] == '2')
        return true;
        else
        return false;
    case 3:
        if (gameArray[0][2] == '3')
        return true;
        else
        return false;
    case 4:
        if (gameArray[1][0] == '4')
        return true;
        else
        return false;
    case 5:
        if (gameArray[1][1] == '5')
        return true;
        else
        return false;
    case 6:
        if (gameArray[1][2] == '6')
        return true;
        else
        return false;
    case 7:
        if (gameArray[2][0] == '7')
        return true;
        else
        return false;
    case 8:
        if (gameArray[2][1] == '8')
        return true;
        else
        return false;
    case 9:
        if (gameArray[2][2] == '9')
        return true;
        else
        return false;
    default:
        return false;
    }
}

What is happining is for some reason, the boolean statment is not working to determine if the space is open. Any help is great
thanks in advance.
User is offlineProfile CardPM
+Quote Post

baavgai
RE: Tic-tac-toe
5 Dec, 2007 - 06:20 AM
Post #2

Dreaming Coder
Group Icon

Joined: 16 Oct, 2007
Posts: 2,280



Thanked: 136 times
Dream Kudos: 475
Expert In: C, C++, Java, C#, ASP.NET, PHP, Perl, Python, Oracle, SQL Server, MySql, HTML, JavaScript, Lua, Cheese

My Contributions
Looks like you're not checking the return value of winCheck. You seem to expect it to load a value into winner, but it isn't.

Given your enormous use of globals, you probably want to do something like this:
CODE

bool checkSideWin(char side) {
    return
        (  (gameArray[0][0]==gameArray[0][1]==gameArray[0][2]==side)
        || (gameArray[1][0]==gameArray[1][1]==gameArray[1][2]==side)
        || (gameArray[2][0]==gameArray[2][1]==gameArray[2][2]==side)
        || (gameArray[0][0]==gameArray[1][0]==gameArray[2][0]==side)
        || (gameArray[0][1]==gameArray[1][1]==gameArray[2][1]==side)
        || (gameArray[0][2]==gameArray[1][2]==gameArray[2][2]==side)
        || (gameArray[0][0]==gameArray[1][1]==gameArray[2][2]==side)
        || (gameArray[2][0]==gameArray[1][1]==gameArray[0][2]==side)
    );
}

void winCheck () {
    if (checkSideWin(player)) {
        turnCount = 10;
        winner=1;
    } else if (checkSideWin(computer)) {
        turnCount = 10;
        winner=2;
    } else {
        winner=0;
    }
}


Hope this helps.

User is offlineProfile CardPM
+Quote Post

Reply to this topicStart new topic
Time is now: 1/8/09 03:01PM

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter

Live C++ Help!

C++ Tutorials

Reference Sheets

C++ Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month