dungeon-game-api

Содержание


Условие

Дано подземелье, состоящее из комнат, соединённых между собой дверьми. Подземелье имеет следующие характеристики:

  1. Все комнаты квадратной формы.
  2. Каждая комната может быть или тупиковой (то есть иметь всего одну дверь, через которую пользователь может войти и выйти), или содержать ещё хотя бы одну дверь, ведущую в другую комнату.
  3. Подземелье проходимо (всегда есть маршрут к выходу).
  4. Протяжённость подземелья произвольная.

Существует персонаж, у которого есть изменяемое количество очков.

  1. Счёт не может стать отрицательным.
  2. Персонаж может перемещаться сквозь дверь в любую прилегающую комнату и обязательно взаимодействует с её содержимым, если оно есть.

Комнаты бывают следующих типов.

  1. Комната, где стоит сундук с сокровищем. Добавляет к счёту игрока случайное количество очков. Сундук может иметь 3 степени редкости, от которых зависят диапазоны очков, которые он даёт.
  2. Комната с монстром. При победе над монстром игрок получает количество очков, равных силе монстра. Бой происходит путём генерации случайного числа и его сравнения с величиной силы монстра. Если число больше силы, монстр побеждён и игрок получает очки. Если меньше или равно, сила монстра уменьшается и раунд повторяется до тех пор, пока монстр не будет побеждён. Монстры могут быть разных типов. Тип влияет на диапазон стартовой силы монстра и величину, на которую уменьшается сила в случае неудачного раунда.
  3. Пустая комната.
  4. Посещённая комната, в которой игрок уже взаимодействовал с объектом. Считается пустой.

Задача

Используя ООП, напишите на PHP код API, который обрабатывает игровой сценарий:

  1. Загружает извне информацию о подземелье в некотором формате.
  2. Помещает игрока в стартовую комнату.
  3. Обрабатывает перемещения игрока (вводятся извне), до тех пор пока игрок не достигнет выхода.
  4. Сохраняет итоговые очки игрока после выхода.

Пояснения

  1. Генерировать подземелье не надо.
  2. Считаем, что одновременно активно 1 подземелье и его проходит 1 пользователь.

Описание решения

Методы:

  • set-entities-info.php - Получение информации об игровых сущностях из POST-запроса, сохранение информации в файл.
  • set-dungeon-info.php - Получение информации о строении подземелья из POST-запроса, сохранение информации в файл.
  • start-game.php - Начало игры: получение первого хода из POST-запроса, создание персонажа и поля, обработка первого хода, сериализация и сохранение игровой информации.
  • next-move.php - Обработка хода, выбрасывание исключения в случае некорректности хода.
  • get-final-points.php - Обработка запроса финального количества очков.