Зависает консоль от pdcurses

Пишу Понг на Си с использованием pdcurses, проблема изначально была в том что шарик двигался пошагово, потому что в игровом цикле do-while постусловие было (c=getch()) != 27(для выхода с esc) и цикл ждал ввода пользователя. Логики в использовании этого цикла я не видел, потому что просто писал физику и отрисовку игры и для меня это было маловажно.

Когда дошел до реализации движения шарика в реальном времени и возникли проблемы. Логика следующая меняем цикл do-while на while(true), и он(цикл) "двигает" шарик до бесконечности, но если кто-то вводит данные с клавиатуры, то срабатывает if(kbhit()) и выполняется часть кода с изменением координат платформ. С помощью usleep хотел ограничить скорость выполнения цикла и с if(с==27){break;} реализовать выход из него.

Начал делать, возникла проблема - зависание консоли, на ней висит знак часов, по диспетчеру иногда можно понять что программа не отвечает. Я готов принять тот факт, что консоль с while(true) плохо работает, хотя как в таком случае реализовать код игры? Проходился с отладчиком, консоль зависает при её инициализации на 33 строке, но при запуске со старым видом цикла do-while, все работает чётко. Поэтому и подозрение на цикл while(true)

Ссылка на код: https://pastebin.com/NXN8vipD


Ответы (1 шт):

Автор решения: Артур Нигматуллин

Проблема устранилась только, когда убрал оператор kbhit() и применил другой подход для не блокирующего ввода пользователя.

→ Ссылка