Алгоритм Эллера - алгоритм, позволяющий создавать лабиринты, не имеющие замкнутых областей и "комнат", состоящих из нескольких ячеек.
За теоретическую основу была взята статья "Алгоритм Эллера для генерации лабиринтов",
представляющая собой топик-перевод статьи "Eller's Algorithm".
Результатом осмысления статьи оказалось написание двух скриптов "scr_genMaze.gml" и "scr_drawMaze.gml", служащих для генерации и вывода лабиринта.
Описание скриптов представлено ниже.
scr_genMaze.gml
scr_genMaze(argument0, argument1);
Скрипт случайным образом генерирует двумерный массив [argument0] x [argument1], элементами которого могут быть 0, 1, 2 или 3.
argument0 - количество столбцов массива;
argument1 - количество строк массива;
0 - у ячейки нет ни правой ни нижней стенки [ ]
1 - у ячейки есть правая стенка, но нет нижней [ |]
2 - у ячейки нет правой стенки, но есть нижняя [__]
3 - у ячейки есть и правая стенка и нижняя [_|]
Пример использования:
randomize();
var maze = scr_genMaze(5, 4);
В результате, переменной maze будет присвоен массив следующего вида:
0 2 1 0 2
1 0 0 3 0
1 1 1 0 2
0 1 0 0 0
что графически можно представить так:
__________
| __ | __|
| | _| |
| | | | __|
|___|______|
scr_drawMaze.gml
scr_drawMaze(argument0, argument1, argument2,
argument3, argument4, argument5,
argument6, argument7, argument8, argument9);
Скрипт отрисовывает лабиринт, заданный двумерным массивом из элементов 0, 1, 2 или 3.
Этот скрипт имеет смысл использовать только в событии рисования объекта "Draw Event".
argument0 - что выводить
argument1 - размер клетки
argument2 - положение левой верхней точки вывода по оси X
argument3 - положение левой верхней точки вывода по оси Y
argument4 - толщина линий стенок
argument5 - толщина линий границ
argument6 - толщина линий сетки
argument7 - цвет стенок
argument8 - цвет границ
argument9 - цвет сетки
Пример использования:
scr_drawMaze(maze, 50, 5, 5, 6, 8, 1, c_maroon, c_green, c_navy);
В результате будет выведено изображение следующего вида: