2016-12-08 20 views
0

私はTic-Tac-Toeプログラムを構築していましたが、現時点でまだ進行中です。これまでのところ、ビルドのエラーは発生していませんが、現時点での主な問題は、プレイヤー1が最初の番号を入力するとプログラムが終了するということです。私はそれがInput()関数のためだと思うが、約3回コードを調べた後、空白になり、何が起こっているのか分からない。関連するコードは次のとおりです。C++ Tic-Tac-Toeプログラム

#include <iostream> 
using namespace std; 


char acBoard[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; 
char cPlayerCharacter = '0'; 
int iChoice = iChoice + 1; 




void DisplayBoard() 
{ 
    system("cls"); 
    cout << ' ' << acBoard[0][0] << " | " << acBoard[0][1] << " | " << acBoard[0][2] << endl; 
    cout << "---|---|---" << endl; 
    cout << ' ' << acBoard[1][0] << " | " << acBoard[1][1] << " | " << acBoard[1][2] << endl; 
    cout << "---|---|---" << endl;; 
    cout << ' ' << acBoard[2][0] << " | " << acBoard[2][1] << " | " << acBoard[2][2] << endl; 
} 

char win() 
{ 
    if (acBoard[0][0] && acBoard[0][1] && acBoard[0][2] == 'X' || 
     acBoard[1][0] && acBoard[1][1] && acBoard[1][2] == 'X' || 
     acBoard[2][0] && acBoard[2][1] && acBoard[2][2] == 'X' || 
     acBoard[0][0] && acBoard[1][0] && acBoard[2][0] == 'X' || 
     acBoard[0][1] && acBoard[1][1] && acBoard[2][1] == 'X' || 
     acBoard[0][2] && acBoard[1][2] && acBoard[2][2] == 'X' || 
     acBoard[0][0] && acBoard[1][1] && acBoard[2][2] == 'X' || 
     acBoard[2][0] && acBoard[1][1] && acBoard[2][0] == 'X') 
     return 'X'; 

    if (acBoard[0][0] && acBoard[0][1] && acBoard[0][2] == '0' || 
     acBoard[1][0] && acBoard[1][1] && acBoard[1][2] == '0' || 
     acBoard[2][0] && acBoard[2][1] && acBoard[2][2] == '0' || 
     acBoard[0][0] && acBoard[1][0] && acBoard[2][0] == '0' || 
     acBoard[0][1] && acBoard[1][1] && acBoard[2][1] == '0' || 
     acBoard[0][2] && acBoard[1][2] && acBoard[2][2] == '0' || 
     acBoard[0][0] && acBoard[1][1] && acBoard[2][2] == '0' || 
     acBoard[2][0] && acBoard[1][1] && acBoard[2][0] == '0') 
     return '0'; 

    return 'd'; 
} 


void Input() 
{ 
    cin >> iChoice; 
    switch (iChoice) 
    { 
    case 1: 
     acBoard[0][0] = cPlayerCharacter; 
     break; 
    case 2: 
     acBoard[0][1] = cPlayerCharacter; 
     break; 
    case 3: 
     acBoard[0][2] = cPlayerCharacter; 
     break; 
    case 4: 
     acBoard[1][0] = cPlayerCharacter; 
     break; 
    case 5: 
     acBoard[1][1] = cPlayerCharacter; 
     break; 
    case 6: 
     acBoard[1][2] = cPlayerCharacter; 
     break; 
    case 7: 
     acBoard[2][0] = cPlayerCharacter; 
     break; 
    case 8: 
     acBoard[2][1] = cPlayerCharacter; 
     break; 
    case 9: 
     acBoard[2][2] = cPlayerCharacter; 
     break; 
    } 
} 


int main() 
{ 
    do 
    { 
     DisplayBoard(); 
     cout << "Enter a Number Player " << cPlayerCharacter << ": "; 
     Input(); 
     if (cPlayerCharacter = '0') 
     { 
      cPlayerCharacter = 'X'; 
     } 
     else cPlayerCharacter = '0'; 
    } while (!win); 

    if (win() == 'd') 
    { 
     cout << "It's a draw"; 
    } 

    if (win() == '0') 
    { 
     cout << "Nought wins"; 
    } 

    if (win() == 'X') 
    { 
     cout << "Cross wins"; 
    } 
} 

解決策が私の目の前にあるように感じますが、私はそれを見ることはできません。どんな助けもありがとう。ありがとう。

+2

デバッガを使用してステップスルーする場合は、一度それを見るだけで済みます。 – wally

+4

'} while(!win);'これは警告だったはずです。あなたが警告を下げない限り。 winは関数です。 – drescherjm

+0

タイプミスとして投票を終了します。 '!win'は'!win() 'でなければなりません。 – NathanOliver

答えて

1

while (!win);は、実際に関数を呼び出すには、while (!win());である必要があります。それ以外の場合は、関数が存在するかどうかを評価するだけです。