Skip to content

Labyrinths#1

Open
shuuuurik wants to merge 10 commits intomasterfrom
hw2-labyrinths-dev
Open

Labyrinths#1
shuuuurik wants to merge 10 commits intomasterfrom
hw2-labyrinths-dev

Conversation

@shuuuurik
Copy link
Copy Markdown
Owner

Реализована консольная программа для генерации и решения лабиринтов согласно требованиям технического задания.
Приложение поддерживает выбор алгоритмов генерации и поиска пути, работу через CLI, а также вывод или сохранение результатов в файл.
Визуализация лабиринта и найденного пути осуществляется с помощью символьной графики (#, ., O, X).

Функциональные требования

  • Реализованы два алгоритма генерации лабиринтов:
    • метод поиска в глубину (DFS) — класс DepthFirstGenerator
    • алгоритм Прима — класс PrimGenerator
  • Реализованы два алгоритма поиска пути из заданной начальной точки O в конечную точку X:
    • Дейкстры — класс DijkstraSolver
    • A* — класс AStarSolver (используемая эвристика - манхэттенское расстояние)
  • Конфигурация лабиринта, начальная и конечная точки передаются через CLI.
  • Результат генерации или решения может быть выведен в консоль либо сохранён в файл.
  • При невозможности построить путь программа корректно возвращает пустое решение.

Нефункциональные требования

  • Код имеет модульную структуру:
    • dto — базовые сущности (Maze, Point, Path, CellType, WallStyle);
    • generator — алгоритмы генерации;
    • solver — алгоритмы поиска пути;
    • render — различные рендеры лабиринтов (с отображением пути / без; simple / pretty стиль лабиринта с псевдографикой)
    • utils — вспомогательные классы (чтение и отрисовка лабиринтов, ...)
  • Используется библиотека picocli для CLI-интерфейса.
  • Обеспечена корректная обработка ошибок:
    • некорректные размеры лабиринта;
    • неверные координаты точек;
    • отсутствие или повреждение входных файлов.
  • Код снабжен Javadoc-комментариями, которые содержат документацию по использованию, а также описание алгоритмов генерации и решения лабиринта.

Тестирование

  • Написаны модульные тесты для проверки основных сценариев:
    • корректность валидации точек старта и финиша;
    • решение простых лабиринтов с известным путём;
    • поведение при недостижимом финише;
    • связность и корректность найденного пути.
  • Тесты решателей в пакете src/test/java/academy/maze/solver.

Дополнительные требования

Расширенные поверхности лабиринта и учет их при построении маршрута

  • Реализованы новые типы проходимых поверхностей (CellType):
    • обычное покрытие PATH (стоимость прохода 1, символ - ' ');
    • монетка COIN (0, '©');
    • песок SAND (2, '▒');
    • болото SWAMP (3, '≈').
  • Добавлена поддержка их генерации через новую опцию --surfaces (или -s).
  • Алгоритм Дейкстры корректно учитывает стоимость различных поверхностей при поиске маршрута. Алгоритм A* работает некорректно с разными типами поверхностей, так как требует подбора допустимой эвристической функции (манхэттенское расстояние для этой задачи некорректно).

Псевдографика с Unicode-символами

  • Лабиринт можно генерировать в псевдографике с использованием Unicode-символов стен с помощью нового флага --pretty (или -p).
  • Команда solve автоматически определяет, какие стены использовать: если в исходном файле есть хотя бы один Unicode-символ стены, лабиринт выводится в Unicode-стиле; иначе используется ASCII-стиль.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant