Проста карта, чотири біоми та способи їх поширення


16

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

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

mockup of a possible world map with towns and starting location, but no dungeon entrances

Здається, зменшення палітри зробило сніг такого ж кольору, як і болото. Спочатку в нижньому куті було вісім снігових екранів, а в середині - трохи шаруватий восьмигранний болотний район. Вибачте, але проігноруйте маркери місцеположення.

Найкраще, що я міг отримати, - це деякі форми змії, і це досить часто з безглуздими комбінаціями, такими як пустельна змія через сніг (або навпаки). Я не можу за все життя зрозуміти, як зробити це приємним і розкльошеним, не кажучи вже про те, щоб він мав кліматичний (?) Сенс. Тож як я можу генерувати карту біома, як у макеті?

Гаразд, на запит: світ насправді не набагато більший за цей приклад, і мені потрібно лише спосіб поширити пелюстки, які визначають тематичні види, з додатковим обмеженням, що сніг не може торкнутися пустелі. Екрани не прокручуються, і якщо на екрані встановлено "пустеля", ніде трави на ньому не буде.


Ви готові користуватися сторонніми бібліотеками чи хочете кодувати власне рішення?
Вільям Маріагер

Я вважаю за краще кодувати своє.
Кава

Розміри біома фіксовані?
якDD

Чи можете ви відредагувати публікацію з точковим списком точних правил, яких слід дотримуватися генерація карт? Нам було б простіше впоратися з проблемою, точно знаючи, для чого ми йдемо.
Вільям Маріагер

Відредаговано, і розміри біома, ну, я пішов з тими, наприклад. Для світу 16x16 пустеля все ще може бути четвертою площею тощо, але це, головним чином, для того, щоб гарантувати, що певні райони будуть там.
Кава

Відповіді:


8

Існує багато способів зняти шкіру з цією кішкою, проте одним з найбільш цікавих є використання стільникових автоматів . Почніть зі своєї порожньої сітки та додайте декілька початкових клітин у випадкових місцях. Вони повинні мати деякі основні немішані типи біомів. Скажіть: трава, пустеля, сніг, океан.

Виходячи з правил росту вашого власного дизайну, які можуть містити певну випадковість (мені байдуже, що це технічно порушує ідею CA, чи не так?), Щоб вони зростали кожен крок на карті. Додаткові правила можуть бути такими, що якщо ви знаходитесь в океані і поруч з травою чи болотом, ви можете перетворитись на болото. Якщо ви поруч зі снігом, ви можете стати льодом, якщо ви біля пустелі, ви можете пересохнути і теж стати пустелею.

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

Можливості нескінченні, а також можуть бути постійними. Оскільки ці правила все прості, ви можете реалізувати середовища, які змінюються з часом. У поєднанні з інформацією про висоту та правилами, які враховують її, ви можете вирощувати озера та річки, блокувати ріст лісів над горами та інші химерні речі.

Ця карта висоти може бути результатом перлинського шуму, або діамантового квадрата, або навіть цілих інших моделей CA. Насправді ви могли змінити цю карту по мірі продовження часу, моделюючи тектоніку плит, підштовхуючи гори, занурюючись в окопи і навіть дозволяючи річкам опускати пейзаж, створюючи каньйони.

Ця кроляча нора простягається назавжди.


Звернення за пропозицією ЦА. Це добре поєднується з коментарем Валмонда.
Кава

Ви здивуєтеся, наскільки простим рішенням CA може бути ця проблема. Прості правила та випадкова стартова карта можуть створити надзвичайно детальні та «реалістичні» ландшафти.
DampeS8N

Поїхали за принципом СА. Це не зовсім правильно, оскільки єдине, що зберігає пустелю та сніг, є деякими абсолютними правилами положення, але це все одно добре.
Кава

1
Одним з необов'язкових варіантів вирішення проблеми сніг / пустеля є створення правила для створення іншого типу біоми, де сніг зустрічає пустелю. Скажи, болото. Тоді болото може продовжувати рости як нормально. У вас все ще можуть бути межі снігу / пустелі, але насправді це дещо природно. Насправді більша частина пустелі на землі вкрита снігом. - коротше кажучи, сніг може мати таке правило, що якщо будь-який сусід пустельний, він перетворюється на болото.
DampeS8N

11

Коротка відповідь, але вам слід справді перевірити цю статтю на веб- www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Це пояснює один алгоритм генерації випадкових поколінь суходолу та біомів на основі визначених зон вологості та областей висоти. Але у вашому випадку просто встановіть власні значення для потрібного вами розподілу.

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

Кожна точка є центром для кожної зони біома. Встановіть власні правила, щоб пов’язати точку з біомом. Наприклад, якщо ви хочете пустеля на схід і не занадто далеко на південь або північ, всі точки, які перевищують певне значення X і в межах певного діапазону Y, матимуть навколо себе пустелю.

Пов’яжіть кожен екран з однією з цих точок, що робиться шляхом взяття центра екрана в координати XY (скажімо, 4,5, 8,5) і повернення точки, найближчої до центру екрана.

Ось приблизний малюнок діаграми фігури на сітці екранів. Ми насправді не стосуємося ліній, що оточують фігури, але вони там, щоб проілюструвати, як екрани починають наближати області фігур.

Вороной-сітка

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


Я це бачив і раніше, і це трохи надто базука на комара на мій смак.
Кава

Ну гаразд, м'яко кажучи. Це дуже базука на комарі. Приклад 8x8 був не просто прикладом - світ насправді не буде достатньо великим, щоб виправдати це рішення.
Кава

Гаразд, я зараз бачу. Вам дійсно не потрібно диференціювати біоми на кожній плитці карти. Крім того, запропонована в статті концепція статті, схоже, призначена для автора, але деякі частини можуть бути обрані. Я редагую свою відповідь, щоб зробити її більш зрозумілою.
ChrisC

Ще занадто складне рішення. Тут немає висоти або вологості. Все, що мені потрібно, все, що я мав на меті попросити, - це якийсь спосіб "розкласти" краплі пустелі, болота та снігу до необхідної кількості, дотримуючись деяких додаткових правил, таких як "сніг не може наблизитися до пустелі" .
Кава

@Kawa: Схоже, ти готовий викопати та написати власне рішення! З того, що я можу сказати, у вас все це візуалізується у вашій свідомості, просто РОБИТИ! :) Пам'ятайте, що він не повинен бути кінцевим генератором карт у світі, доки він ЛОКУЄ, як є. ;)
Золомон

1

Відповідь 1:

рости сніг і пустеля, коли це буде зроблено, шукати (заборонені) перехрестя і вирощувати там (більш-менш велике) болото.

Змийте і повторіть.

Відповідь 2:

Що стосується частини "краплі", я перемістив свій коментар (за потребою) до публікації:

Якщо ти зростаєш навколо ітерацією, тобто. викладіть 1 пункт пустелі, а потім випадковим чином зростайте навколо будь-якої точки пустелі (кожен раз випадковим чином приймайте одну з існуючих пустельних точок і додайте 1 бал на одній із її сторін (де ще нічого немає)), тоді ви повинні отримати ефект затухання ( немає довгих рядків, наприклад).

Ви також можете додати правило, щоб ви не могли створити пустельну плитку, якщо на будь-якій плитці поблизу є сніг.


Це не дуже допомагає вирішити проблему.
Кава

2
якщо ти зростаєш навколо ітерацією, тобто встановіть 1 пункт пустелі, а потім випадковим чином зросте навколо будь-якої точки пустелі (кожен раз випадковим чином приймайте одну з існуючих пустельних точок і додайте 1 бал на одній із її сторін (де ще нічого немає)), тоді ви повинні отримати ефект затухання ( немає довгих рядків, наприклад).
Валмонд

Ви також можете додати правило, щоб ви не могли створити пустельну плитку, якщо на будь-якій плитці поблизу є сніг.
Валмонд

Валмонд, поставте це у відповідь.
Кава
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.