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


scr_genMaze.gml и scr_drawMaze.gml

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

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

Maze

Скачать "scr_genMaze.zip"
Скачать "scr_drawMaze.zip"

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