Как я делаю Snek Fite, «змейку» для нердов

Пошаговая тактика с программируемым поведением и режимом «батл-рояль». Ремейк известной Snake Battle 1992 года.

Как я делаю Snek Fite, «змейку» для нердов

Меня зовут Михаил, я программист *хлопают*, руковожу разработкой проектов и продуктов в IT и еще люблю умные игры. Недавно с моей небольшой командой (конкретно с дизайнером) мы сделали играбельную версию Snek Fite — это тактические пошаговые бои змей. Немного расскажу об игре, конструктивные комментарии приветствуются.

История

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

В общем, оригинальная игра появилась где-то в 70-х, а разные вариации выходили на всех устройствах, где есть дисплей. «Змейка» для Nokia 3310 — это вообще легенда мобильного геймдева. Ее даже сделали для переизданной версии 2017-го года.

А в 1992 российская студия Gamos (та самая, которая потом выпустит «Братьев Пилотов» с самым хардкорным в мире квестом про холодильник) издала игру Snake Battle.

Ее, кстати, и сейчас можно скачать на сайтах со старыми игрушками.

Концепт

Snek Fite — это идейный наследник классики. Тут есть клетчатое поле и движение змеи в трех направлениях, стены и таймер с обратным отсчетом.

Игровой экран, ранний концепт
Игровой экран, ранний концепт

Игра построена на механике асинхронного мультиплеера. Никто напрямую не рулит змеей в реальном времени — змеи самоуправляемые, действуют по правилам, которые вы в них заложите. Конкретно: жрут друг друга, стараясь не заблокировать себе путь собственным хвостом и лишний раз не подставлять этот хвост противникам.

Вот так сейчас выглядит режим «королевской битвы» (FFA для девяти змей на одном экране):

Дизайн

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

Таблица самых опасных, у всех своя раскраска
Таблица самых опасных, у всех своя раскраска

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

Платформа

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

Подготовка к бою

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

Сейчас редактор выглядит вот так:

Текущая версия редактора поведения змеи
Текущая версия редактора поведения змеи

На картинке полей шесть, но вообще их девять. Каждое поле — это ситуация, которая может произойти в бою.

Игрок добавляет на поле объекты — это может быть голова, тело или хвост вашей или вражеской змеи, стена или пустое пространство. На каждый объект можно повесить логический оператор — must, must not или optional. Соответственно, когда змея будет сталкиваться с заданной ситуацией на поле боя, то она будет вести себя так, как вы ей приказали.

Вот такую ситуацию я называю «круг смерти» — это когда две змеи косплеят Уробороса: начинают нарезать круги, бесконечно гоняясь за хвостами друг друга.

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

Бой

Главный игровой экран выглядит просто: выбор режима битва, автобитва вкл/выкл и, собственно, история боев.

Как я делаю Snek Fite, «змейку» для нердов

В игре пока три режима.

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

Как я делаю Snek Fite, «змейку» для нердов

Стандартный змеецид. Deathmatch для четырех змей. Правила те же, веселья побольше.

Как я делаю Snek Fite, «змейку» для нердов

Королевская битва. Тоже FFA-карта для девяти змей одновременно. Выигрывает длиннейший.

Как я делаю Snek Fite, «змейку» для нердов

Недавно добавил кнопку «Реванш» в список самых опасных змей. Если играли с кем-то из лидеров — можно снова бросить ему перчатку.

Код и производительность

Сейчас все просто — на бэкенде Ruby-on-Rails и PostgreSQL. Кстати, уже сейчас на 5000 боях бэкап базы весит 15 гигабайтов, хотя казалось бы — откуда? Записывается каждый ход каждого боя и эти данные публичны — можно анализировать, учить свою нейронную сеть или просто пытаться понять, как думает змея оппонента и почему она реагирует в текущей ситуации именно так, а не иначе. Например, вот реплей одного боя.

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

Затраты времени

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

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

Зачатки маркетинга

Про результаты говорить пока рано, тестирую разные гипотезы. Реклама в Фейсбуке с таргетингом на играющих программистов, например, принесла 501 человека, из которых 54 дошли до регистрации, справились с ней 10 человек (казалось бы, там три поля и даже почту подтверждать не нужно, но тем не менее). Из этой храброй десятки трое поиграли. Стоимость одного игрока — 362 рубля. Работаю над этим.

Снейк одобряет

Наблюдение: много трафика из Непала и Бангладеша.

Что еще

В игре даже есть одна премиум-функция, она открывает доступ к дополнительным возможностям обучения и нужна тем, кто прямо совсем программист и любит эксперименты. А так можно и нужно играть бесплатно.

В общем, если понравится и появятся идеи, чего вы хотите от Snek Fite, пишите в наш публичный GitHub. Ну или если захотите помочь в разработке. На GitHub, кстати, есть план по фичам.

5151
30 комментариев

Все так, да.

Крутая была игруха. Помню мы с сестрой давным давно играли, только было нифига не понятно как программировать эту змею :)
Думал тоже когда-нибудь сделать ремейк (я бы назвал его CyberSnake), но видимо уже не.

3

У нас open source. Можно принять участие в разработке.

По рекламе:

1. Если уже пытаешься лить траф с Фб, то сделай авторизацию через него. Будет лучше конверсия в регистрацию.
2. Лучше лить не на страницу с регистрацией, а на демо-экран, где можно посмотреть как у тебя все это работает и желательно дать игроку попробовать сделать что-то самостоятельно, а уже потом просить регу.
3. Убери всплывающие окна, это жутко бесит.

По игре:

Дичь какая-то) Может для программистов это занимательно, но я вообще не вдуплил в чем прикол этой пошаговой змейки. Поработай над объяснением преимуществ для массового игрока.

3

Змейка-батлрояль?) А лутбоксы будут?))

2