Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
M X N井字游戏中宣布胜利者的问题(c编程)_C - Fatal编程技术网

M X N井字游戏中宣布胜利者的问题(c编程)

M X N井字游戏中宣布胜利者的问题(c编程),c,C,我做了一个tic-tac-toe游戏,我遇到了如何赢得tic-tac-toe游戏的问题,其中赢得游戏的行数、列数和连续网格数由用户输入。 但有时在连续放置两个网格以赢得游戏(n)后,宣布赢家,有时不宣布赢家(这就是我的问题所在) n是赢得比赛的连续格数(由用户输入) r是用户输入的行数 c是用户输入的列数 我已经注意到,当你举例来说,如果n=3,并且用户连续输入3个x或o(xxx或ooo)时,它只会在第一个x或o从拐角处开始时宣布获胜(例如:坐标(0,0)(0,1)(0,2)将赢得游戏,但坐标(

我做了一个tic-tac-toe游戏,我遇到了如何赢得tic-tac-toe游戏的问题,其中赢得游戏的行数、列数和连续网格数由用户输入。 但有时在连续放置两个网格以赢得游戏(n)后,宣布赢家,有时不宣布赢家(这就是我的问题所在)

n是赢得比赛的连续格数(由用户输入) r是用户输入的行数 c是用户输入的列数

我已经注意到,当你举例来说,如果n=3,并且用户连续输入3个x或o(xxx或ooo)时,它只会在第一个x或o从拐角处开始时宣布获胜(例如:坐标(0,0)(0,1)(0,2)将赢得游戏,但坐标(0,1)(0,2)(0,3)将不适用于用户通过列或对角线获胜的情况

如果你想看到完整的代码在你的电脑上试用,请在评论部分询问我

这是我尝试过的代码(但并不总是宣布获胜者)

int player_-won(字符字母,int n)
{
int r,c;
整数=0;
//检查行以获得胜利
对于(r=0;r=0;--r)
{
if(格[r][c]==字母)
{
韩元+=1;
c+=1;
}
如果(韩元=n)
{
返回1;
}
}
返回0;
}
我希望(如果用户输入n=3),无论我在哪里连续得到3个x或o,都必须宣布获胜者

int player_won(char letter, int n) 

{
    int r, c;
    int won = 0;

    // Check rows for a win
    for (r = 0 ; r < n ; ++r) 
    {
        for (c = 0 ; c < n ; ++c) 
        {
            if (grid[r][c] != letter) 
            {
                break;
            }

        if (grid[r][c] == grid[r][c + 1]) 
            {
            if (c + 1 == n - 1) 
                {
                    return 1;
                }
        } 
            else break;
    }
    }

    // Checks columns for a win
    for (r = 0 ; r < n ; ++r) 
    {

        for(c = 0 ; c < n ; ++c) 
        {
        if (grid[c][r] != letter) 
            {
                break;
            }
        if (grid[c][r] == grid[c + 1][r]) 
            {
            if (c + 1 == n - 1) 
                {
                    return 1;
                }
        } 
            else break;
    }
    }

    // Checks first diagonal for a win
    for (r = 0 ; r < n ; ++r) 
    {

    if(grid[r][r] != letter) 
        {
            break; 
        }

        if (grid[r][r] == grid[r + 1][r + 1]) 
        {
            if (r + 1 == n - 1)
            {
                return 1;
            }
        } 
        else break;
    }

    // Checks second diagonal for a win
    c = 0;

    for(r = n - 1 ; r >= 0 ; --r) 
    {

        if(grid[r][c] == letter) 
        {

            won += 1;
            c += 1;
        }
        if (won == n) 
        {
            return 1;
        }
    }
    return 0;
}