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

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

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

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

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

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

1
Ответить

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

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


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

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

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

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

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


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


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

Ответить

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

Ответить

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

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

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

Ответить

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

Ответить

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

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

Ответить