Простая карта, четыре биома и как их распределить

16

Вот основная идея: у меня есть игра Rogue-ish, возможно, Dwarf Fortress-ish, со случайно сгенерированным миром и несколькими входами в подземелья, разбросанными вокруг него. У меня уже есть подземелья в основном покрыт, но я застрял на аспекте надземных.

Указанный надземный мир, рассматриваемый как двумерная карта экранов, должен иметь распределение, похожее на блоб, с четырьмя различными темами или биомами - луга, пустыня, снег и болото, каждая из которых имеет общее количество экранов. Скажем, карта 8x8, которая дает 64 уникальных экрана. Половина из них может быть лугами, четвертью пустыни, а болото и снег - по четверти:

макет возможной карты мира с городами и стартовой локацией, но без входов в подземелье

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

Лучшее, что я мог получить, это какие-то змеиные формы, и достаточно часто с бессмысленными комбинациями, такими как пустыня, пробирающаяся по снегу (или наоборот). Я не могу понять, как сделать его красивым и пустым, не говоря уже о том, чтобы это имело климатический (?) Смысл. Итак, как мне создать карту биома, как в макете?

Ладно, по запросу: мир на самом деле не намного больше, чем этот пример, и мне нужен только способ распространения некоторых пятен, которые определяют тематические появления, с дополнительным ограничением, что снег не может коснуться пустыни. Экраны не прокручиваются, и если экран настроен на «пустыню», на нем не будет травы.

Кава
источник
Готовы ли вы использовать сторонние библиотеки или хотите написать собственное решение?
Уильям Маригер
Я бы предпочел написать свое собственное.
Кава
Размеры биома фиксированы?
11:07
Не могли бы вы отредактировать сообщение с точным списком точных правил, которым вы хотите следовать при создании карты? Нам было бы легче справиться с проблемой, точно зная, к чему мы стремимся.
Уильям Маригер
Отредактировано, и размеры биома, ну, я пошел с теми, например. Для 16x16 мира, пустыня может все еще быть четверть площади и так далее, но это в основном , чтобы гарантировать некоторые районы будут там.
Кава

Ответы:

8

Есть много способов снять шкуру с этой кошки, однако одним из наиболее интересных является использование клеточных автоматов . Начните с пустой сетки и добавьте несколько начальных ячеек в случайных местах. Это должны быть некоторые основные не смешанные типы биомов. Скажи: трава, пустыня, снег, океан.

Основываясь на правилах роста вашего собственного дизайна, которые могут иметь некоторую случайность (мне все равно, что это технически нарушает идею CA, не так ли?), Они выросли каждый шаг в карте. Дополнительные правила могут быть такими, что если вы находитесь в океане и находитесь рядом с травой или болотом, вы можете превратиться в болото. Если вы рядом со снегом, вы можете стать льдом, если вы находитесь около пустыни, вы можете высохнуть и тоже стать пустыней.

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

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

Эта карта высот может быть результатом перлин-шума, алмазного квадрата или даже других моделей CA. Фактически, вы можете изменить эту карту с течением времени, моделируя тектонику плит, поднимая горы, опускаясь в траншеях, и даже позволяя рекам опускать ландшафт, создавая каньоны.

Эта кроличья нора простирается навсегда.

DampeS8N
источник
Голосование за предложение CA. Это хорошо согласуется с комментарием Вальмонда.
Кава
Вы будете удивлены, насколько простым решением CA может быть решение этой проблемы. Простые правила и случайная стартовая карта могут создавать удивительно детализированные и «реалистичные» ландшафты.
DampeS8N
Пошел с принципом CA. Это еще не совсем правильно, поскольку единственное, что удерживает пустыню и снег, - это некоторые правила абсолютного положения, но пока это хорошо.
Кава
1
Одним из возможных решений проблемы снега / пустыни является наличие правила для создания другого типа биома, где снег встречается с пустыней. Скажи, болото. Тогда болото может продолжать расти как обычно. У вас все еще могут быть границы снега / пустыни, но на самом деле это несколько естественно. На самом деле большая часть пустыни на земле покрыта снегом. - короче говоря, у снега может быть правило, гласящее, что если какой-либо сосед является пустыней, он превращается в болото.
DampeS8N
11

Короткий ответ, но вы действительно должны проверить эту статью - www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ В ней объясняется один алгоритм генерации случайного поколения на суше и в биомах. основанный на назначенных зонах влажности и высотных областях. Но в вашем случае просто установите свои собственные значения для нужного вам дистрибутива.

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

Каждая точка является центром каждой области биома. Установите свои собственные правила, чтобы связать точку с биомом. Например, если вы хотите пустыню на востоке и не слишком далеко на юге или севере, все точки, которые больше определенного значения X и в пределах определенного диапазона Y, будут иметь пустыню, окружающую их.

Свяжите каждый экран с одной из этих точек, что делается путем взятия центра экрана в координатах XY (скажем, 4.5, 8.5) и возврата точки, ближайшей к центру экрана.

Вот примерный рисунок диаграммы формы на сетке экранов. На самом деле нас не интересуют линии, окружающие фигуры, но они показывают, как экраны начинают приближаться к областям формы.

Вороного-сетка

Повторите для каждого экрана, давая каждому свой биом.

ChrisC
источник
Я видел это раньше, и это слишком чересчур для моих вкусов.
Кава
Ну ладно, это мягко говоря. Это очень базука на комарах. Пример 8x8 был не просто примером - мир действительно не будет достаточно большим, чтобы оправдать это решение.
Кава
Хорошо, теперь я вижу. Вам действительно не нужно различать биомы для каждой плитки на карте. Кроме того, предложенная концепция статьи кажется созданной специально для автора, но некоторые ее части можно выделить. Я редактирую свой ответ, чтобы сделать его более понятным.
ChrisC
Все еще слишком сложное решение. Там нет высоты или влажности, чтобы использовать здесь. Все, что мне нужно, все, что я хотел попросить, это каким-то образом «разложить» пятна пустыни, болота и снега до необходимого количества, следуя некоторым дополнительным правилам, таким как «снег не может подойти слишком близко к пустыне». ,
Кава
@ Кава: Похоже, вы готовы копаться и писать свое собственное решение! Из того, что я могу сказать, вы все это визуализируете, просто ДЕЛАЙТЕ ЭТО! :) Помните, что он не должен быть основным генератором карт в мире, пока он выглядит так, как есть. ;)
Zolomon
1

Ответ 1:

выращивайте снег и пустыню, когда это будет сделано, ищите (запрещенные) перекрестки и выращивайте (более или менее большое) болото там.

Ринс и повторить.

Ответ 2:

Для части «blob» я переместил свой комментарий (по запросу) на пост:

Если вы будете расти вокруг итерации, т.е. установить 1 точку пустыни, а затем случайным образом расти вокруг любой точки пустыни (каждый раз случайным образом брать одну из существующих точек пустыни и добавлять 1 точку на одной из ее сторон (где еще ничего нет)), тогда вы должны получить эффект blobby ( нет длинных строк например).

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

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