Генерация подземелий на Python

Генерация подземелий на Python

Несколько вечеров проверял идею генерации космических баз. Космическая база в итоге не получилась, а вот на добротное подземелье результат похож. Поскольку шёл от простого к сложному и никакой суровой магии не делал, то решил переработать код в урок по генерации подземелий на Python.

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

9
6 комментариев

Каким условиям должен соответствовать лабиринт чтобы быть космической базой? По вашему мнению. И почему не получилось?

1

Сложно точные критерии назвать, если бы я их знал, может быть получилась бы база :-)

Примерно так:


- Структура должна расходиться (достраиваться) из какого-то центрального блока.

- При отдалении от цетра, блоки должны уменьшаться.
- Возможно, структура должна быть фрактальной (например, всё расходится из центрального блока, на каком-то расстоянии от него образуются новые «подцентральные блоки»). Возможно, этого эффекта можно достичь варьируя количество шлюзов в комнатах.

- Должны более явно выделяться шлюзы и / или сам каркас, на котором держатся блоки.

- Должны быть некие признаки подвижности (приспособленности к вращению самой базы или её частей).

- Скорее всего, базовые элементы не должны быть прямоугольными (лучше округлыми, острыми и т.п.).


В целом, космическая база должна выглядеть более функциональной, чем подземелье. Каждый блок должен за что-то отвечать, а значит иметь некоторые уникальные признаки, характерные для его типа.


А может быть достаточно сделать стилизацию нужную: чёрный фон со звёздами, неоновые контуры и тому подобное.

Было бы пушкой, если бы сам код был побогаче прокомментирован.

Я не придумал что в комментарии такого записать можно, чтобы полезно было. Там дифы между шагами небольшие, а конкретные алгоритмы указаны в посте.

Хотя итоговый код, конечно, сходу может быть сложно воспринимать. 

Если в каком-то месте непонятно — спрашивайте. Объясню и добавлю коментарии. А лучше делайте pull request :-D

Комментарий недоступен

Развивать тему этого поста не планирую. Это просто артефакт моих вечерних экспериментов.

Если вдруг ещё что-то интересное сделается, то обязательно напишу. Собственно, в блог я и пишу о том что сделал, прочитал или надумал.