所以我成功地创建了一个贪吃蛇游戏,除了一个小问题,我不知道如何解决。让我试着解释一下。
游戏是基于定时器运作的,每个定时器的滴答声意味着将蛇的每个块移动到指定的方向。如果你向右移动,就不能向左移动(因为头部会与身体相交,你会输掉)。所有其他可能的方向也是如此。有一个方向变量指定蛇的当前方向。所以问题在于,当你按下左键时,它会检查方向是否设置为右,并且如果是,则什么都不会发生。但是,如果你在同一时间间隔内先按下下键,然后再按下左键,那么蛇就会向左移动,你就会输掉。以下是处理窗体的KeyDown事件的代码。
这里有一个游戏下载链接,如果你想第一手体验这个漏洞,请使用。感谢您的任何帮助!
游戏是基于定时器运作的,每个定时器的滴答声意味着将蛇的每个块移动到指定的方向。如果你向右移动,就不能向左移动(因为头部会与身体相交,你会输掉)。所有其他可能的方向也是如此。有一个方向变量指定蛇的当前方向。所以问题在于,当你按下左键时,它会检查方向是否设置为右,并且如果是,则什么都不会发生。但是,如果你在同一时间间隔内先按下下键,然后再按下左键,那么蛇就会向左移动,你就会输掉。以下是处理窗体的KeyDown事件的代码。
private void frmMain_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyData)
{
case Keys.Enter:
if (lblMenu.Visible)
{
lblMenu.Visible = false;
LoadSettings();
gameLoop.Start();
}
break;
case Keys.Space:
if (!lblMenu.Visible)
gameLoop.Enabled = (gameLoop.Enabled) ? false : true;
break;
case Keys.S:
using (frmSettings f = new frmSettings())
{
f.ShowDialog(this);
}
break;
case Keys.Right:
if (direction != Direction.Left)
direction = Direction.Right;
break;
case Keys.Down:
if (direction != Direction.Up)
direction = Direction.Down;
break;
case Keys.Left:
if (direction != Direction.Right)
direction = Direction.Left;
break;
case Keys.Up:
if (direction != Direction.Down)
direction = Direction.Up;
break;
}
}
这里有一个游戏下载链接,如果你想第一手体验这个漏洞,请使用。感谢您的任何帮助!