Пишу, по большей части, про историю, свою жизнь и немного про программирование.

День Радио

Сегодня, 7 мая в России отмечают День радио — в этот день, 125 лет назад российский физик Александр Степанович Попов на заседании Русского физико-химического общества продемонстрировал «прибор, предназначенный для показывания быстрых колебаний в атмосферном электричестве».

К этому юбилею, превозмогая лень, прокрастинацию и уныние от «самоизоляции», мне удалось наконец дописать игрушку, которую я задумал ещё несколько лет назад. Игра была готова неделю назад, но я всё никак не мог сделать последний шаг — добавить описание и выложить наружу.

Отладочный режим получившегося «Морского боя», в обычном режиме видно только мигание светодиода

Для практики в моей любимой дисциплине — «ненормальном программировании», очень хотелось написать какую-то игрушку, в которую играть нужно будет кодом Морзе.

В итоге, для этого я выбрал «Морской бой». В моём варианте игрок вводит информацию клавишей левого «Шифта», а компьютер отвечает, мигая светодиодом кнопки «Капс Лок». Чуть более подробные правила есть в репозитории проекта.

Обёртка и некоторые функции (мигание светодиодом, опрос «Шифта» и функция задержки) написаны на Си, остальная часть — на языке «Лу́а» (Lua). Давно хотелось изучить этот странноватый язык поглубже, а тут ещё удалось поучиться встраивать его в Си.

Чтобы увеличить градус безумия всего проекта, в Си были использованы диграфы — они очень странно выглядят и дают ощущение, что используется какой-то доселе невиданный язык.

Диграфы в Си немного запутывают и вносят в код толику безумия

Пока работал над игрой, приходилось много гуглить, в очередной раз поразился, как много кода люди бездумно копируют друг у друга. Реализация мигания светодиодом, например, кочует из проекта в проект в неизменном виде — видно, что никто из скопировавших не понимает как этот код вообще работает. Я в нём попытался разобраться и написать чуть чище, чем буквально везде.

Для тех безумцев, которые захотят попробовать скопмилировать этот вариант «Морского боя» и сыграть, ещё раз привожу репозиторий проекта (только под «МакОСь») — https://github.com/bolknote/battleship.

2 комментария
Oleg Gorbunov 2020

В зависимостях у make еще нужен pkg-config. brew install lua в новой кеге с луа 5.2 больше не симлинкает lua.h и другие в /usr/local/include, пришлось сделать симлинки, после этого собралось.

Евгений Степанищев 2020

В зависимостях у make еще нужен pkg-config.

Спасибо, сейчас поправлю, у меня это всё стоит давно, поэтому и не помню, что есть в МакОСи, а что надо ставить ещё.

brew install lua в новой кеге с луа 5.2 больше не симлинкает lua.h и другие в /usr/local/include

Очень странно, у меня Lua 5.3.5, только что попробовал переставить, линки пропали, потом создались сами. Используется вот эта формула: https://github.com/Homebrew/homebrew-core/blob/master/Formula/lua.rb.

Shu Buznik 2020

Отличный проект :)

Евгений Степанищев 2020

Спасибо ?