Почему мой конструктор не будет повторно инициализировать переменные при выполнении цикла? - PullRequest
0 голосов
/ 19 апреля 2011

Моя доска tic-tac-tow поддерживает те же значения, что и в предыдущей игре, вместо повторной инициализации значений, которые предполагается назначить в конструкторе. (123, 456, 789)

Кто-нибудь знает, почему это может быть?

Конструктор:

ticTacToe:: ticTacToe()
{
    for (int i = 0; i < 1; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = 49 + (i + j);

     for (int i = 1; i < 2; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = 51 + (i + j);

     for (int i = 2; i < 3; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = 53 + (i + j);

     player = 1;
     validMove = true;
     gameOver = false;
     winner = 0;
     p1win = 0;
     p2win = 0;
     tie = 0;
}

функция-член:

void ticTacToe:: gameLoop()
{
    do
    {
    ticTacToe();
    print();
    getMove();
    alternatePlayer();
    winGameCheck();
    endGameCheck();
    }
    while (!gameOver);
    endPrint();
}

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011
ticTacToe(); 

Создает временный объект ticTacToe, а затем уничтожает этот временный объект.На самом деле он не «повторно вызывает» конструктор текущего объекта.

Я думаю, что правильным подходом здесь будет предоставление функции "reset()", которая перерисовывает игровое поле.Тем не менее, даже это не имеет смысла, так как вы будете перезагружать игру каждый ход.

2 голосов
/ 19 апреля 2011

Вы не вызываете конструктор, вы фактически создаете новый объект и теряете ссылку на него. Например:

ticTacToe obj = ticTacToe();
//              ^----------- you're doing this, but not assigning it to anything

Вы хотите разделить содержимое внутри вашего конструктора на другой метод, такой как init или reset, и вызвать этот метод из конструктора и из игрового цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...