Интерактивная игра на bash: «Арканоид»
После шахмат, где я решал проблему опроса клавиатуры, мне захотелось попробовать сделать что-то ещё более интерактивное. В шахматах нет никаких фоновых процессов, единственное действующее лицо в игре — сам человек. Хотелось сделать что-то, где в фоне к опросу клавиатуры происходит ещё что-то. Проблема в том, что bash поддерживает только блокирующий вводу.
Забегая вперёд, скажу, что проблему решить вполне удалось. Я разделил игру на два процесса, один из которых опрашивает клавиатуру и сообщает о нажатии второму при помощи сигналов — USR1, USR2 и HUP, как раз три сигнала по трём управляющим клавишам — „←“, „→“ и «пробел». Последняя нужна, чтобы пускать шарик.
Решил сделать «Арканоид», не совсем классическую версию (на неё мне ещё бы пара вечеров потребовалась), но близкую. В игре есть три типа блоков разных цветов — вишнёвый разбивается сразу, синий при первом ударе превращается в вишнёвый, а от зелёного (самое интересное!) при ударе иногда отваливается часть, поймав которую, можно получить приятный бонус — более широкую ракетку, дополнительную жизнь или липкость. Последнее означает, что шарик в этом режиме не отскакивает от ракетки, а прилипает.
Ещё одна фишка игры — звуковое оформление, которое нечасто услышишь в консоли, я думаю. Правда, только для «Мака» (сделано командой «say», я заставляю её проговаривать буквы с большой скоростью), знаю, что для Линукса тоже есть команды для синтезатора речи («espeak», например), но мне негде их попробовать.
В игре пять жизней и пять уровней, кстати второй посвящён моей любимой жене, большой любительнице кошек (этот уровень как раз на скриншоте). Я сделал щадящую скорость полёта шарика, так что игру можно пройти даже без потерь, если хорошо потренироваться. Код, как водится, выложен на «Гитхаб».
От терминала, как и в шахматах, требуется уметь отображать 256 цветов и хорошая поддержка «Юникода». Нигде, кроме как под «Мак» игру я не тестировал, по-прежнему рекомендую iTerm2 в качестве терминала.
Я записал небольшое видео игрового процесса. Я попробовал две программы для записи видео с экрана — «Скрини» и «КвикТайм», к сожалению обе нагружают процессор так, что игра начинает тормозить.
Видео выложил на «Яндекс.Видео». Добавлено позднее: сервис «Яндекс.Видео» прекратил своё существование.
я что-то не так делаю? :)
Комментарий для o-mokhov.ya.ru:
Спасибо, поправил! Запускаться через bash должно.
Круто! Евгений, я поражаюсь вашей производительности, сколько времени вы потратили на написание?
Я помню, писал арканоид на флеше, который гораздо более приспособлен для создание игр, и то у меня ушло несколько полных дней.
Комментарий для Михаил:
Я занимался в субботу и воскресенье, когда выдавалась минутка свободная — всё-таки в выходные много домашних дел нужно сделать. Так что несколько часов, наверное.
Тормозит, причем в Терминале больше, чем на iTerm. Но прикольно.
Комментарий для gray7400.ya.ru:
У меня в iTerm2 (не в iTerm) тормозит меньше, чем в «Терминале», причём в iTerm2 тормоза почти не ощущаются.
Комментарий для gray7400.ya.ru:
У меня в «Терминале» тормозит так, что играть невозможно.
Женя, вот ты псих, а!
Нереально круто !
Комментарий для ninjacolumbo.ya.ru:
:-D давненько не слышал этой фразы вживую
Это круто, я считаю.
«Ролик недоступен», говорит. :(
Комментарий для bealex.livejournal.com:
Странно, у меня не говорит. А ты поиграй просто, у тебя же «Мак» или нет? :)