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:
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.
Odpowiedzi:
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.
źródło
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.
Powtórz dla każdego ekranu, dając każdemu swój własny biom.
źródło
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.
źródło