MVP моей мобильной 2D игры RabbitLabirint

Это логическая 2D игра, в которой игрок управляет кроликом. Игра разрабатывалась для платформы Android с использованием движка Unity.

Видео с демонстрацией игры

Показ игры, меню, геймплея

Цели игры

Игрок управляет кроликом, который должен:

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

Управление

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

Настройки игры

Игра позволяет:

  • регулировать громкость (общая, музыка, эффекты)
  • удалять процесс прохождения

Уровни

Игра разбита на уровни. Каждый последующий уровень доступен после прохождения текущего. За прохождение уровня начисляются звезды от 1 до 3. Уровни можно перепроходить. Сохраняется только лучшее прохождение уровня: если игрок получил сначала 2 звезды, а при повторном прохождении — 1 звезду, то в сохранении остаются результат с 2 звездами. Если после этого игрок прошел уровень на все 3 звезды, то результат прохождения будет переписан и сохранится результат с 3 звездами.

Другое

Вся графика была нарисована мной. Звуки взяты из бесплатных источников. Автор музыки указан на главном экране и экране About.

О реализации

Конечные автоматы используются для управления игрой и игроком. У конечных автоматов игры есть 3 состояния: загрузка, игра и игра окончена. Конечный автомат игрока имеет 7 состояний.

Game Manager

Диспетчер игр (Game manager) — это конечный автомат, который будет переключаться между состояниями в соответствии с текущим состоянием игры. Он имеет 3 состояния:

  1. Loadout state — при запуске игры. Откроется главное меню и настройки.
  2. Game state — при переходе в это состояние уровень загружается. Именно в этом состоянии происходит сам игровой процесс.
  3. Gameover state — переход в это состояние осуществляется при проигрыше игрока.

Level Manager

Игра проходит в пределах 1 сцены. Уровнями управляет менеджер уровней (Level manager). У каждого уровня есть свой префаб (prefab).

PlayerController

PlayerController — это конечный автомат. Он имеет 7 состояний:

  1. Empty (пустое) — начальное состояние, когда нам не нужно выводить игрока на сцену и управлять им. Спрайт игрока не отображается.
  2. Idle (в режиме ожидания) — отображается спрайт игрока. Ждем нажатия на экран, чтобы нарисовать возможные пути для игрока.
  3. Waiting (ожидание) — отображается спрайт игрока. Отрисовка возможных путей для игрока и ожидание касания, чтобы вычислить цель, к которой будет двигаться игрок.
  4. Moving (движение) — отображается спрайт игрока. Перемещение игрока к выбранной цели.
  5. Attacked (атакован) — отображается спрайт игрока. Игрок переходит в это состояние, когда на игрока напал враг.
  6. Finishing (завершение) — отображается спрайт игрока. Переход в это состояние после завершения движения (moving). Проверка финиша и количества оставшихся шагов.
  7. Finished (законченный) — отображается спрайт игрока. Состояние игрока после успешного прохождения уровня.
Схематичное изображение состояний и переходов

PlayerData

Ход прохождения и настройки сохраняется локально в бинарном файле (*.bin). Для этого используется класс PlayerData. Локальное хранилище используется только потому, что это MVP, а не полноценная игра. Для публикации (если это когда-нибудь произойдет с этой игрой) буду использовать другие типы хранилищ данных.

На данный момент сохранены следующие данные:

  • версия (используется для управления чтением данных)
  • громкость (общая, музыка, эффекты)
  • пройденные уровни и их результаты
  • текущий уровень

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

Плитки для дорог, с использованием правил для отрисовки (Road rule tile)

Чтобы добавить дороги на уровень, были нарисованы спрайты, а затем они были добавлены в Road rule tile (плитка, которая отрисовывает спрайт в зависимости от заданных правил).

Правила для плитки

Скриншоты игры

Контакты