Консоль читает пользовательский ввод во время выполнения кода
Я пишу 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);
}