Winforms C#
我正在蛇游戏中实现加电系统,每当我运行生成加电窗口的方法时,窗口就会完全停止,就好像它正在处理沉重却永远的事情一样。我没有任何错误,也没有窗口要求关闭窗口。
这是我的脚本:
private void spawn_powerup()
{
int r = random.Next(0, Powers.Length);
foreach (Power_Up item in Powers)
{
if (item.code == r)
{
bool done = false;
do
{
int X = random.Next(0, grid_size);
int Y = random.Next(0, grid_size);
if (matriz[X, Y] == background_color)
{
matriz[X, Y] = item.Pixel_color;
done = true;
item.placed = true;
}
} while (done);
return;
}
}
}
答案 0 :(得分:1)
您永远不会在done
内将false
设置为do-while-loop
。
因此,如果在第一次迭代中,if表达式的值为true
,done
被设置为true
,而您的do-while
将永远运行
对于我认为要实现的目标,请将do-while
条件更改为!done
,但随后必须确保一段时间后满足if
条件(但在蛇游戏,这应该不是什么大问题。
答案 1 :(得分:0)
首先,您的逻辑错误。设置为true
时,while循环继续,并在发出false
或break;
命令时退出。
您还正在使用同步编程模式。因此,您的应用程序在单线程上运行,每当您调用长时间运行的函数时,您的应用程序就会开始等待该长时间运行的函数完成。然后恢复继续。
答案 2 :(得分:0)
由于您写了while(done)
,因此循环条件将永远不会停止,这意味着:“ while done被设置为true”,它始终如此。
您应该将循环更改为此:
bool done = false;
do
{
(- your code here -)
} while (!done);