Лабиринты

Описание

В данном варианте предлагается реализовать систему генерации и прохождения двумерных лабиринтов.

Для генерации лабиринтов существует множество алгоритмов. Одним из самых простых для реализации на функциональном языке является алгоритм рекурсивного деления.

Работа алгоритма состоит в следующем:

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

Генерация лабиринта.

Минимальные требования (базовая часть)

Базовая реализация проекта, в которой должны разбираться все участники, должна включать:

  • генерацию лабиринта и визуализацию этого процесса;
  • интерфейс для прохождения сгенерированного лабиринта (управление игроком);
  • сохранение и загрузка лабиринтов из файла.

Выбор из нескольких заранее подготовленных лабиринтов не считается генерацией.

Расширенный интерфейс (индивидуальная часть)

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

  • настройки размеров лабиринта;
  • выбор алгоритма генерации;
  • таймер прохождения лабиринта;
  • запуск автоматического решателя;
  • подсказки (например, показать следующие несколько шагов);
  • и т.д.

Автоматическое прохождение лабиринта (индивидуальная часть)

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

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

Работа с базой данных (индивидуальная часть)

Модуль для работы с базой данных должен предоставлять хотя бы 2 различных возможности:

  • таблица рекордов;
  • сохранения игровых сессий;
  • база лабиринтов;
  • и т.д.