Дано подземелье, состоящее из комнат, соединённых между собой дверьми. Подземелье имеет следующие характеристики:
- Все комнаты квадратной формы.
- Каждая комната может быть или тупиковой (то есть иметь всего одну дверь, через которую пользователь может войти и выйти), или содержать ещё хотя бы одну дверь, ведущую в другую комнату.
- Подземелье проходимо (всегда есть маршрут к выходу).
- Протяжённость подземелья произвольная.
Существует персонаж, у которого есть изменяемое количество очков.
- Счёт не может стать отрицательным.
- Персонаж может перемещаться сквозь дверь в любую прилегающую комнату и обязательно взаимодействует с её содержимым, если оно есть.
Комнаты бывают следующих типов.
- Комната, где стоит сундук с сокровищем. Добавляет к счёту игрока случайное количество очков. Сундук может иметь 3 степени редкости, от которых зависят диапазоны очков, которые он даёт.
- Комната с монстром. При победе над монстром игрок получает количество очков, равных силе монстра. Бой происходит путём генерации случайного числа и его сравнения с величиной силы монстра. Если число больше силы, монстр побеждён и игрок получает очки. Если меньше или равно, сила монстра уменьшается и раунд повторяется до тех пор, пока монстр не будет побеждён. Монстры могут быть разных типов. Тип влияет на диапазон стартовой силы монстра и величину, на которую уменьшается сила в случае неудачного раунда.
- Пустая комната.
- Посещённая комната, в которой игрок уже взаимодействовал с объектом. Считается пустой.
Используя ООП, напишите на PHP код API, который обрабатывает игровой сценарий:
- Загружает извне информацию о подземелье в некотором формате.
- Помещает игрока в стартовую комнату.
- Обрабатывает перемещения игрока (вводятся извне), до тех пор пока игрок не достигнет выхода.
- Сохраняет итоговые очки игрока после выхода.
- Генерировать подземелье не надо.
- Считаем, что одновременно активно 1 подземелье и его проходит 1 пользователь.
Методы:
set-entities-info.php
- Получение информации об игровых сущностях из POST-запроса, сохранение информации в файл.set-dungeon-info.php
- Получение информации о строении подземелья из POST-запроса, сохранение информации в файл.start-game.php
- Начало игры: получение первого хода из POST-запроса, создание персонажа и поля, обработка первого хода, сериализация и сохранение игровой информации.next-move.php
- Обработка хода, выбрасывание исключения в случае некорректности хода.get-final-points.php
- Обработка запроса финального количества очков.