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