2011-04-19 7 views
0

내 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; 
} 

멤버 함수 :이 임시 ticTacToe 객체를 구성

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

답변

3
ticTacToe(); 

후 임시 객체 것을 파괴한다. 실제로는 현재 객체의 생성자를 "다시 호출"하지 않습니다.

올바른 방법은 게임 보드를 다시 그려주는 "reset()"기능을 제공하는 것입니다. 즉, 매 턴마다 게임을 재설정 할 것이므로 의미가 없습니다.

2

당신은 생성자를 호출하지 않습니다. 실제로는 새 객체를 만들고 그것에 대한 참조를 잃어 버리고 있습니다. 예를 들어 :

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

당신은 init 또는 reset로, 다른 방법으로 생성자 내부의 물건을 분리하고, 게임 루프 내 생성자에서와에서 해당 메소드를 호출합니다.

관련 문제