Алгоритм Эллера - алгоритм, позволяющий создавать лабиринты, не имеющие замкнутых областей и "комнат", состоящих из нескольких ячеек.
За теоретическую основу была взята статья "Алгоритм Эллера для генерации лабиринтов",
представляющая собой топик-перевод статьи "Eller's Algorithm".
Результатом осмысления статьи оказался класс "Eller.as" - довольно громоздкий и неуклюжий быдлокод, что, впрочем, никак не отразилось на его работоспособности.
Публичные методы класса "Eller.as" представлены ниже.
Метод первый:
public function genMaze (_mazeW:Number, _mazeH:Number):Array
Метод случайным образом генерирует двумерный массив [_mazeW] x [_mazeH], элементами которого могут быть 0, 1, 2 или 3.
_mazeW - количество столбцов массива;
_mazeH - количество строк массива;
0 - у ячейки нет ни правой ни нижней стенки [ ]
1 - у ячейки есть правая стенка, но нет нижней [ |]
2 - у ячейки нет правой стенки, но есть нижняя [__]
3 - у ячейки есть и правая стенка и нижняя [_|]
Пример использования:
var eller:Eller = new Eller();
var maze:Array;
maze = eller.genMaze(5, 4);
В результате, переменной maze будет присвоен массив следующего вида:
0 2 1 0 2
1 0 0 3 0
1 1 1 0 2
0 1 0 0 0
что графически можно представить так:
__________
| __ | __|
| | _| |
| | | | __|
|___|______|
Метод второй:
public function drawMaze (_container:Sprite, _maze:Array,
_scale:Number = 50, _space:Number = 10,
_thLine:Number = 9, _thBorder:Number = 9, _thGrid:Number = 1,
_colorLine:Number = 0x000000, _colorBorder:Number = 0x000000,
_colorGrid:Number = 0xA0A0A0):void
Метод отрисовывает лабиринт, заданный двумерным массивом из элементов 0, 1, 2 или 3.
_container - куда выводить
_maze - что выводить
_scale - размер клетки
_space - отступ от края
_thLine - толщина линий стенок
_thBorder - толщина линий границ
_thGrid - толщина линий сетки
_colorLine - цвет стенок
_colorBorder - цвет границ
_colorGrid - цвет сетки
Пример использования:
eller.drawMaze (this, maze, 50, 10, 6, 8, 1, 0x550000, 0x005500, 0x000055);
В результате будет выведено изображение следующего вида:
Ниже приведён пример использования этих методов.