Вот основная идея: у меня есть игра Rogue-ish, возможно, Dwarf Fortress-ish, со случайно сгенерированным миром и несколькими входами в подземелья, разбросанными вокруг него. У меня уже есть подземелья в основном покрыт, но я застрял на аспекте надземных.
Указанный надземный мир, рассматриваемый как двумерная карта экранов, должен иметь распределение, похожее на блоб, с четырьмя различными темами или биомами - луга, пустыня, снег и болото, каждая из которых имеет общее количество экранов. Скажем, карта 8x8, которая дает 64 уникальных экрана. Половина из них может быть лугами, четвертью пустыни, а болото и снег - по четверти:
Кажется, что уменьшение палитры сделало снег таким же цветом, как и болото. Первоначально в нижнем углу было восемь снежных экранов, а в середине - слегка пораженная область с восемью экранами. Извините за это, и, пожалуйста, игнорируйте маркеры местоположения.
Лучшее, что я мог получить, это какие-то змеиные формы, и достаточно часто с бессмысленными комбинациями, такими как пустыня, пробирающаяся по снегу (или наоборот). Я не могу понять, как сделать его красивым и пустым, не говоря уже о том, чтобы это имело климатический (?) Смысл. Итак, как мне создать карту биома, как в макете?
Ладно, по запросу: мир на самом деле не намного больше, чем этот пример, и мне нужен только способ распространения некоторых пятен, которые определяют тематические появления, с дополнительным ограничением, что снег не может коснуться пустыни. Экраны не прокручиваются, и если экран настроен на «пустыню», на нем не будет травы.
Ответы:
Есть много способов снять шкуру с этой кошки, однако одним из наиболее интересных является использование клеточных автоматов . Начните с пустой сетки и добавьте несколько начальных ячеек в случайных местах. Это должны быть некоторые основные не смешанные типы биомов. Скажи: трава, пустыня, снег, океан.
Основываясь на правилах роста вашего собственного дизайна, которые могут иметь некоторую случайность (мне все равно, что это технически нарушает идею CA, не так ли?), Они выросли каждый шаг в карте. Дополнительные правила могут быть такими, что если вы находитесь в океане и находитесь рядом с травой или болотом, вы можете превратиться в болото. Если вы рядом со снегом, вы можете стать льдом, если вы находитесь около пустыни, вы можете высохнуть и тоже стать пустыней.
То же самое можно сказать и о других смесях, и в теории даже субмиксы, такие как мерзлое болото, тундра или джунгли, прорастают из больших лесных массивов, выросших из больших пастбищных угодий.
Возможности бесконечны, а также могут быть постоянными. Поскольку все эти правила просты, вы можете создавать среды, которые меняются со временем. В сочетании с информацией о высоте и правилами, которые учитывают ее, вы можете выращивать озера и реки, блокировать рост лесов над горами и другие необычные вещи.
Эта карта высот может быть результатом перлин-шума, алмазного квадрата или даже других моделей CA. Фактически, вы можете изменить эту карту с течением времени, моделируя тектонику плит, поднимая горы, опускаясь в траншеях, и даже позволяя рекам опускать ландшафт, создавая каньоны.
Эта кроличья нора простирается навсегда.
источник
Короткий ответ, но вы действительно должны проверить эту статью - www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ В ней объясняется один алгоритм генерации случайного поколения на суше и в биомах. основанный на назначенных зонах влажности и высотных областях. Но в вашем случае просто установите свои собственные значения для нужного вам дистрибутива.
(большое редактирование) Я сделаю это намного более ясным для того, какие концепции генерации карт вам нужно применять. Используйте систему координат с 1 единицей на экран в значениях с плавающей запятой. Создайте небольшой случайный набор точек в пределах этих координат, как если бы вы делали диаграмму Вороного, но мы на самом деле не будем создавать случайные формы. Вместо этого диаграмма будет подразумеваться и аппроксимироваться картой после установки биомов.
Каждая точка является центром каждой области биома. Установите свои собственные правила, чтобы связать точку с биомом. Например, если вы хотите пустыню на востоке и не слишком далеко на юге или севере, все точки, которые больше определенного значения X и в пределах определенного диапазона Y, будут иметь пустыню, окружающую их.
Свяжите каждый экран с одной из этих точек, что делается путем взятия центра экрана в координатах XY (скажем, 4.5, 8.5) и возврата точки, ближайшей к центру экрана.
Вот примерный рисунок диаграммы формы на сетке экранов. На самом деле нас не интересуют линии, окружающие фигуры, но они показывают, как экраны начинают приближаться к областям формы.
Повторите для каждого экрана, давая каждому свой биом.
источник
Ответ 1:
выращивайте снег и пустыню, когда это будет сделано, ищите (запрещенные) перекрестки и выращивайте (более или менее большое) болото там.
Ринс и повторить.
Ответ 2:
Для части «blob» я переместил свой комментарий (по запросу) на пост:
Если вы будете расти вокруг итерации, т.е. установить 1 точку пустыни, а затем случайным образом расти вокруг любой точки пустыни (каждый раз случайным образом брать одну из существующих точек пустыни и добавлять 1 точку на одной из ее сторон (где еще ничего нет)), тогда вы должны получить эффект blobby ( нет длинных строк например).
Вы также можете добавить правило, чтобы вы не могли создать плитку пустыни, если рядом с ней есть снег.
источник