Зависает консоль от 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()
и применил другой подход для не блокирующего ввода пользователя.