Ты, конечно, знаешь такую замечательную игру, как «Змейка». Так вот, речь пойдет вовсе не о ней. Когда-то давно я нашел игру «Змеиные бои», которая позволяла программировать змейку, а не управлять ей. Недавно я решился не просто воссоздать эту несправедливо забытую гамезу, а сделать онлайновую версию — настоящую арену для робозмей!

«Змеиные бои» были выпущены в далеком 1992 году компанией Gamos. Да-да, той самой, которая потом подарит миру «Братьев-пилотов» с памятным квестом про холодильник. Цель игры — остаться самой длинной змеей, когда все ходы закончатся. Как это выглядело, можешь посмотреть на видео.

Главной геймплейной фишкой было то, что ты не управлял своей змеей напрямую. Не нажимал на клавиши как угорелый. Потому что игра была (внезапно) про программирование.

Это экран создания программной логики змеи. Есть девять слотов, в каждом ты можешь задать определенную ситуацию на поле боя. В твоем распоряжении есть объекты («голова», «тело», «хвост», «барьер», «пустое поле») и логические операторы, которые можно повесить на эти объекты («кроме», «или», «и»).


Ты мог заполнить все девять слотов или только пару, а в зависимости от того, что ты там накликал, твоя змея становилась или машиной для отгрызания чужих хвостов, или чьей-то едой.

 

С чего все начиналось

Вообще я не разработчик игр. И даже не разработчик инди-игр. В рабочие часы я руковожу проектами в офисе своей питерской IT-компании, еще менеджерю продукт про ecommerce. Иногда сам пишу код (потому что могу!) и, конечно, люблю игры. На пересечении этих увлечений — разработка игр, которой я пробовал заниматься еще в школьные годы.

 

Однажды, в далеких-далеких девяностых

Воспоминания о моем первом опыте игростроения имеют мало отношения к делу, но, мне кажется, это забавная история.

В 1998 году после окончания школы я поспорил с одноклассниками, что смогу сделать игру от начала и до конца. Не имея собственного компьютера. В то время в моде были текстовые квесты, и я решил забабахать собственную фэнтезийную адвенчуру с артефактом и гоблинами. Все лето ходил к другу, сидел за его компьютером и фигачил на QBasic.

Главной ошибкой было то, что я подошел к вопросу глобально и сделал карту на две тысячи локаций. Каждая локация требовала текстового описания — этот текст игрок читал, когда в нее перемещался. Моя фантазия исчерпалась через пару сотен локаций. Дальше в ход пошел Пришвин — у него детальные описания природы.

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

 

Snek Fite

Долгое время я играл в бесплатную версию Snake Battle, купить в моем регионе платную было нереально (да никто в то время игры и не покупал, если по-честному). Когда в России стали популярны хакатоны, несколько раз пытался собрать команду и написать игру за 48 часов, но обычно команда не собиралась. В конечном счете решил сделать все сам и заодно проверить в действии книгу про customer development — создать прототип, найти целевую аудиторию, понять, какие фичи реально нужны, а какие только кажутся важными.

В мае 2018-го выделил под это несколько часов и сваял первую версию. Хотелось сделать то, чего не удалось достичь оригиналу в 1992 году, — настоящий мультиплеер и турниры.

В качестве платформы я выбрал браузер как наиболее общедоступный и простой вариант. Бэкенд — Ruby on Rails и PostgreSQL. Первая версия была готова часов за восемь. Она могла регистрировать змей, программировать их с помощью BPI (basic programming interface) и запускать бой на четыре змеи.

Игровое поле простое, как в оригинале: стены и змеи, ничего лишнего.

Чтобы начать играть, создаешь змею, придумываешь ей имя, тебе выдается рептилия с уникальным цветом и узором на шкурке.


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

Пример программы. Объекты на иллюстрации расставлены методом священного рандома
Пример программы. Объекты на иллюстрации расставлены методом священного рандома

Змея с такими паттернами, как на примере выше, бешено кружит по периметру, но если ей повезет наткнуться на вражеский хвост — начинает активно гоняться за жертвой. В коллективных баталиях это иногда срабатывает хорошо: пока остальные разбираются друг с другом, змея бегает кругами (почти гарантированно находясь в безопасности). По закону жанра чужие змеи в пылу битвы обязательно встают в блок и подставляют хвосты нашему «стервятнику». На момент написания статьи змея занимает 30-е место в общем топе. Неплохо. Hack the system!

Когда логика настроена, можно переходить на экран выбора игры. Сейчас пока есть три режима.

Дуэль. Две змеи, 1000 ходов, побеждает змея с наибольшим количеством секций на последнем ходу.


Стандарт. Четыре змеи на одном большом поле. Тут часто решает нестандартное поведение — как в том примере, о котором я написал выше.


Правда, штука в том, что такая тактика будет сильно зависеть от режима игры. То, что работает в «дуэли», в матче на девять игроков вряд ли пройдет.

Батл-рояль. Deathmatch на девять змей на одной карте. Просто так сюда не попасть, сначала нужно выбить «корону», играя в обычные матчи.


Онлайновая составляющая игры — это асинхронный мультиплеер. Все змеи попадают в общую базу, и ты в любое время можешь сыграть хоть с кем — со случайным оппонентом или даже бросить вызов кому-то из лидеров (если ты играл с ним раньше).


Функция реванша добавилась недавно, как и динамика (маленькие красные и зеленые цифры рядом с местом). Игра постоянно растет, стараюсь уделять ей хотя бы по часу в день.

Еще одна фишка — недавно сделал в игре «национальный рейтинг». Можно посмотреть, какая страна в топе. Правда, сейчас это почти полностью зависит от количества игроков.


 

Что внутри

Сейчас все просто — игра сделана на упомянутых «рельсах». Что забавно, уже сейчас, на 5000 боев, бэкап базы занимает 15 гигабайт. Откуда столько? Записывается каждый ход каждого боя, и эти данные публичны — можно анализировать и учить свою нейронную сеть. Да-да, для особо упоротых в игре есть и такая возможность, нужно только перейти на статус Pro.

На дуэль или бой четырех змей уходит около 15 секунд. Королевская битва считается дольше, с минуту. Но это только «альфа» — когда количество игроков вырастет, планирую просто перенести все на отдельный сервер, и будет работать быстрее.

Сейчас на игру затрачено часов 80–100. Проект несложный, основное время уходило либо на модуль расчета боя, либо на BPI — я решил там использовать Vue.JS, не имея никакого опыта работы с ним. Разобрался в процессе.

Баги? А как же.

Самые сложные баги — змеи ходят не так, как должны были вести себя при выполнении правил BPI. Спасибо, что есть активные игроки, которые проводят десятки боев в день и сообщают о проблемах. В итоге приходится брать конкретный бой, конкретный раунд и анализировать, почему конкретная змея пошла именно в этом направлении, а не в другом. Таким образом удалось найти штук шесть серьезных багов. Например, раньше змеи бегали зигзагами на пустом поле, сейчас так уже не бывает.

 

Тактики, читы, прохождения

Читы в этом подзаголовке, конечно, только для привлечения внимания и ностальгии ради (помнишь CheMax и ArtMoney?). А вот выигрышные тактики в игре, конечно, есть.

Один наш постоянный игрок под ником Zerro (в миру Станислав Ерохин) проделал громадную работу — написал и проиллюстрировал собственное руководство по воспитанию змеи-чемпиона. Там есть базовые игровые механики, FAQ, ретроспективы боев с выводами, выигрышные комбинации и полезные ссылки.

Весь труд цитировать смысла нет, он будет как десять таких статей. Так что ограничимся несколькими быстрыми советами.

 

Совет 1. Как избежать «крысиных бегов»

В игре бывает, что две змеи начинают гоняться за хвостами друг друга. Это тупик, если вы играете вдвоем. Если вас больше, то остается ждать, пока кто-нибудь сообразительный не подкрадется сзади и не укоротит твою змею наполовину (ну или не твою).

Автор предлагает использовать такой паттерн, чтобы вырваться из цикла, но честно предупреждает — он бесполезен, когда твоя змея очень короткая. Она просто слишком часто будет оказываться в подобном положении и не сможет никому откусить хвост.


Мудрый вывод: забей. Пусть идут «крысиные бега»!

 

Совет 2. Как сделать защитную стойку

Стоило растянуться на солнышке, как из-за куста появляется свора голодных змей. Что делать? Можно задать такой паттерн, при котором твоя змея будет сворачиваться в клубок при приближении опасности. Круто же?


 

Совет 3. Как заставить змею исследовать безопасную область

Автор предлагает считать за «безопасную область» две незанятые клетки впереди и еще столько же сбоку.


Змея будет ползти вперед, пока у нее на радарах не появится что-то, кроме пустых клеток.

Надо сказать, что в игре автоматически срабатывают и «зеркальные ситуации», то есть не надо дополнительно настраивать отраженный по вертикали паттерн или рисовать симметричный.

В общем, это только малая часть, рекомендую ознакомиться с полным руководством, там есть над чем подумать. А вообще помни, что Snek Fite — игра про эксперименты. Не бывает идеальной модели поведения (ну или она есть, но ее пока никто не вывел). Главное тут — не переставать ставить опыты на своей рептилии, выпускать в бой, корректировать поведение, снова выпускать.

 

Ценителям жанра

Любителей программистских развлечений, как оказалось, не так уж и мало. У этих людей даже есть своя викия, там собрано большое количество подобных игр, выходивших с 1961 года. Всего — 60 штук. Называется ресурс Programming Games Wiki.

Там, например, есть такая классика, как Omega (1989 год) и изначальный отечественный Snake Battle.

Скриншот Omega (версия для DOS)
Скриншот Omega (версия для DOS)

Впрочем, есть и более современные примеры — скажем, Human Resource Machine (этакий экскурс в ассемблер, скрытый за игрой про смешных человечков и конвейеры) и TIS-100 — экскурс куда более серьезный. Кстати, другие игры Zachtronics (хотя бы та же Shenzhen I/O) тоже могли бы занять достойное место в списке.

Скриншот из TIS-100. Да, игры бывают и такими!
Скриншот из TIS-100. Да, игры бывают и такими!

И еще жаль, что большая часть ссылок уже не работает, а сами игрушки приходится выискивать на разных сайтах с ретроиграми.

 

Планы

Сейчас я хочу привести дизайн в порядок. Начал делать темную версию, как принято в играх, но это реально требует вложений времени. Дальше сделаю возможность выгрузки истории боев, а после этого займусь турнирами. Это пока что самая сложная часть из запланированного, и для нее нужно много активных игроков.

Еще время от времени будут появляться различные рейтинги — благо для этого все данные есть. Попозже сделаю объединение в кланы и возможность биться два на два или тремя тройками.

В общем, если стало интересно, то приглашаю поиграть на snek.app, а обратную связь кидать в Facebook.

1 комментарий

  1. Themistocles

    02.09.2018 at 17:45

    очень забавная штука, спасибо за труды

Оставить мнение

Check Also

Блокчейн не для криптовалюты. Отечественный стартап Power_blockchain: кто таков и чем знаменит

The Power — это не только одна из самых крутых песен группы Manowar, но и российский старт…