6 августа 2018 6.08.18 1 1987

Игра Snek Fite: серпентарий для нердов

0

Говорят, каждый человек однажды задумывается о том, чтобы написать роман. Может быть, не уверен. Зато точно знаю, что каждый разработчик однажды задумывается над тем, чтобы написать игру. Меня зовут Михаил, я разработчик и недавно я это сделал. Не с первой, правда, попытки. Ну, предыдущие можно не учитывать.

Первая игра

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

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

При этом каждая локация требовала своего описания, а моя фантазия иссякла уже на двухсотой. На помощь пришел Пришвин с его потрясающими литературными пейзажами и подкинул еще 900. Для сравнения, Толкина только на 30 хватило. Остальные дописывал в духе «Луг, густой лес, дорога». Успеть — успел, но без косяков не обошлось. Во время демонстрации игра вылетела из-за бага с репликами гоблина. Сошлись на ничьей.

И хотя Snek Fite тут ни при чем, ее корни уходят примерно в те же времена. Точнее — к легендарной Snake Battle.

Snake Battle

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

Экран создания программной логики змеи: девять слотов, объекты («голова», «тело», «хвост» — свои и врага, «барьер», «пустое поле») и логические операторы («кроме», «или», «и»).

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

 

Конечно, для детей это было чересчур. В смысле, даже если тебе суждено стать программистом, вряд ли ты будешь самозабвенно разбираться с этими гадами несколько часов кряду. Особенно, когда тебе десять. Я, как и многие, не смог оценить все прелести Snake Battle по достоинству в то время. Зато потом вернулся, разобрался и захотел отдать дань уважения.

Идея и воплощение

В общем, поиграв в Snake Battle в более сознательном возрасте, я загорелся идеей создать современную версию — с блекджеком и онлайн-батлами. В эпоху игр на MS-DOS для дружеских дуэлей просто не было возможности. А хотелось.

Пару раз я пытался увлечь своей задумкой знакомых и не очень ребят — в России как раз стали набирать популярность хакатоны. Запилить игру за 48 часов в принципе реально, но каждый раз что-то не срасталось. В конце концов решил делать сам от и до: создать прототип, найти аудиторию, разобраться, без каких фич можно обойтись, а какие реально нужны.

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

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

 

Но давайте обо всем по порядку.

Как устроена Snek Fite

Ты заходишь на snek.app, создаешь змею, даешь ей имя. Каждому игроку выдается змеюка с уникальным окрасом и узором. Дизайн на этом все. Ну, еще аватарка и обложка в фейсбуке.* Там, кстати, я периодически веду дневник разработки и общаюсь с игроками.

Так выглядит топ самых опасных: у каждого своя боевая раскраска

Чтобы подготовить питомца к бою, его нужно настроить. Визуальный редактор программной логики похож на тот, что был в Snake Battle.

Сейчас редактор поведения змеи выглядит так

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

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

 

Надо сказать, что игра едва ли зайдет далеким от программирования людям. Чтобы понять всю серьезность ситуации, почитайте руководство нашего топового игрока. Его змеи Zerro и Undefined занимают первые две строчки снек-парада. Даже если не будете вникать в суть, просто посмотрите на объем и поймете, почему.

Примеры настройки

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

Здесь белые головы принадлежат вражеским змеям

А вот этот — заставляет преследовать хвост противника, если тот находится на расстоянии максимум в две пустых клетки от твоей головы.

Сложный паттерн, который занимает сразу три поля

А теперь вернемся к процессу.

Собственно бой

На игровом экране (слева) можно выбрать режим битвы, вкл-выкл автобитвы и заодно посмотреть историю боев.

Режима три: Дуэль, Снейкоцид и Батл-рояль — бой один на один, FFA для четырех и для девяти змей соответственно.

В бою у каждой змеи есть 1000 ходов, которые заканчиваются через минуту-полторы для Батл-рояля и секунд через 15 для прочих битв, так что ждать недолго. Асинхронный мультиплеер позволяет сражаться с теми, кого нет онлайн — змея настроена и ведет себя так, как ее научили.

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

Перспективы

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

Для них же есть PRO-статус — он дает дополнительные возможности для обучения рептилии. Это единственная платная функция, а так можно и нужно играть бесплатно. Это не менее увлекательно.

К этому моменту я потратил на Snek Fite около ста часов, и продолжаю вкладывать в нее каждую свободную минуту. В планах привести дизайн в порядок, сделать темную версию игры, добавить возможность выгрузки истории боев и заняться турнирами. Еще задумываюсь о различных рейтингах и перспективе объединения в кланы. Но для этого нужно больше змей. Поэтому присоединяйся и играй с нами. Также буду рад обратной связи — пиши в фейсбук.

* Деятельность родительской организации «Meta» признана экстремистской и запрещена на территории Российской Федерации


Лучшие комментарии

Читай также