Генерація випадкових карт


63

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

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

Я не прошу нікого писати мені весь код чи що-небудь, просто наведіть мене в правильний бік, будь ласка.

tl; dr - Створіть карту плитки з біомами, шляхами та переконайтесь, що біоми плавно переходять одна в одну.

Відповіді:


68

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

Хоча це не підручник, є стаття про те, як генеруються карти світу фортеці карликових. В основному ви генеруєте кілька шарів шуму для висоти, вологи, температури та солоності. Тоді ви використовуєте щось подібне:

введіть тут опис зображення

Або це

введіть тут опис зображення

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

Я використовую цю стратегію своєї гри, і вона дуже швидко створює такі карти:

введіть тут опис зображення

Крім того, ви можете побачити, як я прокручую ще кілька карт на початку цього відео .

І ось ще кілька, для початку:

Як я можу створити випадковий «світ» у двигуні плитки?

Як я можу визначити регіональні риси в світі, створеному процедурою?

Як створити твердий плівковий шум для створення карти?


Хоча посилання на Полігональне генерування карт для ігор є дуже приємною статтею, я не думаю, що це дуже добре підходить для цього питання, тому що: а) це не сітка плитки та б) у неї немає біомів - текстура місцевості виходячи з висоти.
Тапіо

@Tapio Ти маєш рацію, я оновив більше інформації.
MichaelHouse

@ Byte56 Дякую, усе це дає мені вихідну точку! :)
Том О

@ Byte56 Я помітив, що ви згадували моє запитання пару років тому, тому я оновив його робочим кодом!
Нік Бадал

1
BTW проект генерації полігонових карт був створений для гри, яка мала плиткову карту, яка не відображала висоти. Висоти та полігони є для створення біомів, але насправді вони не показані в грі.
amitp

29

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

На відміну від інших відповідей, ви починаєте це з абсолютно порожньої карти. Почніть з того, що ви вважали б рівнем моря. Використовуйте Perlin Noise, щоб додати дуже незначні зміни, якщо у вас 256 можливих підйомів, не змінюйте більше 3-5 в будь-якому напрямку. Це будує перші кілька мільярдів років вашого ландшафту без необхідності насправді запускати симуляцію.

Тектоніка пластин

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

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

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

Усі пластини, які перетинають повільно, на 20% від поточної швидкості кожного кроку. Для додаткового реалізму додайте довільну зміну напрямку руху від 10 до 10% на кожному кроці.

Після виконання потрібної кількості кроків. Напевно, 5-10 - це багато. Будь-яку плитку, де немає жодної плити, слід опустити до найнижчого існуючого рівня.

Великий чи малий?

Цю карту можна використовувати як є, або розширити, щоб створити набагато більшу карту, розбивши її на шматки плитки (клітинки) 4X4 та розширивши ці секції на основі їх індивідуальних висот. Розгляньте висоту кожної клітини як точку та створіть плавну градацію на більшій карті між цими точками. Отже, якщо більша карта 40X40 замість 4X4, а точка (0,0) дорівнює 10, а точка (0,1) - 1, плитки на більшій карті між ними становлять 10,9,8,7,6 , Висотою 5,4,3,2,1. Далі можна додати шум Perlin для знебарвлення схилів. По всьому цьому техніка масштабування схожа на алгоритм Діаманта Квадрат .

Вода

Для імітації річок та озер, океанів та водних столів. Я вважаю за краще використовувати стільникові автомати .

Висоти стають поплавцями або розширюються діапазони інтертів, щоб забезпечити тонше зернисте відстеження. Водні клітини мають значення насичення, скажімо, в інтервалі 1-256. Карти повинні починатися рівномірно. Вам потрібно буде пограти з цифрами для ваших індивідуальних розмірів карти, однак, як правило, ви будете дотримуватися таких правил:

  • Якщо сусідська клітина більш насичена, збільшуйте насиченість і набирайте висоту.
  • Якщо сусідська клітина менш насичена, знижуйте насиченість і втрачайте висоту.

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

Ви можете зберігати дані про температуру і насиченість, щоб використовувати їх, як і в інших відповідях, для створення біомів. Вони повинні бути ВІДМОВИ більш точними та цікавими. З сніжними біомами на полюсах і гарячими посередині (якщо ви використовуєте плавний градуйований список температур.)

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

Еволюціонуючі пейзажі

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

Висновок

Незважаючи на те, що такі методи набагато більше задіяні, вони дають набагато більш реалістичні та розвиваючі ефекти. Взяти це за те, що воно варте?


15

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

Біоми від Minecraft

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