Forgotten Heaven - Алгоритм Эллера на ActionScript 3.0
Алгоритм Эллера на ActionScript 3.0


Eller.as

Алгоритм Эллера - алгоритм, позволяющий создавать лабиринты, не имеющие замкнутых областей и "комнат", состоящих из нескольких ячеек.

За теоретическую основу была взята статья "Алгоритм Эллера для генерации лабиринтов", представляющая собой топик-перевод статьи "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);
В результате будет выведено изображение следующего вида:

Maze


Ниже приведён пример использования этих методов.
Клавиша "пробел" - перегенерировать лабиринт
Клавиши "влево" и "вправо" - изменить размерность лабиринта по ширине
Клавиши "вверх" и "вниз" - изменить размерность лабиринта по высоте


Скачать "Eller.zip"

© KMK, 2004—
Яндекс.Метрика