МЭЙЗ
Как сделать лабиринт ?
Почти все в своей жизни решали или хотя бы пробовали решить лабиринт. А вот у вас никогда не было вопроса, а кто их делает-то? Есть ли реальная работа по созданию лабиринтов? Если есть, то сколько за неё платят? На эти вопросы я отвечать не собираюсь, скажу лишь, что если бы были такие вакансии, я бы за них поборолся. Дело в том, что существует уйма алгоритмов по автоматической генерации лабиринтов, поэтому моя новая работа превратилась бы в пассивный доход, где я ничего толком не делаю.
В данной статье я разберу один из алгоритмов. Примерный перевод названия “Рекурсивный поиск с возвратом”. Он безумно простой. Представьте, что вы прокладываете лабиринт. Выбрав этот алгоритм, вы будете идти куда захотите, то тех пор, пока не заблудитесь, а как только попадёте в тупик, то сделаете пару шагов назад и опять “пойдёте куда глаза глядят”.
А теперь представьте, что это всё делает программа =)
А конкретно как ?
Будущий лабиринт состоит из клеток с четырьмя стенами у каждой. Вам нужно отслеживать, на каких клетках вы уже были, а на каких не были. Собственно алгоритм:
- Клетку начала лабиринта пометьте как посещённую и нынешнюю.
- Пока есть непосящённые клетки:
- Если нынешняя клетка имеет соседние непосещённые клетки:
- Выберите случайную из них.
- Внесите в стэк нынешнюю клетку.
- Уберите стену между нынешней и выбранной клеткой.
- Сделайте выбранную клетку нынешней.
- Иначе, если в стэке есть клетки:
- Возьмите последнюю клетку из стэка.
- Сделайте её нынешней.
Вот. Сделать лабиринт очень не сложно =)
Рабочая версия