Tic Tac Toe阵列

时间:2014-01-05 22:15:29

标签: c# arrays

在C#中,我有一个tic tac toe游戏,其中我有一个方法来检查玩家是赢了,丢了还是领带的结果。我遇到代码检查的问题,如果它是一个平局。所以现在我有这个。我希望如此,如果任何一个元素中有一个空格,那么游戏就不是一个平局,而是继续。当我运行代码时,即使游戏尚未结束,它也会随机说出平局。

        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
        }

3 个答案:

答案 0 :(得分:1)

您没有设置变量draw,而是在内部范围内声明一个新变量。

答案 1 :(得分:0)

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

        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

答案 2 :(得分:0)

要解释另一个答案,问题是当您到达“ bool draw = false;”这一行时您与最初声明该变量的作用域不同。因为您在for循环内,所以您可以重用变量名,并且由于在变量前面放了'bool',所以错误地声明了一个新变量。当您退出循环范围时,此新变量将由垃圾收集器自动销毁。您唯一需要做的修复是从此行的开头删除“ bool”。