Пользовательский ввод во время работы программы

Я делаю игру в понг. У меня все работает, но пользователь перемещает весло. Я использую цикл while (true), в котором вызываются все методы. Как я могу перемещать ракетку с помощью WASD? Я хочу, чтобы программа продолжала работать, ожидая ввода пользователя. Я пытался использовать Console.ReadKey(), но программа зависала.


person Community    schedule 23.06.2013    source источник


Ответы (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);
}
person user2246674    schedule 23.06.2013