我的tic-tac-tow board保持与上一个游戏相同的值,而不是重新初始化它应该在构造函数中分配的值。 (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();
}
答案 0 :(得分:3)
ticTacToe();
这会构造一个临时的ticTacToe
对象,然后销毁该临时对象。它实际上并没有“重新调用”当前对象的构造函数。
我认为这里的正确方法是提供重新绘制游戏板的“reset()
”功能。也就是说,即使这样也没有意义,因为你每回合都要重置游戏。
答案 1 :(得分:2)
您没有调用构造函数,实际上您正在创建一个新对象并丢失对它的引用。例如:
ticTacToe obj = ticTacToe();
// ^----------- you're doing this, but not assigning it to anything
您希望将构造函数中的内容分隔为不同的方法,例如init
或reset
,并从构造函数和游戏循环中调用该方法。