Prosta mapa, cztery biomy i sposób ich dystrybucji

16

Oto podstawowa idea: mam grę typu Łotrzyk, być może Dwarf Fortress, z losowo generowanym światem i kilkoma wejściami do lochów. Mam już właściwie wszystkie lochy , ale utknąłem w pewnym aspekcie świata.

Wspomniany świat, uważany za dwuwymiarową mapę ekranów, powinien mieć prawdopodobnie plamistą dystrybucję czterech różnych tematów lub biomów - łąk, pustyni, śniegu i bagien, z których każda ma własną całkowitą liczbę ekranów. Załóżmy, że mapa ma wymiary 8 x 8, co daje 64 unikalne ekrany. Połowa z nich to łąki, jedna czwarta pustyni, a bagna i śnieg po jednej czwartej:

makieta możliwej mapy świata z miastami i początkową lokalizacją, ale bez wejść do lochów

Wygląda na to, że dzięki zmniejszeniu palety śnieg ma ten sam kolor co bagno. Pierwotnie w dolnym rogu znajdowało się osiem zasłon śnieżnych, a pośrodku nieco rozłożony ośmio-ekranowy obszar bagien. Przepraszam za to i zignoruj ​​znaczniki lokalizacji.

Najlepsze, co mogłem uzyskać, to niektóre snake kształty, i często dość bezsensowne kombinacje, takie jak pustynne węszenie przez śnieg (lub odwrotnie). Nie mogę z mojego życia wymyślić, jak to zrobić ładnie i bezładnie, nie mówiąc już o tym, że ma to klimatyczny (?) Sens. Jak więc wygenerować mapę biomu jak na makiecie?

W porządku, na życzenie: świat naprawdę nie jest dużo większy niż ten przykład, a potrzebuję tylko sposobu, aby rozprowadzić niektóre plamy, które określają wygląd tematyczny, z dodatkowym ograniczeniem, że śnieg nie może dotknąć pustyni. Ekrany nie przewijają się, a jeśli ekran jest ustawiony na „pustynny”, nigdzie nie będzie na nim trawy.

Kawa
źródło
Czy chcesz korzystać z bibliotek stron trzecich, czy chcesz kodować własne rozwiązanie?
William Mariager,
Ja wolę kodowanie własną rękę.
Kawa,
Rozmiary biomu są ustalone?
kaoD
Czy możesz edytować post za pomocą listy punktów zawierającej dokładne zasady, których chcesz przestrzegać podczas generowania mapy? Łatwiej byłoby nam poradzić sobie z problemem, wiedząc dokładnie, do czego zmierzamy.
William Mariager,
Edytowane i rozmiary biomów, no cóż, poszedłem z nimi na przykład. W świecie 16 x 16 pustynia może nadal stanowić czwartą część obszaru i tak dalej, ale ma to głównie na celu zagwarantowanie, że pewne obszary tam będą.
Kawa,

Odpowiedzi:

8

Jest wiele sposobów na skórowanie tego kota, jednak jednym z ciekawszych jest użycie automatów komórkowych . Zacznij od pustej siatki i dodaj kilka początkowych komórek nasion w losowych lokalizacjach. Powinny to być niektóre podstawowe niezmieszane rodzaje biomów. Powiedz: trawa, pustynia, śnieg, ocean.

Opierając się na regułach wzrostu własnego projektu, które mogą cechować się pewną przypadkowością (nie obchodzi mnie, że to technicznie łamie ideę CA, prawda?) Każą im rosnąć z każdym krokiem na mapie. Dodatkowe zasady mogą być takie, że jeśli jesteś oceanem i znajdujesz się obok trawy lub bagna, możesz zamienić się w bagno. Jeśli jesteś blisko śniegu, możesz stać się lodem, jeśli jesteś blisko pustyni, możesz wyschnąć i stać się pustynią.

To samo może dotyczyć innych mieszanek, a teoretycznie nawet podmiksów, takich jak zamarznięte bagno, tundra lub dżungla wyrastająca z dużych połaci lasów, które wyrosły z dużych połaci łąk.

Możliwości są nieograniczone i mogą być również ciągłe. Ponieważ wszystkie te zasady są proste, możesz wdrażać środowiska, które zmieniają się w czasie. W połączeniu z informacjami o wysokości i zasadami, które je uwzględniają, możesz hodować jeziora i rzeki, blokować wzrost lasów nad górami i inne fantazyjne rzeczy.

Ta mapa wysokości może być wynikiem hałasu perlin, kwadratu diamentowego, a nawet całych innych modeli CA. W rzeczywistości można modyfikować tę mapę w miarę upływu czasu, modelując tektonikę płyt, przepychając góry, toniąc w okopach, a nawet pozwalając rzekom obniżyć krajobraz, tworząc kaniony.

Ta nora królika rozciąga się na zawsze.

DampeS8N
źródło
Uaktualnienie sugestii urzędu certyfikacji. Pasuje dobrze do komentarza Valmonda.
Kawa,
Byłbyś zaskoczony, jak proste może być rozwiązanie CA tego problemu. Proste zasady i losowa mapa początkowa mogą tworzyć niezwykle szczegółowe i „realistycznie” wyglądające krajobrazy.
DampeS8N,
Poszedł z zasadą CA. Nie jest to jeszcze do końca słuszne, ponieważ jedyne, co dzieli pustynię i śnieg, to pewne bezwzględne zasady pozycji, ale na razie dobrze.
Kawa,
1
Jednym z opcjonalnych rozwiązań problemu śniegu / pustyni jest ustanowienie reguły tworzenia innego rodzaju biomu, w którym śnieg styka się z pustynią. Powiedz bagno. Wtedy bagno może dalej rosnąć jak zwykle. Nadal możesz mieć granice śniegu / pustyni, ale w rzeczywistości jest to trochę naturalne. W rzeczywistości większość pustyni na ziemi jest pokryta śniegiem. - krótko mówiąc, śnieg może mieć taką zasadę, że jeśli jakiś sąsiad jest pustynią, zmienia się w bagno.
DampeS8N,
11

Krótka odpowiedź, ale naprawdę powinieneś sprawdzić ten artykuł - www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Wyjaśnia jeden algorytm dotyczący generowania losowej generacji suchych lądów i biomów na podstawie wyznaczonych stref wilgotności i regionów wysokościowych. Ale w twoim przypadku po prostu ustaw własne wartości dla żądanej dystrybucji.

(duża edycja) Wyjaśnię to znacznie w odniesieniu do koncepcji generowania map, które należy zastosować. Użyj układu współrzędnych z 1 jednostką na ekran, w wartościach zmiennoprzecinkowych. Wygeneruj mały losowy zestaw punktów w tych współrzędnych, tak jakbyś tworzył diagram Voronoi, ale tak naprawdę nie stworzymy losowych kształtów. Zamiast tego schemat zostanie implikowany i przybliżony przez mapę po ustawieniu biomów.

Każdy punkt jest centrum każdego obszaru biomu. Ustaw własne reguły kojarzenia punktu z biomem. Na przykład, jeśli chcesz mieć pustynię na wschodzie i niezbyt daleko na południu lub północy, wszystkie punkty, które są większe niż pewna wartość X i mieszczą się w pewnym zakresie Y, będą otaczały pustynię.

Skojarz każdy ekran z jednym z tych punktów, co odbywa się poprzez przyjęcie środka ekranu we współrzędnych XY (powiedzmy 4.5, 8.5) i powrót punktu najbliższego środka ekranu.

Oto przybliżony rysunek schematu kształtu na siatce ekranów. Nie jesteśmy tak naprawdę zainteresowani liniami otaczającymi kształty, ale służą one do zilustrowania, w jaki sposób ekrany zaczynają przybliżać obszary kształtów.

Siatka Voronoi

Powtórz dla każdego ekranu, dając każdemu swój własny biom.

ChrisC
źródło
Widziałem to już wcześniej i na mój gust jest to trochę zbyt bazooka na komara.
Kawa,
No dobrze, to delikatnie mówiąc. To bardzo bazooka na komarze. Przykład 8x8 nie był tylko przykładem - świat naprawdę nie będzie wystarczająco duży, aby uzasadnić to rozwiązanie.
Kawa,
Okej, teraz rozumiem. Naprawdę nie musisz rozróżniać biomów na każdym kafelku mapy. Ponadto koncepcja zaproponowana w artykule wydaje się być dostosowana do autora, ale niektóre części można wybrać. Edytuję swoją odpowiedź, aby była bardziej przejrzysta.
ChrisC
Wciąż zbyt skomplikowane rozwiązanie. Nie ma tu żadnej wysokości ani wilgotności. Chciałem tylko poprosić o sposób „rozłożenia” kropel pustyni, bagien i śniegu do wymaganej ilości, zgodnie z dodatkowymi zasadami, takimi jak „śnieg nie może zbytnio zbliżyć się do pustyni” .
Kawa,
@Kawa: Wygląda na to, że jesteś gotów się wkopać i napisać własne rozwiązanie! Z tego, co mogę powiedzieć, masz wszystko wizualizowane w głowie, po prostu ZRÓB TO! :) Pamiętaj, że nie musi to być najlepszy generator map na świecie, o ile WYGLĄDA tak, jak jest. ;)
Zolomon,
1

Odpowiedź 1:

rosnąć śnieg i pustynię, kiedy to się robi, szukaj (zakazanych) skrzyżowań i hoduj tam (mniej więcej duże) bagna.

Rince i powtórz.

Odpowiedź 2:

W części „kropelka” przeniosłem swój komentarz (zgodnie z żądaniem) do postu:

Jeśli rośniesz przez iterację, tj. wyznaczyć 1 punkt pustyni, a następnie losowo rosnąć wokół dowolnego punktu pustyni (za każdym razem losowo wybierz jeden z istniejących punktów pustyni i dodaj 1 punkt po jednej jego stronie (tam, gdzie jeszcze nic nie ma)), wtedy powinieneś uzyskać efekt blobby ( na przykład brak długich linii).

Możesz także dodać regułę, aby nie można było utworzyć pustynnego kafelka, jeśli na dowolnym kafelku w pobliżu jest śnieg.

Valmond
źródło
To nie pomaga dokładnie w aspekcie problemu typu blobby.
Kawa,
2
jeśli rośniesz przez iterację, tj. wyznaczyć 1 punkt pustyni, a następnie losowo rosnąć wokół dowolnego punktu pustyni (za każdym razem losowo wybierz jeden z istniejących punktów pustyni i dodaj 1 punkt po jednej jego stronie (tam, gdzie jeszcze nic nie ma)), wtedy powinieneś uzyskać efekt blobby ( na przykład brak długich linii).
Valmond,
możesz także dodać regułę, aby nie można było utworzyć pustynnego kafelka, jeśli na dowolnym kafelku w pobliżu jest śnieg.
Valmond,
Valmond, odpowiedz na to pytanie.
Kawa,