forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Генератор карт (http://forum.boolean.name/showthread.php?t=17521)

MoteX 15.11.2012 09:28

Генератор карт
 
Я всех приветствую,вообщем снова я,и снова нублю:)
Уже не сколько часов я не могу придумать генератор карт шириной 28 на 28 состоящий из цифр,например

Код:

023000
020011
020111
001110
011100

где допустим 0 это земля,1 это вода и тд..
реально туплю ,стындо,но с чего то нужно начинать:)может кто помочь с простейшим алгоритмом нанесения озер ?или рек:)

moka 15.11.2012 16:13

Ответ: Генератор карт
 
Озеро - это некая окружность, порой более сложная. Возьми центральную точку, затем начни "пускать" в разных направлениях "лучи", у которого есть "жизнь", например этот луч может пройти 4-7 точек. Попускай таких много. Как только у тебя будет примерно волосатая точка такая, нужно будет сгладить, а именно, проверять если вокруг есть достаточно воды - тоже стать водой. Таким образом это дело смажеться, и у тебя будет что-то подобие озера.
Реки просто - находишь центр озера, и пускаешь такой же луч как прежде, только тебе нужно будет его плавнее двигать, и с шириной поиграться.

Используй смекалку, нежели работать напрямую с массивом. Думай как бы ты это на бумаге логически мог бы сделать, затем подумай как преодолеть от "идеи" к массиву, каким путём.

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

Сложнее вариант, но правильнее - это сперва делать высотную карту используя шум перлина, а затем используя высотную, уже "разливать" воду. Но это намного сложнее и вариант, результат конечно будет в разы реалистичнее.

MiXaeL 16.11.2012 20:27

Ответ: Генератор карт
 
Подходов тут вагон и маленькая тележка. Гугл подскажет.
Просто чтобы добавить к мокиным примерам, можешь использовать вероятностную модель. Например, для озера - ставишь центральную точку и задаешь вероятность озера закончиться (например, p = 0.25). Дальше делаешь сколько-то шагов от центра озера (это будет его максимальный радиус) и для точки, которая гранчит с водой на каждом шаге с вероятностью 1-p прописываем воду, с вероятностью p ничего не меняем. Сответственно однажды закончившись, дальше в том направлении вода не растет (на самом деле еще от соседних клеток зависит, тут просто надо написать и поиграться). Дальше можно сглаживание применять и т.д.
Для рек аналогично вводим вероятности отклонения русла на одну клетку влево-вправо + вероятность разветвления в точке (направление случайно или по твоему закону).


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot