Pete O'Hanlon
На первый взгляд я хочу сказать, что вы нашли этот фрагмент кода в этом репозитории: GitHub - mirkoBastianini/Snake-Game: Змеиная игра, написанная на C#, с Visual Studio 2015.[^Это работает, потому что код использует нечто известное как игровой цикл. Происходит то, что существует событие таймера, которое срабатывает несколько раз в секунду. Каждый раз, когда срабатывает событие таймера, оно проверяет, какая клавиша нажата в этот момент.
Это логика игры на ТИКе таймера:
private void UpdateScreen(object sender, EventArgs e)
{
//Controlla se è game over
if (Settings.GameOver)
{
//Controlla se un tasto è premuto
if (Input.KeyPressed(Keys.Enter))
{
StartGame();
}
}
else
{
if (Input.KeyPressed(Keys.Right) && Settings.direction != Direction.Left)
Settings.direction = Direction.Right;
else if (Input.KeyPressed(Keys.Left) && Settings.direction != Direction.Right)
Settings.direction = Direction.Left;
else if (Input.KeyPressed(Keys.Up) && Settings.direction != Direction.Down)
Settings.direction = Direction.Up;
else if (Input.KeyPressed(Keys.Down) && Settings.direction != Direction.Up)
Settings.direction = Direction.Down;
MovePlayer();
}
pbCanvas.Invalidate();
}
Альтернативный механизм заключается в использовании события KeyPressed или KeyDown (в WinForms) для обнаружения нажатия клавиши и обработки этого события.