Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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
C# Tic-Tac-Toe阵列_C#_Arrays - Fatal编程技术网

C# Tic-Tac-Toe阵列

C# Tic-Tac-Toe阵列,c#,arrays,C#,Arrays,在C#游戏中,我有一个抽签游戏,我有一种方法来检查玩家是赢了、输了还是平局。我在代码检查方面遇到了问题,如果是平局。所以现在我有这个。我希望这样,如果在任何一个元素中有一个空间,那么比赛就不是平局,而是继续下去。当我运行代码时,即使游戏还没有结束,它也会随机地说是平局 bool draw = true; for (int row = 0; row < matrix.GetLength(0); row++) { for

在C#游戏中,我有一个抽签游戏,我有一种方法来检查玩家是赢了、输了还是平局。我在代码检查方面遇到了问题,如果是平局。所以现在我有这个。我希望这样,如果在任何一个元素中有一个空间,那么比赛就不是平局,而是继续下去。当我运行代码时,即使游戏还没有结束,它也会随机地说是平局

        bool draw = true;
        for (int row = 0; row < matrix.GetLength(0); row++)
        {
            for (int col = 0; col < matrix.GetLength(1); col++)
            {
                if (matrix[row, col] == ' ')
                {
                    bool draw = false;
                }
            }
        }
        if (draw)
        {
            return 'D'; //return D for draw
        }
bool draw=true;
for(int row=0;row
您没有设置变量draw,而是在内部作用域中声明一个新变量。

代码的一个问题是@RandRandom说,您在内部循环中声明一个新变量,而不是更改声明的
draw
变量。关于代码的另一个性能点是,当您的条件变为真时,最好使用
break
,以获得更好的性能。另一点是,在这种情况下,最好使用
Enums
,而不是返回
string
char
,以防止任何键入错误

        enum DrawResult
        {
            Draw,
            NotDraw
        }

        bool draw = true;
        for (int row = 0; row < matrix.GetLength(0); row++)
        {
            for (int col = 0; col < matrix.GetLength(1); col++)
            {
                if (char.IsWhiteSpace(matrix[row, col]))
                {
                    draw = false;
                    break;
                }
            }
        }
        if (draw)
        {
            return DrawResult.Draw; //return D for draw
        }
        return DrawResult.NotDraw
枚举结果
{
画
不抽签
}
布尔图=真;
for(int row=0;row
为了解释另一个答案,问题是当您到达“bool draw=false”这一行时,您与最初声明变量的范围不同。因为您在for循环中,所以您可以重用变量名,并且由于您将“bool”放在了新变量的前面,所以您错误地声明了一个新变量。当您离开循环的作用域时,垃圾收集器会自动销毁这个新变量。您需要做的唯一修复是删除这行前面的“bool”。

发布一个完整的解决方案,这样我们就可以理解代码,从您发布的内容很难猜测。这听起来应该很容易调试。在返回值“D”上加一个分隔符,当它到达时检查矩阵中的值。这应该告诉你出了什么问题。。。