Консоль читает пользовательский ввод во время выполнения кода

Я пишу 2d пошаговую приключенческую игру на C#, которая работает в консоли Windows. Вот примерное представление о том, как выглядит мой игровой цикл:

while(condition) {
     MethodCall1();
     MethodCall2();
     MethodCall3();
     GetPlayerInput(Console.ReadKey());         
}

Игра запускается в цикле while, а конец цикла - Console.ReadKey(). Идея состоит в том, чтобы игра распечатала всю необходимую информацию, запустила искусственный интеллект противника и другие расчеты, а затем ждала ввода от пользователя, прежде чем делать все заново. Я сталкиваюсь с проблемой, как бы то ни было. Выполнение всего кода занимает достаточно много времени (основной причиной является печать карты на консоль, на печать которой уходит около 150 мс), и в течение этого времени консоль все еще читает пользовательский ввод, хотя Похоже, что нужно дождаться, чтобы прочитать ввод, пока весь код и печать не будут выполнены. Если какая-либо клавиша удерживается нажатой, она проходит по коду столько нажатий клавиш, сколько обнаружила, даже если я отпущу клавишу.

Итак, я полагаю, что у меня есть два вопроса: почему консоль читает ввод, даже если она все еще выполняет код, и что является хорошим способом предотвратить это?

1 ответ

Решение
while (true)
{
    YourMethods();
    while (Console.KeyAvailable)
    {
        Console.ReadKey(true);
    }
    var key = Console.ReadKey();
    Console.WriteLine(key);
}
Другие вопросы по тегам