C# I';我玩蛇游戏有点小毛病

C# I';我玩蛇游戏有点小毛病,c#,C#,我正在C#上做一个蛇游戏,但我的钥匙出了问题 我正在按照这里找到的代码进行操作。 我得到的错误是。。。例如,如果我向下,如果我在同一时间向右和向上按,我基本上把它按在一起,蛇就会向上走,进入它自己的身体,杀死自己 这是我代码中的keydown部分 private void Form1_KeyDown(object sender, KeyEventArgs e) { //Space is just to restart the form. if (e.KeyData == Keys.S

我正在C#上做一个蛇游戏,但我的钥匙出了问题

我正在按照这里找到的代码进行操作。 我得到的错误是。。。例如,如果我向下,如果我在同一时间向右和向上按,我基本上把它按在一起,蛇就会向上走,进入它自己的身体,杀死自己

这是我代码中的keydown部分

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   //Space is just to restart the form.
   if (e.KeyData == Keys.Space)
   {
       timer1.Enabled = true;
       codesmeshlabel.Text= "";
       spaceBarLabel.Text = "";
       down = false;
       up = false;
       left = false;
       right = true;
   }

   if (e.KeyData == Keys.Down && up == false)
   {
       down = true;
       up = false;
       right = false;
       left = false;
   }

   if (e.KeyData == Keys.Up && down == false)
   {
       down = false;
       up = true;
       right = false;
       left = false;
   }

   if (e.KeyData == Keys.Left && right == false)
   {
       down = false;
       up = false;
       right = false;
       left = true;
   }    

   if (e.KeyData == Keys.Right && left == false)
   {
       down = false;
       up = false;
       right = true;
       left = false;
   }
}    

这听起来像是你在改变你的蛇向“右边”移动的方向,然后在蛇再次移动之前将其设置为“向上”

在你的代码中,我假设你有一个游戏循环,它每隔一段时间(不管多长)更新一次屏幕。为了防止这种情况发生,您需要更改您的设计,以便在您的游戏接受方向更改(键。left/right/up/down)后,它会等到屏幕更新一次后再接受第二个方向更改。这将修复您的错误:)


正如m.t.bennett指出的,另一种选择是检查每个按键是否与当前行程方向相反,如果是,则忽略它。可能会更优雅。

您可能会想检查按下的方向的反方向(在本例中为“向上”)是否不是当前方向(如果是,则忽略按键),因为它起作用了。请将答案标记为已接受,以便人们知道此问题已解决:)