开发者

Tic Tac Toe Program help

I am not sure how to proceed from what I have already: I am having trouble getting my array to work and I am also having trouble with my chart reseting everytime i re-run the program. It does not save my X's and O's but restarts into the blank chart. Any hint will be helpful. Thanks

/**
Lab 4 - Due 7/22/2010.

Convert Lab 3 to a class

1. Implement displayBoard to display Tic Tac Toe board.
2. Prompt User for a box on the board to select, i.e. a number between 1 and 9 with 1 being the upper left corner.

use cin.get(box) to get the box number and isdigit to verify it is a
number;
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
If the box is available put the appropriate X or O in there and switch players, i.e. X becomes O and vice versa.
If the box is NOT available warn the user and get another box until they select a valid open box.

3. After all spots have been select Display "Game Over!";
4. Write a main function to use the TicTacToe class and test all of the above functionality.

**/


#include <iostream>

#include <limits>

using namespace std;


class TicTacToe {
public:
    void displayBoard();
    void getMove();
    void playGame();
private:
    char board[9];
    char player; // Switch after each move.
};

int main ()
{
    TicTacToe ttt;

    for (int i = 0; i < 9; i++) {
        ttt.playGame();
    }
}

void TicTacToe::playGame()
{
    displayBoard();


    getMove();    

    // Your implementation here...
}

void TicTacToe::displayBoard()
{
    // Your implementation here...

    bool firstMove = true;
    if (firstMove  == true)
    {

        for (int i = 0; i < 9; i++) {
            board[i] = i + 1;
        }

    }

    f开发者_开发知识库irstMove == false;
    for (int i = 0; i < 9; i++) 
    {
        if ( (i+1) % 3 == 0 )
        {
            cout << board[i] << endl;
        }
        else 
        {

            cout << board[i] << " | ";
        }
    }
}

void TicTacToe::getMove()
{
    if (player == 'X') { 
        player = 'O';
    }
    else {
        player = 'X';
    }

    cout << player << " ";
    cout << "Enter Box: ";
    char c;


    bool move;
    move = true;

    do {
        cin.get(c);
        cin.ignore(numeric_limits<int>::max(), '\n');
        if (c > '9' || c < '0')
            // error message
            cout << "please enter a number 1-9" << endl;

        int number = c - '0';

        cout << "your number is " << number << endl;
        // Your implementation here...

        if (c == '1' && board[0] == '1') {
            board[0] = player;

            move = false;
        }
        else if(c == '2' && board[1] == '2')
        {
            board[1] = player;
            move = false;
        }
        else if(c == '3' && board[2] == '3')
        {
            board[2] = player;
            move = false;
        }
        else if(c == '4' && board[3] == '4')
        {
            board[3] = player;
            move = false;
        }
        else if(c == '5' && board[4] == '5')
        {
            board[4] = player;
            move = false;
        }
        else if(c == '6' && board[5] == '6')
        {
            board[5] = player;
            move = false;
        }
        else if(c == '7' && board[6] == '7')
        {
            board[6] = player;
            move = false;
        }
        else if(c == '8' && board[7] == '8')
        {
            board[7] = player;
            move = false;
        }
        else if(c == '9' && board[8] == '9')
        {
            board[8] = player;
            move = false;
        }

    } while (!move);     
}

@Bunnit From your advice i was able to change it up. Now my only problem is replacing each box with an X or O it doesnt seem like my if and else if are working.


Are you using the DisplayBoard function to display your board?

    bool firstMove = true;
    if (firstMove  == true)
    {

        for (int i = 0; i < 9; i++) {
            board[i] = i + 1;
        }

    }

I'm not sure exactly what you are trying to achieve here but firstMove will always be true so your board will be getting reset everytime this is called.Also below this:

firstMove == false;

this line has no effect, to set firstMove to false use firstMove = false; though the if statement above will still be called each time as firstMove is set to true everytime the function is called, if you only want to set firstMove to true on the first call to DisplayBoard you could use a static variable: static firstMove == true;.

Edit

It also looks like the you have confused chars with ints, in DisplayBoard you set each board tile to be equal to it's corresponding number(the for statement above), but when you check this in the getMove function you use the character equivalents:if (c == '1' && board[0] == '1'). 1!='1'. Since it is homework I'll leave it to you to look up an ascii chart to find out what it does equal.


When a program ends, all of its memory is reclaimed by the operating system so that it can be used by other programs. All values in variables and arrays are lost when a program ends.

If you want to maintain some persistent state until the next time the program is run, you need to save your variables/arrays to some storage medium like a file or a database. When the program is later started, you load those variables/arrays back from the storage medium.

If they didn't teach you how to read/write files yet, then I doubt they expect your game board to be restored to it's previous state every time your program starts.


Rather than filling the board with numbers and then overwriting with X's and O,s you should just take an input in an integer format. That might help with the overwriting problem. Also, I don't know if you've covered 2D Arrays or not, but it would help your programming and logical thought process a bit more if you used them.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜