Просмотрите каждого из ближайших соседей этой ячейки. Мы будем называть их “east ”, “west ”, “north ”,
и “south ”. Добавьте любого соседа, который никогда не был посещен, в массив neighbors. Если любой из соседей был посещен один раз, то они не добавляются в этот массив.
6. Случайным образом выберите соседа из массива neighbors. Если массив neighbors пуст (это говорит о том, что все соседи были посещены), то перейдите на шаг 9. Иначе продолжайте с шага 7.
7. Перейдите на этого случайного соседа, опуская стену между текущей ячейкой и соседней ячейкой.
8. Сделайте эту соседнюю ячейку текущей ячейкой и добавьте ее в массив visitedList. Вернитесь к шагу 5.
9. Перейдите к предыдущей ячейке в массиве visited, удаляя ячейку, в которой вы находитесь в настоящий момент из массива visitedList. Вернитесь к шагу 5.
Иллюстрации ниже представляют пример, как можно было бы создать лабиринт 3 на 3.
X=CURRENT CELL
X=ТЕКУЩАЯ ЯЧЕЙКА
*=UNVISITED NEIGHBOR
*=НЕПОСЕЩЕННЫЙ СОСЕД
Применение ActionScript для создания совершенного лабиринта
Теперь, когда вы имеете хорошее понимание алгоритма, давайте посмотрим, как он может быть написан на ActionScript. Если вы действительно понимаете этот алгоритм (который вы, вероятно, можете реализовать без больших проблем), и если вы имеете устойчивые навыки в ActionScript, вы должны быть способны написать код ActionScript этого алгоритма самостоятельно. Но, на всякий случай, если вы не хотите пробовать делать это, мы сделаем это за вас.
Откройте файл maze.fla в папке Chapter09. Применяя команду Test Movie, посмотрите получившийся файл SWF. Если вы инициализируете SWF несколько раз, вы сможете увидеть, что лабиринт каждый раз отличается – всегда совершенный и всегда уникальный. Также обратите внимание, что в верхней левой ячейке находится точка. Вы можете перемещать эту точку через лабиринт, используя кнопки перемещения на вашей клавиатуре.
В файле maze.fla есть три слоя: Object Definition, Implementation, и Assets