Пользовательский ввод во время работы программы
Я делаю игру в понг. У меня все работает, но пользователь двигает весло. Я использую цикл while (true), в котором вызываются все методы. Как я могу переместить весло с WASD? Я хочу, чтобы программа продолжала работать в ожидании ввода пользователя. Я пытался использовать Console.ReadKey(), но программа зависает
1 ответ
Решение
Хотя я бы предложил использовать игровую библиотеку (хотя я не могу найти какую-то конкретную для терминала, есть Curses Sharp, которая может быть полезна), это можно сделать вручную...
Основная проблема заключается в том, что Console.ReadKey
блокирует (или "зависает"), пока ключ не станет доступным для чтения; используйте Console.KeyAvailable, чтобы увидеть, доступен ли ключ в данный момент:
while (true) {
// Clear out all keys in the queue; there may be multiple (hence "while")
while (Console.KeyAvailable) {
// Won't block because there is a key available to read. Handle it.
var key = Console.ReadKey(true);
HandleKey(key);
}
// Do other processing ..
ProcessGameTick();
// .. and be sure to Yield/Sleep to prevent 100% CPU usage.
Thread.Sleep(0);
}