NotAComputerScienceStudent Ответов: 1

Как работает этот код ввода с клавиатуры


Я нашел этот код в интернете без каких-либо объяснений, я понял, как его использовать, но я не мог понять логику, стоящую за ним. Это прекрасно работает, класс называется input, так что я могу просто сделать.

if(Input.Keypressed(Keys.Enter))
                {
                    //Do somethings
                    
                }


Что я уже пробовал:

public static Hashtable KeyBoard = new Hashtable();

        public static bool KeyPressed(Keys key)
        {
            if(KeyBoard[key] == null)
            {
                return false;
            }
            else
            {
                return (bool)KeyBoard[key];
            }

        }
        public static void ChangedState(Keys key, bool state)
        {
            KeyBoard[key] = state;
        }

Richard MacCutchan

Так в чем же заключается ваш вопрос?

1 Ответов

Рейтинг:
6

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) для обнаружения нажатия клавиши и обработки этого события.


Richard MacCutchan

Это признание того, что вы специалист по змеям?

Pete O'Hanlon

Так много ответов, так много из них неподходящих.... :Подмигивание: