rimusprimus
Мой шеф на досуге написал игру
Называется Snek Fite. Она любопытная — хотя бы потому, что там надо заниматься сценарным программированием. А еще она про змей. Расскажу немного и добавлю своих корявых рисунков. Сразу предупреждаю, что игра далеко не казуальная. Даже хардкорная, хотя это слово уже и потеряло смысл от многократного повторения. В общем, хэв фан :)
Графика
Самый короткий пункт, потому что ее нет. Ну, то есть, есть, конечно. Но исключительно затем, чтобы вы могли отличить змею от стены. Ниже будет геймплейное видео, и вы сможете увидеть все своими глазами. А начнем мы с истории.
Ведь мы любим хардкорные игры не за графон, верно?
Откуда хвост растет
Кто жил в девяностые, играл в «змейку». Она еще была на Brick Game — это тот самый черный кирпич, где еще был тетрис, гоночки и вот эта игра, где нужно было из пушки стрелять по сосулям.
«Змейка» у многих была любимой.
А те, у кого в то время уже был ПК, помнят еще одну «змейку» — ее издала российская компания Gamos в 1992 году. Те самые ребята, которые потом подарят миру «Братьев Пилотов» и непроходимый квест с холодильником.
Место, где осталось 20 часов детства
Так вот, эта «змейка» выглядела вот так и называлась Snake Battle (или «Змеиные бои»):
На первый взгляд может показаться, что разница только в том, что змея здесь ест не яблоки (ну или что там символизировали эти точки на поле), а других змей. На самом деле все гораздо хуже.
Так выглядел экран настройки змеиной логики. Змею надо было программировать, никаких тебе WASD.
Чтобы побеждать, тебе нужна была не реакция, а логика. Ну или как минимум папа-программист.
Разница между обычной «змейкой» и этой — как между трехмерным и четырехмерным миром
В общем, для большинства знакомство с игрой было таким:
— Так, что это у нас здесь? О, новая игра, класс!
5 минут спустя…— Нафиг это, пойду лучше в Doom поиграю. Или Duke Nukem. Да хоть в шахматы.
При этом игра была действительно занятной — те, кто нашел в себе силы вернуться к ней в сознательном возрасте, не пожалел. Старую игру, кстати, можно скачать на сайтах с ретро-игрушками, на Old-Games, например.
Как вы поняли, Snek Fite — это такой духовный наследник Snake Battle. Только в ней есть то, чего не было у оригинала (а так хотелось) — возможности поиграть с друзьями и выяснить, у кого змея длиннее.
— Эй, Ёрмунганд, как насчет партии на троих?
Правила. Я предупреждал
Логика поведения змей настраивается в похожем редакторе. Ну, может, чуть более дружелюбном.
Каждое поле — это «дальность обзора» змеи (в центре ее голова). Ты размещаешь доступные объекты в клетках, поведение змеи меняется.
Красный цвет обозначает твою змею, белый — любую вражескую. Есть три объекта для частей тела (голова, хвост, тело) и два нейтральных объекта (пустая клетка, стена). На каждый объект можно повесить один из логических операторов: must, must not или optional.
Если на этом месте вы широко зеваете, то, скорее всего, игра вам будет не по зубам. Хотя попробовать могут даже решительные гуманитарии (как я, например. Мой Uroboros занимает почетное тридцатое место в таблице лидеров — ему просто везет).
Грамотно настроенная змея ведет себя осторожно
Ладно, полные правила есть на странице игры. Изучите перед первой битвой. Если вчитаться, то все покажется очень логичным.
Пример 1. Снек движется в случайном направлении, так как перед ним нет двух вражеских хвостов.
Пример 2. Снек движется в направлении вражеского хвоста, так как в правилах есть условие optional — то есть сценарий запускается, если соблюдается хотя бы одно условие
Пример 3. Снек «сохраняет форму», то есть на картинке он будет двигаться вниз.
Если вы провели настройки не методом Священного Рандома, то ваш снек станет машиной по превращению противников в кучку золы.
Ну на крайний случай они просто останутся без хвоста
Можно, кстати, придерживаться неагрессивной тактики — а вместо этого вовремя подставлять «блоки» и уходить от погони. Пример такого защитного поведения прислал один из игроков, настройка выглядит вот так:
То есть когда голова вражеской рептилии оказывается вблизи хвоста, снек стремится закрыть его собственной головой. Сворачивается в клубок, действует по стелсу, в общем.
— Снек, тебя обнаружили!
Еще вы поначалу будете сталкиваться вот с таким явлением. «Кольцо смерти» или «крысиные бега» — змеи бесконечно гоняются за хвостами друг друга, двигаясь кругами.
Хорошо обученная змея такого не допустит.
Фигура вторая, печальная
Вот, в общем-то и вся программная логика. Она не такая страшная, как могло показаться, и вместе с тем открывает простор для экспериментов. Опыты над змеями — это вообще главная механика игры. Не бывает «победных» тактик, импровизация — наше всё.
Игровые режимы и другие механики
Их пока что три. В любом режиме схватка продолжается 1000 ходов — то есть пока не закончится время.
Дуэль. Тут все понятно, две змеи бьются один на один. Это как финальная битва Дарта Вейдера с Люком или Гарри Поттера с Волдемортом.
— Прости, Северус, импровизируй.
Снейкоцид. Четыре змеи, deathmatch (каждый за себя) до победного. Веселее тем, что происходит больше экшна — а лидер может потерять преимущество в самый последний момент.
Гибрид щуки и белой березоньки включил режим снейкоцида
Батл-рояль. Нет, лутбоксов не будет. Зато будет девять змей на одном поле. Самая динамичная битва из возможных.
Змеиная безножка
Победитель получает очки и если наберет достаточно — попадает в турнирную таблицу.
Зеленая кнопка нужна затем, чтобы вызвать того, с кем уже играл, на реванш. Змеи — чрезвычайно мстительные создания и никогда не забывают откушенных хвостов.
Ну вот вроде и всё.
На игру у автора ушло примерно 100 часов. Это притом, что она сделана на технологии VUE, с которой тот не был знаком на момент начала работы — приходилось обучаться по ходу дела.
Игра сейчас находится в свободном доступе по адресу snek.app (играть можно в браузере), а код лежит в репозитории на GitHub — так что любой желающий может присоединиться к команде.
Будем рады, если найдем тут неравнодушных к симуляторам программирования. Пополняйте ряды, вместе грызть друг друга веселей. Thanksssss.
Бонус: новая книга для тех, кто хочет достичь нирваны в воспитании змей-чемпионов :)