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.


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.


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.


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.