|
|
|||||
Генерация мира
Нужен генератор мира, но подумал, зачем делать велосипед, возможно, кто-то имеет догадки о том, как делался генератор мира террарии, или может помочь с оптимизацией и упрощением логики. А может, кто-то просто имеет знакомых разработчиков террарии, и уже давно поинтересовался этим делом.
Итак, идея в чём: Нужно сделать мир в виде парящего островка. Размеры островка варьируются от 1200 пкс на 700 до 2500 на 1000. (при блоке в 25 пкс) Форма должна быть рандомной, но иметь горы, ямы и что-то в форме сталактитов снизу(разумеется, всё с помощью блоков песка, травы, дерева и т.д.). Горы между собой могут пересекаться, ямы же не могут пересекаться с горами(хотя, возможно, это не верно - если так не нужно, поправьте меня) Как я себе это представляю: 1)Генерация квадрата с размерами - 1200 + int(Math.random()*(2500 - 1200)), 700 + int(Math.random()*(1000 - 700)). 2)Разместить скелет, который будет обрастать землёй - полоску земли ровно по вертикальному центру. 3)Задать пределы гор(минимум - 2 горы, максимум - 6) 4)Рандомно определить, сколько будет гор и циклом "нарастить" их в рандомных местах, также размеры гор рандомно. 5)Нарастить ещё некоторую толщу земли, но в местах, прилегающих к границам прямоугольника делать это рандомно. 6)Алгоритм создания ямы результирующая точка = Math.random() * ширина прямоугольника; если(задевает зону горы) { результирующая точка = рекурсия; } Хотелось бы максимально естественно сформировать островок. MODIFY: 8) Как быть с пещерами - вот вопрос? MODIFY: Мысль насчёт пещер - сделать около 50 рандомных точек на карте, и те, что близко друг к другу - объединить коридорами. Но как-то это не очень естественно, жду дальнейших идей. MODIFY: Заметил, что, действительно, неверна идея с ямами. Они должны пересекаться и с горами, потому, что горы могут занимать по размерам абсолютно всё пространство на карте(ибо размещение их случайно). А также это очевидно при взгляде на вставленное изображение.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 12.06.2015 в 19:02. |
|
|||||
Можно генерацию делать в несколько этапов. Как пример
Генерация значений высоты и ширины карты Генерация рельефа в виде анкерных точек вершин и впадин Генерация контура карты по анкерным точкам Пещеры проще и естественее
__________________
return this... |
|
|||||
Цитата:
А как быть с кривыми линиями? Есть ли для этого формулы? Цитата:
Далее, если рисовать по точкам, то становится сложно понять, как "наращивать" тот или иной климат, например, пустынный, песок, и он постепенно бы переходил в джунгли. Точнее, ведь горы в пустынях выглядят иначе, чем в горной местности. В пустынях не встретишь "обрыва".
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 12.06.2015 в 19:46. |
|
|||||
Цитата:
Я бы создал библиотеку рельефов. У каждого рельефа есть два доп. свойства которые указывает есть ли необходимый тип рельефа соседа, или наоборот тот который не может быть смежным с данным. Естественно каждый рельеф имеет свои интервалы значении генераций по высоте И создаем основную инструкцию, мол рандомно генерим слева на право, перемешанный список типов рельефов. естественно, если нужно два рельефа гор - в списке 2 типа гор. Во время каждом проходе генерации, проверяем, есть свойствойсто (не)обязательного типа рельефа-соседа, если есть, выполняем дополнительную итерациию этого типа рельфа, или налаживаем условие, что следующий не может быть каким-то из типов. Теоретически, я бы, наверное сделал так.
__________________
return this... |
|
|||||
AlexCooper, спасибо большое, золотые советы.
Спасибо за интерактивную демонстрацию, помогло понять принцип. Вот после этого попытаюсь разрисовать все детали сам. Далее покажу результат.
__________________
There is no thing in this world that is not simple. |
|
|||||
Цитата:
Ещё есть игра StarBound, такая же песочница как и террария. Её разрабы ведут блог, в котором пишут о ходе разработки. Как-то, один из них писал об рандомной генераций их мира, даже графики были.
__________________
Дети не должны знать о своих родителях |
|
|||||
Да и я бы так поступил. Хотя и псевдорандом использовал в своей жизни лишь дважды, но для понимания, начинающим, я считаю, будет наиболее простое решение.
__________________
return this... |
Часовой пояс GMT +4, время: 11:02. |
|
« Предыдущая тема | Следующая тема » |
|
|