neural-things

Игра “Поезда”

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

Суть игры: есть игровое поле, на нём расположены рельсы и другая инфраструктура (стрелки, семафоры). На рельсах могут стоять поезда, состоящие из локомотива и прицепленных к нему вагонов. Локомотив всё время едет вперёд, если впереди нет запрещающего сигнала семафора. Игрок не может управлять локомотивом, зато он может переключать стрелки и семафоры. Также игрок может перестраивать рельсы (убавлять и добавлять), ставить новые стрелки и семафоры. Цель игры: не допустить крушения поезда. Поезд рушится, когда кончаются рельсы или он врезается в другой поезд.

Реализация

Шаг 1

Для начала надо написать симулятор движения поезда. Игровое поле поделено на квадратные клетки. Каждая клетка бывает определённого типа: [ ] - пустая клетка [-], [|], [/], [] - клетки с рельсами (нужно реализовать все комбинации) [Y] - стрелка (тоже все комбинации). У стрелки есть два состояния: выбран один пусть или другой. Это отображается визуально (при взгляде на стрелку должно быть понятно, куда поедет поезд). Поверх клетки с рельсами может стоять семафор. У семафора бывает два состояния: открыт и закрыт (что отображается визуально). Поезд изначально стоит на рельсах. Он начинает движение сразу, как только начинается игра. Движение каждого вагона зависит от типа клетки, на которой он стоит и от состояния клетки (если это стрелка) и от состояния семафора. На первом этапе графику не реализуем, можно отображать локомотив и вагоны просто в виде эмодзи поезда и вагона, а сами рельсы в виде линий. Поезд едет до тех пор, пока есть рельсы и есть разрешающий сигнал семафора. Если поезд выкатывается на клетку без рельс, он рушится, игра заканчивается. При окончании игры надо показать баннер “GAME OVER! Wanna play again” с кнопкой “Play”. При нажатии на эту кнопку игра ресетится и начинается сначала (с сохранением карты дорожной сети).

Шаг 2

Реализуем интерактивность. При клике на клетку с семафором, его состояние меняется на противоположное. При клике на стрелку её состояние меняется (выбирается другой путь). Обработка нештатных ситуаций: если поезд проходит стрелку, а в это время её переключили, поезд рушится, игра заканчивается. Если поезд проходит семафор, а состояние семафора поменялось, поезд не обращает на это внимания. Влияет только семафор, который стоит спереди головы поезда, в 1-2 клетках спереди.

Реализуем графику. Нужно взять предложенные спрайты локомотива, вагонов,рельсов и семафора. Игровое поле следует заполнить случайными фигурами зелёного цвета (цвет должен немного отличаться). Картинку фона надо закешировать, чтобы не генерировать её на каждом кадре.

Шаг 3

Реализуем перестраивание дорожной сети. Надо реализовать панель инструментов. В этой панели игрок может выбрать, какой блок добавить на игровое поле (рельсы, стрелку, семафор). Нельзя добавить рельсы или стрелку на клетку, где уже что-то есть. Можно добавить семафор на клетку, где есть рельсы и стрелка. Также у игрока есть возможность удалить всё с клетки, тогда она становится пустая.

Редактор уровней. В игре есть скрытый режим (активируется при нажатии кнопки ~ на клавиатуре). При переходе в этот режим игра останавливается, но панель инструментов видна. Можно совершать любые изменения на игровом поле без ограничений, удалять и добавлять что хочется. При выходе из этого режима по нажатию ~ в консоль выводится слепок игрового поля (JSON.serialize), этот слепок будет использован на следующем этапе.

Шаг 4

Надо реализовать разные уровни в игре. Каждый уровень представляет собой как бы головоломку, нужно доехать до определённой точки на игровом поле. Назовём эту клетку “выход”. Эта точка - ещё один модификатор клетки (как семафор, только без состояния), это должно быть отражено графически (скажем, эта клетка более зелёная). Уровень хранится в виде массива игрового поля, начальных координат вагонов и наличного количества рельсов, стрелок и семафоров. Количество рельсов, стрелок и семафоров ограничено настройками уровня.

При попадании на клетку “выход” игрок видит баннер с заработанными очками. Очки представляют собой сумму неизрасходованных рельсов/стрелок/семафоров (обсудим в процессе реализации) + бонус за прохождение уровня (100 очков). На баннере есть кнопка “NEXT LEVEL”, при нажатии на которую отображается следующий уровень из списка, игра ресетится.

Для усложнения игры при каждом повышении очков на 100 единиц у поезда добавляется ещё один вагон.