Я использовал подход, который другие называли «муравьями» для создания случайной местности. Описание используемого подхода:
Сначала я сгенерировал карту тайлов, используя двумерный прямоугольный массив (x, y) специализированного класса тайлов. Класс плиток содержит информацию, относящуюся к плиткам, такую как точка рисования и тип местности.
Затем я создал специальный класс "муравей", который можно рассматривать как невидимую сущность, которая совершает "шаги" по карте тайлов. Каждый раз, когда муравей перемещается на новую плитку, тип базовой местности меняется. Муравей может двигаться в 8 направлениях, и он меняет направление каждый раз, когда перемещает одну плитку. Направление, которое требуется после каждого шага, является случайным.
Я порождаю фиксированное или случайное количество муравьев с фиксированным или случайным количеством времени жизни. Время жизни - это количество плиток, которые оно может пересечь / шагнуть до того, как будет удалено.
Чтобы иметь возможность контролировать тип местности, я создаю массив типа местности. Этот массив содержит список типов местности (в основном просто int). Чтобы получить равный баланс между всеми типами ландшафта, вы добавляете только один из каждого типа ландшафта в массив типов ландшафта. Если вы хотите, чтобы определенный тип местности был более распространенным, вы бы добавили в массив дополнительные записи с этим конкретным типом местности.
Затем, когда муравью нужно определить, какую местность изменить, вы выполняете поиск в массиве типов местности, используя случайное целое число в качестве индекса массива.
Требуется немного доработать параметры (количество муравьев, время жизни муравьев, массив типов ландшафта), но пока я достигаю действительно хороших ландшафтов.
Это может быть дополнительно улучшено за счет использования более сложных типов классов муравьев, которые, например, используются в специализированных шаблонах и т. Д. Для создания надежных островов в океане вы, вероятно, захотите изменить поведение муравья, чтобы они имели некоторые ограничения условия, по которым можно двигаться (чтобы случайно не получить длинные «шипы» земли, очень рассредоточенные маленькие острова и т. д.).
Ниже приведен пример тайла карты леса, который сгенерирован процедурно небольшим приложением, которое я создал с использованием подхода ant. Надеюсь, это поможет вам!
Исходный код приложения (VB.NET) можно получить по адресу Github
.