-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;
}
}
}
雖然代碼有點長,但邏輯看起來不錯。你最後錯過了一個'return 2;',就這些。 – dasblinkenlight
謝謝......你能否給我一個關於如何縮短這個概念的總體思路? – user2411290
製作一個函數'bool hasWon(const TTT&game,char ch)',它檢查'ch'是否在任何行,列或對角線中。這應該是你的代碼的大約一半。然後從你的'whoHasWon'函數中調用這個函數兩次。 – dasblinkenlight