2015-05-18 19 views
-1

所以我試圖讓這個簡單的Multiplayer TicTacToe遊戲在eclipse(C++版本)中工作,但似乎每當我運行我的程序時,只有TicTacToe的頂行才能贏得勝利。C++中的TicTacToe不起作用?請幫助

這裏是我的代碼:

#include <iostream> 
using namespace std; 

string board[3][3]; // creates the game board 

void draw(int player, int num) 
{ 
    num--; 
    int row = num/3; 
    int col = num%3; 

    if (player == 1) board[row][col] = "X"; 
    else board[row][col] = "O"; 
}// end draw method 

bool checkWin(int num) 
{ 
    bool win = false; 

    if (num == 1 || num == 2 || num == 3) 
    { 
     if (board[0][0] == board[0][1] && board[0][0] == board[0][2]) 
      return true; 
    } 
    if (num == 4 || num == 5 || num == 6) 
    { 
     if (board[1][0] == board[1][1] && board[1][0] == board[1][2]) 
      return true; 
    } 
    if (num == 7 || num == 8 || num == 9) 
    { 
     if (board[2][0] == board[2][1] && board[2][0] == board[2][2]) 
      return true; 
    } 
    if (num == 1 || num == 4 || num == 7) 
    { 
     if (board[0][0] == board[1][0] && board[0][0] == board[2][0]) 
      return true; 
    } 
    if (num == 2 || num == 5 || num == 8) 
    { 
     if (board[0][1] == board[1][1] && board[0][1] == board[2][1]) 
      return true; 
    } 
    if (num == 3 || num == 6 || num == 9) 
    { 
     if (board[0][2] == board[1][2] && board[0][2] == board[2][2]) 
      return true; 
    } 
    if (num == 1 || num == 5 || num == 9) 
    { 
     if (board[0][0] == board[1][1] && board[0][0] == board[2][2]) 
      return true; 
    } 
    if (num == 3 || num == 5 || num == 7) 
    { 
     if (board[0][2] == board[1][1] && board[0][2] == board[2][0]) 
      return true; 
    } 

    return win; 
} // end checkWin method 

int main() 
{ 
    cout << "C++ TIC TAC TOE GAME" << endl; 
    cout << "The board is labeled from 1-9 in row-major order." << endl; 

    bool winner = false; 
    int turns = 0; 

    for (int i = 0; i < 3; i++) 
    { 
     for (int j = 0; j < 3; j++) 
     { 
      board[i][j] = "-"; 
      cout << board[i][j] << " "; 
     } 
     cout << endl; // "enters" to next line 
    } // prints the game board 2d array 

    while (winner == false && turns < 9) 
    { 
     int player = 0; 
     int placedAt = 0; 

     if (turns % 2 == 0) 
     { 
      int num1; 
      cout << "Player 1 enter what space to place X: "; 
      cin >> num1; 
      player = 1; 
      draw(player,num1); 
      placedAt = num1; 
     } 
     else 
     { 
      int num2; 
      cout << "Player 2 enter what space to place O: "; 
      cin >> num2; 
      player = 2; 
      draw(player,num2); 
      placedAt = num2; 
     } 

     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       cout << board[i][j] << " "; 
      } 
      cout << endl; // "enters" to next line 
     } // prints the game board 2d array 

     winner = checkWin(placedAt); 
     if (winner == true) 
     { 
      cout << endl << "Player " << player << " WINS!"; 
     } 

     turns++; 
     cout << endl; 
    } // end while loop 

    if (winner == false) cout << endl << "NO ONE WON!"; 

    return 0; 
} // end main method 
+0

只是一些我如果checkWin()語句似乎工作... IDK究竟是什麼錯 – Amanda

+1

嘗試使用調試器,做一個一步一步的運行 – vsoftco

+0

我是個初學者,我真的不知道調試器是如何啓動的 – Amanda

回答

0

變化string board[3][3];char board[3][3];,並"X"'X'

下面的更正的代碼應該編譯得很好。

#include <iostream> 
using namespace std; 

char board[3][3]; // creates the game board 

void draw(int player, int num) 
{ 
    num--; 
    int row = num/3; 
    int col = num%3; 

    if (player == 1) board[row][col] = 'X'; 
    else board[row][col] = 'O'; 
}// end draw method 

bool checkWin(int num) 
{ 
    bool win = false; 

    if (num == 1 || num == 2 || num == 3) 
    { 
     if (board[0][0] == board[0][1] && board[0][0] == board[0][2]) 
      return true; 
    } 
    if (num == 4 || num == 5 || num == 6) 
    { 
     if (board[1][0] == board[1][1] && board[1][0] == board[1][2]) 
      return true; 
    } 
    if (num == 7 || num == 8 || num == 9) 
    { 
     if (board[2][0] == board[2][1] && board[2][0] == board[2][2]) 
      return true; 
    } 
    if (num == 1 || num == 4 || num == 7) 
    { 
     if (board[0][0] == board[1][0] && board[0][0] == board[2][0]) 
      return true; 
    } 
    if (num == 2 || num == 5 || num == 8) 
    { 
     if (board[0][1] == board[1][1] && board[0][1] == board[2][1]) 
      return true; 
    } 
    if (num == 3 || num == 6 || num == 9) 
    { 
     if (board[0][2] == board[1][2] && board[0][2] == board[2][2]) 
      return true; 
    } 
    if (num == 1 || num == 5 || num == 9) 
    { 
     if (board[0][0] == board[1][1] && board[0][0] == board[2][2]) 
      return true; 
    } 
    if (num == 3 || num == 5 || num == 7) 
    { 
     if (board[0][2] == board[1][1] && board[0][2] == board[2][0]) 
      return true; 
    } 

    return win; 
} // end checkWin method 

int main() 
{ 
    cout << "C++ TIC TAC TOE GAME" << endl; 
    cout << "The board is labeled from 1-9 in row-major order." << endl; 

    bool winner = false; 
    int turns = 0; 

    for (int i = 0; i < 3; i++) 
    { 
     for (int j = 0; j < 3; j++) 
     { 
      board[i][j] = '-'; 
      cout << board[i][j] << ' '; 
     } 
     cout << endl; // "enters" to next line 
    } // prints the game board 2d array 

    while (winner == false && turns < 9) 
    { 
     int player = 0; 
     int placedAt = 0; 

     if (turns % 2 == 0) 
     { 
      int num1; 
      cout << "Player 1 enter what space to place X: "; 
      cin >> num1; 
      player = 1; 
      draw(player,num1); 
      placedAt = num1; 
     } 
     else 
     { 
      int num2; 
      cout << "Player 2 enter what space to place O: "; 
      cin >> num2; 
      player = 2; 
      draw(player,num2); 
      placedAt = num2; 
     } 

     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       cout << board[i][j] << " "; 
      } 
      cout << endl; // "enters" to next line 
     } // prints the game board 2d array 

     winner = checkWin(placedAt); 
     if (winner == true) 
     { 
      cout << endl << "Player " << player << " WINS!"; 
     } 

     turns++; 
     cout << endl; 
    } // end while loop 

    if (winner == false) cout << endl << "NO ONE WON!"; 

    return 0; 
} // end main method