Каков алгоритм генерации лабиринта в игре Netwalk? - PullRequest
6 голосов
/ 07 июля 2011

Что такое алгоритм генерации лабиринта в игре Netwalk ?

Netwalk game screenshot

1 Ответ

15 голосов
/ 07 июля 2011

Исходный код доступен в Google Code, так что вы можете прочитать его сами и узнать!Лабиринт генерируется функцией generate_maze в game.c, строки 78ff.


Обновление: попробуйте демонстрацию!

Netwalk генерирует лабиринт, выполняя рандомизированную версию Алгоритм Прима , чтобы найти минимальное остовное дерево .Алгоритм Прима итеративно выращивает дерево один раз за раз, начиная с исходного узла (или узлов: в данном случае «сервер», темно-синий прямоугольник двойной высоты).В любой момент выполнения алгоритма структура данных выглядит примерно так:

enter image description here

Ячейки, окрашенные в зеленый цвет, являются ячейками на кончиках растущих ветвей: ониеще есть хотя бы один пустой сосед, в которого они могли бы вырасти.На каждом шаге алгоритм выбирает одну из этих зеленых ячеек, а затем выбирает одного из своих пустых соседей (1) и добавляет ответвление к этому соседу.Эта новая ветвь блокирует соседние ветви от растущих в своем направлении.Когда у ветви больше нет пустых соседей (2) , тогда она удаляется из списка зеленых ячеек.

В конечном итоге зеленый список пуст: ни одна из ветвей сети не имеетникаких пустых соседей.Это означает, что плата заполнена, и каждая ячейка подключена к серверу по одному пути.

enter image description here

[Я идеализировал детали в нескольких местах: (1) на самом деле алгоритм Netwalk немного наивен и просто выбирает случайное направление, и если сосед в этом направлении не пуст, он ничего не делает и переходит к следующей итерации.(2) Ветви без пустых соседей своевременно не обнаруживаются: они удаляются из зеленого списка, только если они выбраны.Демонстрация исправляет эти незначительные ошибки.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...