我目前正在尝试编写经典的蛇类游戏,用户使用键盘的箭头键在屏幕上引导蛇。到目前为止,我已经成功地整理出指示移动和键盘控制的代码,但是在尝试合并这些代码时遇到了问题。
为了移动蛇,我为每个箭头键使用单独的后台工作循环,如下所示:
public void worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 1000; i++)
{
if (abortloop == true)
{
worker2 = null;
worker3 = null;
worker4 = null;
break;
}
while (Snake1.Top - 5 >= 8)
{
{
this.Invoke((MethodInvoker)delegate()
{
Snake1.Top = Snake1.Top - 5;
Refresh();
});
System.Threading.Thread.Sleep(500);
}
}
}
}
从键盘输入调用后台工作人员的位置:
else if (e.KeyCode == Keys.W)
{
abortloop2 = true;
abortloop3 = true;
abortloop4 = true;
if (worker == null && abortloop == true)
{
abortloop = false;
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
}
}
可以说,所有这些代码都不会对程序产生致命错误,但是,在命令蛇向另一个方向移动时(在这种情况下,假设它当前正在向下移动并且我按下右箭头键),蛇将开始向适当的方向移动,但也可以向与以前相同的方向移动(按下右箭头键后,蛇开始对角线移动,而不是像我想要的那样向右移动)。这个问题根本不在于有 4 个单独的后台工作人员,因为如果我只对所有关键输入使用 1 个后台工作人员,也会出现同样的问题。
如果这里有人能帮忙,那就太好了。
提前致谢!