Console.ReadKey() зацикливается в цикле while

У меня есть петля и внутри нее корпус переключателя, который в основном представляет собой пользовательский интерфейс, который позволяет людям выбрать "да" и теперь продолжить игру с помощью стрелок влево и вправо.

я также добавил Console.Beep(), чтобы дать некоторую обратную связь пользователю. по какой-то причине, как только игра заканчивается (игра использует стрелки (ее змею)), опция да и нет, продолжайте переключаться, и я слышу звуковой сигнал от 10 до 20 раз, и затем он останавливается. Кто-нибудь знает причину? это код:

while (true)
{
    Console.Clear();
    Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~\n\n~~~~~~~~You Lost!~~~~~~~~\n\n~~~~~~~~~~~~~~~~~~~~~~~~~\nYour score was: " + SnakeBody.Count);
    Console.WriteLine("\nDo you want to continue?\n\n      " + (Continue ? ">YES  /  No" : " Yes  / >NO"));
    switch (Console.ReadKey().Key)
    {
        case ConsoleKey.LeftArrow:
            if (!Continue)
            {
                Console.Beep(SoundFrequency, SoundLength);
                Continue = true;
            }
            continue;
        case ConsoleKey.RightArrow:
            if (Continue)
            {
                Console.Beep(SoundFrequency, SoundLength);
                Continue = false;
            }
            continue;
        case ConsoleKey.Enter:
            Console.Beep(SoundFrequency + 200, SoundLength);
            if (Continue)
                SnakeGame();
            break;
        default: continue;
    }
    break;
}

1 ответ

Когда вы нажимаете и удерживаете клавишу, она генерирует повторяющиеся нажатия клавиш с определенной частотой и помещает их в очередь ввода. Похоже, что когда вы играете в свою игру, вы генерируете много нажатий клавиш таким образом, ваше приложение не может обрабатывать их вовремя, поэтому, даже если вы думаете, что завершили игру, ваше приложение все еще много (примерно от 10 до 20 раз). как вы пишете) ключей еще предстоит обработать, вот в чем причина.

Другие вопросы по тегам