Если northWall[i][j] равно 1, то это означает, что ячейка [i,j] имеет сплошную стену сверху; в противном случае данная стена отсутствует. Нулевая строка является фиктивной строкой из ячеек, находящихся под лабиринтом, причем ее северные стены формируют нижний край лабиринта. Подобным же образом посредством eastWall[i][0] задаются любые проходы на левом краю лабиринта.

Цена на гидроизоляцию полимочевиной. Напыляемая гидроизоляция из полимочевины цена. заготовки ключей продам.

Создание лабиринта. Задайте сначала все стены сплошными, так чтобы лабиринт имел вид простой сетки из горизонтальных и вертикальных прямых линий. Программа нарисует эту сетку. Затем в произвольно выбранную ячейку помещается некая невидимая «мышь», чья работа заключается в том, чтобы «прогрызать» стены для соединения смежных ячеек. Эта мышь проверяет четыре соседних ячейки (верхнюю, нижнюю, левую и правую) и для каждой из них выясняет, все ли четыре стены у нее сплошные. Если это не так, то данный элемент ранее уже посещался и, следовательно, уже находится на каком-то пути. Может случиться так, что мышь найдет несколько вариантов ячеек, которые еще не посещались. Она выбирает одну из них случайным образом и прогрызает стену, соединяющую ее с этим элементом, а координаты других вариантов записываются в стек. Прогрызенная стена стирается, а мышь повторяет указанный процесс. Когда мышь попадает в тупик - в окружение посещенных ячеек, - она выталкивает из стека непосещенную ячейку и продолжает свое дело. Если стек пуст, то все ячейки лабиринта уже посещены. «Начальная» и «конечная» ячейки выбираются произвольно, наиболее вероятно на одном краю лабиринта. Очень интересно следить за динамикой создаваемого лабиринта, когда мышь прогрызает его стены. (Вопрос: Не лучше ли для записи вариантов ячеек использовать очередь (queue) вместо стека? Как это повлияет на порядок, в котором создаются последующие пути?)

2.7. Дополнительная литература Работа с лабиринтом. Для прохождения лабиринта мы использовали алгоритм с отходом («Ьаск-tracking» algorithm - «поиск с возвратом»). На каждом шаге мышь пытается двигаться в случайном направлении. Если стена отсутствует, мышь записывает ее координаты в стек и перемещается в следующую ячейку. Ячейку, где находится мышь, можно отметить красной точкой. Когда мышь попадает в тупик, она может изменить цвет ячейки на синий и вернуться назад, вытолкнув данные из стека. Мышь может даже построить стену, чтобы больше никогда не пытаться пройти в тупиковую ячейку.


⇐ Предыдущая| |Следующая ⇒