C ++:检查谁赢得了Tic-Tac-Toe游戏

时间:2014-02-16 02:45:32

标签: c++ arrays struct

我需要弄清楚我做错了什么。我必须编写一个功能,基本上可以确定谁在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;
        }
    }
}

1 个答案:

答案 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;,以防万一没有赢。