Вполне себе пятничная новость. Под впечатлением от фильма «Тетрис», энтузиаст решил написать эту игру на РНР, чтобы попрактиковаться в работе с терминалом.
Получилось неплохо, хотя на по-настоящему терминальную игру не тянет — по SSH на достаточно удалённом сервере ожидаемо мерцает.
Лично для меня код оказался интересным в плане работы с пользовательским вводом в терминале, в частности, функция readline_callback_handler_install(), которая подменяет стандартный механизм ввода. Соответственно, передав в неё пустой callback можно получить «игровой» вариант ввода, когда не требуется подтверждение через Enter. Ну и убрав блокировку потока, получаем неблокирующий ввод:
readline_callback_handler_install(», function() {}); stream_set_blocking(STDIN, false);
Теперь обращения к fgetc() будут сразу возвращать введённый символ, если он был, а скрипт продолжит выполнение.
Источник: habr.com