2014-02-16 111 views
-1

我需要弄清楚我做錯了什麼。我必須寫出一個基本能夠確定誰在井字遊戲中獲勝的功能。如果X贏了,我返回0,Y,返回1,如果兩個都不贏,返回2.C++:檢查誰贏了井字遊戲

唯一給我的東西是結構定義和函數原型。我不確定如何在這個程序中實現「移動」變量,而且我也不確定如果兩個玩家都不贏,那麼如何返回2。我想了一會兒把它放在else之後,但是它幾乎總是返回2,因爲之前的條件可能很少會被滿足。我也發現我即使在Y勝的時候也會回到0。嘆息......在寒假期間花了這麼多時間參加一個5單元的微積分課程,它讓我的編碼生鏽了!

謝謝。

#include <iostream> 

using namespace std; 

struct TTT{ 
char array[3][3]; 
unsigned moves; 
}; 

unsigned whoHasWon(const TTT & game); 

int main() 
{ 


    TTT x = {{{'X','O',' '}, {' ','X',' '}, {'O',' ','X'}}, 5}; 
    TTT y = {{{'X','O',' '}, {'X','O',' '}, {' ','O',' '}}, 4}; 

    cout << whoHasWon(x); 

    cout << whoHasWon(y); 

    return 0; 
} 

unsigned whoHasWon(const TTT & game) 
{ 

    //First check diagonals 

    if (game.array[0][0] == 'X' && game.array[1][1] == 'X' && 
     game.array[2][2] == 'X') 
    { 
     return 0; 
    } 

    else if (game.array[0][0] == 'O' && game.array[1][1] == 'O' && 
      game.array[2][2] == 'O') 
    { 
     return 1; 
    } 

    if (game.array[2][0] == 'X' && game.array[1][1] == 'X' && 
     game.array[0][2] == 'X') 
    { 
     return 0; 
    } 

    else if (game.array[2][0] == 'O' && game.array[1][1] == 'O' && 
      game.array[0][2] == 'O') 
    { 
     return 1; 
    } 

    for (unsigned row = 0; row < 3; row++) 
    {    // Check rows 

     if (game.array[row][0] == 'X' && game.array[row][1] == 'X' && 
      game.array[row][2] == 'X') 
     { 
      return 0; 
     } 

     else if (game.array[row][0] == 'O' && game.array[row][1] == 'O' && 
       game.array[row][2] == 'O') 
     { 
      return 1; 
     } 
    } 

    for (int column = 0; column < 3; column++) 
    {  //Check columns 
     if (game.array[0][column] == 'X' && game.array[1][column] == 'X' && 
      game.array[2][column] == 'X') 
     { 
      return 0; 
     } 

     else if (game.array[0][column] == 'O'  && game.array[1][column] == 'O' && 
       game.array[2][column] == 'O') 
     { 
      return 0; 
     } 
    } 
} 
+1

雖然代碼有點長,但邏輯看起來不錯。你最後錯過了一個'return 2;',就這些。 – dasblinkenlight

+0

謝謝......你能否給我一個關於如何縮短這個概念的總體思路? – user2411290

+1

製作一個函數'bool hasWon(const TTT&game,char ch)',它檢查'ch'是否在任何行,列或對角線中。這應該是你的代碼的大約一半。然後從你的'whoHasWon'函數中調用這個函數兩次。 – dasblinkenlight

回答

1
if (game.array[0][column] == 'O' && game.array[1][column] == 'O' && 
     game.array[2][column] == 'O') 
{ 
    return 0; 
} 

應該

if (game.array[0][column] == 'O' && game.array[1][column] == 'O' && 
     game.array[2][column] == 'O') 
{ 
    return 1; 
} 

也應該有return 2;末,萬一沒有贏得。

+0

謝謝!我現在明白了。 – user2411290