我需要弄清楚我做错了什么。我必须编写一个功能,基本上可以确定谁在Tic-Tac-Toe游戏中获胜。如果X赢了,我返回0,Y,返回1,如果两者都没赢,则返回2.
给我的唯一东西是结构定义和函数原型。我不确定如何在这个程序中实现“移动”变量,如果两个玩家都不赢,我也不确定如何返回2。我想了一会儿把它放在其他的if之后,但是它几乎总会返回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;
}
}
}
答案 0 :(得分: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;
,以防万一没有赢。