Одна ячейка существует; она находится в массиве visited. Мы можем выполнить цикл while до тех пор, пока переменная cellsVisited равна totalCells (строка 13). Когда cellsVisited равна totalCells, лабиринт завершен.
В строке 14 мы создаем ссылку на объект, который представляет текущую ячейку. Строки 15-51 выполняют шаг 5 из вышеописанного алгоритма: создают массив neighbors. Затем мы проверяем направления west, north, east, и south текущей ячейки для ячеек, которые еще не были посещены. Если мы находим одну подходящую ячейку, мы добавляем ее к массиву neighbors. Когда она добавлена в массив neighbors, мы сохраняем строки с именами стены в каждой ячейке, которая была бы сломана, если бы мы выбрали для посещения эту ячейку. Например, для соседа на востоке мы храним строку значений «east» и «west». Это означает, если мы выбираем для посещения эту ячейку, то мы ломаем восточную стену в текущей ячейке и западную стену в соседней ячейке. Внешне это та же стена, но в коде каждой ячейки содержится информация о ее собственных стенах.
В строке 53 мы начинаем шаг 6. Если массив neighbors не пуст, то мы случайным образом выбираем соседа (строка 54); в противном случае, мы отступаем на шаг в массиве visitedList (строки 70-73). Наконец, когда случайный сосед выбран, мы выполняем шаги 7 и 8 из алгоритма выше, а также должны сделать следующее:
1. Создать объект для этой соседней ячейки.
2. Ломаем стены между текущей ячейкой и соседней ячейкой.
3. Увеличиваем на 1 переменную cellsVisited.
4. Назначаем соседнюю ячейку текущей ячейкой.
Это все сделано в строках 54-69. Как упоминалось выше, если в массиве neighbors не было элементов, то мы перемещаемся к строкам 70-73, где мы отступаем к предыдущей ячейке.
Я надеюсь, вы согласитесь, что, несмотря на длину скрипта, он вовсе не сложен, правда?
Визуальная реализация совершенного лабиринта
Мы не собираемся препарировать код ActionScript, находящийся в слое Implementation. Однако, я кратко опишу, что он делает