Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.06.2015, 17:20
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 1  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
По умолчанию Генерация мира

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



Итак, идея в чём:

Нужно сделать мир в виде парящего островка.
Размеры островка варьируются от 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() * ширина прямоугольника;
если(задевает зону горы)
{
   результирующая точка = рекурсия;
}
7) Сталактиты уже более-менее понятно, как реализовать.

Хотелось бы максимально естественно сформировать островок.

MODIFY:

8) Как быть с пещерами - вот вопрос?

MODIFY:

Мысль насчёт пещер - сделать около 50 рандомных точек на карте, и те, что близко друг к другу - объединить коридорами. Но как-то это не очень естественно, жду дальнейших идей.

MODIFY:

Заметил, что, действительно, неверна идея с ямами. Они должны пересекаться и с горами, потому, что горы могут занимать по размерам абсолютно всё пространство на карте(ибо размещение их случайно).
А также это очевидно при взгляде на вставленное изображение.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 12.06.2015 в 19:02.
Старый 12.06.2015, 19:11
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 2  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Можно генерацию делать в несколько этапов. Как пример
Генерация значений высоты и ширины карты
Генерация рельефа в виде анкерных точек вершин и впадин
Генерация контура карты по анкерным точкам
Пещеры проще и естественее рыть строить так как бы рыли люди. Начиная с верху, с рандомными генерациями тунелей с ограничениями длины и градуса наклона
__________________
return this...

Старый 12.06.2015, 19:22
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Генерация рельефа в виде анкерных точек вершин и впадин
Генерация контура карты по анкерным точкам
А затем проверять каждые 25 пикселей вхождение в фигуру по каким-то формулам проверки столкновения, и если входит - то рисовать в этом месте блок? Таким образом?
А как быть с кривыми линиями? Есть ли для этого формулы?

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

Далее, если рисовать по точкам, то становится сложно понять, как "наращивать" тот или иной климат, например, пустынный, песок, и он постепенно бы переходил в джунгли.
Точнее, ведь горы в пустынях выглядят иначе, чем в горной местности.
В пустынях не встретишь "обрыва".
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 12.06.2015 в 19:46.
Старый 12.06.2015, 20:28
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 4  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Как-то так
01.swf   (4.7 Кб)
Вложения
Тип файла: swf 01.swf (4.7 Кб, 177 просмотров)
__________________
return this...

Старый 12.06.2015, 20:47
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
как "наращивать" тот или иной климат, например, пустынный, песок, и он постепенно бы переходил в джунгли.
Точнее, ведь горы в пустынях выглядят иначе, чем в горной местности.
В пустынях не встретишь "обрыва".
Степень реалистичности, прямопропорционально ваших способностям к созданию и обработку инструкций

Я бы создал библиотеку рельефов. У каждого рельефа есть два доп. свойства которые указывает есть ли необходимый тип рельефа соседа, или наоборот тот который не может быть смежным с данным.
Естественно каждый рельеф имеет свои интервалы значении генераций по высоте
И создаем основную инструкцию, мол рандомно генерим слева на право, перемешанный список типов рельефов. естественно, если нужно два рельефа гор - в списке 2 типа гор.
Во время каждом проходе генерации, проверяем, есть свойствойсто (не)обязательного типа рельефа-соседа, если есть, выполняем дополнительную итерациию этого типа рельфа, или налаживаем условие, что следующий не может быть каким-то из типов. Теоретически, я бы, наверное сделал так.
__________________
return this...

Старый 12.06.2015, 21:20
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
AlexCooper, спасибо большое, золотые советы.
Спасибо за интерактивную демонстрацию, помогло понять принцип.

Вот после этого попытаюсь разрисовать все детали сам. Далее покажу результат.
__________________
There is no thing in this world that is not simple.

Старый 14.06.2015, 11:07
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Я бы применил псевдорандомный генератор. Тогда, зная seed, всегда можно сгенерировать один и тот же ландшафт.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 15.06.2015, 09:38
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 8  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Цитата:
Сообщение от dimarik Посмотреть сообщение
Я бы применил псевдорандомный генератор. Тогда, зная seed, всегда можно сгенерировать один и тот же ландшафт.
Надо отметить, что так сделано в майнкрафте.

Ещё есть игра StarBound, такая же песочница как и террария. Её разрабы ведут блог, в котором пишут о ходе разработки. Как-то, один из них писал об рандомной генераций их мира, даже графики были.
__________________
Дети не должны знать о своих родителях

Старый 15.06.2015, 11:46
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 9  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от dimarik Посмотреть сообщение
Я бы применил псевдорандомный генератор. Тогда, зная seed, всегда можно сгенерировать один и тот же ландшафт.
Да и я бы так поступил. Хотя и псевдорандом использовал в своей жизни лишь дважды, но для понимания, начинающим, я считаю, будет наиболее простое решение.
__________________
return this...

Старый 15.06.2015, 12:00
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Во вконтактике есть игра "Шахты". Для меня вообще вверх программного искусства. Советую.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:15.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.