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