在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
}
答案 0 :(得分:1)
您没有设置变量draw,而是在内部范围内声明一个新变量。
答案 1 :(得分:0)
代码的一个问题是@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
答案 2 :(得分:0)
要解释另一个答案,问题是当您到达“ bool draw = false;”这一行时您与最初声明该变量的作用域不同。因为您在for循环内,所以您可以重用变量名,并且由于在变量前面放了'bool',所以错误地声明了一个新变量。当您退出循环范围时,此新变量将由垃圾收集器自动销毁。您唯一需要做的修复是从此行的开头删除“ bool”。