Rozpoczynam / rozpocząłem grę RPG 2D tilemap w Javie i chcę zaimplementować generowanie losowych map. Mam listę różnych kafelków (brud / piasek / kamień / trawa / żwir itp.) Wraz z kafelkami wody i kafelkami ścieżek, mam problem z tym, że nie mam pojęcia, od czego zacząć losowe generowanie mapy.
Musiałby mieć sekcje terenu (tak jak jego część to piasek, część brudu itp.). Podobnie jak w Minecraft, gdzie masz różne biomy i płynnie się ze sobą przekształcają. Na koniec musiałbym również dodać do tego losowe ścieżki, a także iść w różnych kierunkach na całej mapie.
Nie proszę nikogo, aby napisał mi cały kod lub cokolwiek innego, po prostu pionieruj mnie we właściwym kierunku, proszę.
tl; dr - Wygeneruj mapę kafelków z biomami, ścieżkami i upewnij się, że biomy płynnie się ze sobą łączą.
Podczas gdy inne odpowiedzi tutaj są naprawdę dobre do generowania rodzajów statycznych krajobrazów, które byłyby odpowiednie dla tej konkretnej potrzeby. Istnieją inne metody, które mogą znaleźć osoby, które napotkają to pytanie, jeśli chcą tworzyć krajobrazy, które zmieniają się w czasie lub wydają się bardziej realistyczne, można zastosować tę technikę.
W przeciwieństwie do innych odpowiedzi zaczynasz od zupełnie pustej mapy. Zacznij od tego, co uważasz za poziom morza. Użyj Perlin Noise, aby dodać bardzo niewielką zmienność, jeśli masz 256 możliwych wzniesień, nie zmieniaj więcej niż 3-5 w obu kierunkach. To buduje pierwsze kilka miliardów lat twojego krajobrazu bez konieczności przeprowadzania symulacji przez tak długi czas.
Płyty tektoniczne
Podziel mapę wzdłuż prostych lub zakrzywionych linii, aby utworzyć płyty, im bardziej szczegółowy kształt płytek, tym ciekawszy będzie Twój krajobraz. Trzymaj je duże. Daj każdej płycie kierunek, prędkość. W określonym przedziale czasowym przesuwaj płytki po mapie krok po kroku, przeciągając wszystkie płytki nad nimi.
Kiedy dwie płyty się skrzyżują, dokonaj wyboru, który przejdzie, a który pod, wybór może być losowy. Płytki na płytkach oznaczonych poniżej są natychmiast zmniejszane o 5 kroków. Gdy tabliczka zostanie wyznaczona powyżej lub poniżej, wszystkie przyszłe interakcje z płytkami będą podlegały następującym zasadom:
Wszystkie płyty, które przechodzą powoli o 20% ich bieżącej prędkości na każdym kroku. Aby zwiększyć realizm, dodaj losową zmianę od -10% do 10% w każdym kroku.
Po wykonaniu żądanej liczby kroków. Prawdopodobnie 5-10 to dużo. Wszelkie płytki, w których nie ma rezydentów, należy upuścić na najniższy istniejący poziom.
Duży czy mały?
Tej mapy można używać w takiej postaci, w jakiej jest, lub ją rozszerzać, aby utworzyć znacznie większą mapę, dzieląc ją na kawałki kafelków (komórek) 4X4 i rozszerzając te sekcje na podstawie ich indywidualnych wysokości. Traktuj rzędną każdej komórki jako punkt i utwórz gładką gradację na większej mapie między tymi punktami. Tak więc, jeśli większa mapa to 40 x 40 zamiast 4 x 4, a punkt (0,0) to 10, a punkt (0,1) to 1, płytki na większej mapie między nimi wynoszą 10,9,8,7,6 , 5,4,3,2,1 wysokości. Ponadto można dodać hałas Perlina, aby wygładzić zbocza. Ogólnie rzecz biorąc, technika skalowania jest podobna do algorytmu Diamond Square .
woda
Symulacja rzek i jezior, oceanów i zbiorników wodnych. Wolę używać automatów komórkowych .
Wysokości stają się liczbami zmiennoprzecinkowymi lub rozszerzonymi zakresami int, aby umożliwić dokładniejsze śledzenie. Komórki wodne mają wartości nasycenia, powiedzmy w zakresie 1-256. Mapy powinny zaczynać się równomiernie. Będziesz musiał grać z liczbami dla poszczególnych rozmiarów map, jednak ogólnie będziesz przestrzegać zasad mniej więcej takich:
Dokonaj tego sprawdzenia dla każdej sąsiedniej komórki. Przeprowadź wystarczającą liczbę kroków. Jeśli chcesz, możesz dodać temperaturę do tej symulacji, zmieniając ilość utraconego / uzyskanego nasycenia o tę temperaturę. Możesz go również zmienić na podstawie wysokości. Powinny się tworzyć naturalne jeziora i rzeki. Niektórzy wpadną do oceanu. (Ocean prawdopodobnie nie wypełni się żadną miarą, ale i tak oznaczycie wszystko pod poziomem morza, aby na końcu było wypełnione wodą.)
Możesz zachować dane dotyczące temperatury i nasycenia, aby używać ich, podobnie jak w innych odpowiedziach, do tworzenia biomów. Powinny być DUŻO bardziej dokładne i interesujące. Z zaśnieżonymi biomami na biegunach i gorącymi pośrodku (jeśli używasz gładkiej stopniowanej listy temperatur).
Możesz także symulować wiatr, a zatem zmiany temperatury na podstawie wysokości. Jeśli chcesz, możesz przesuwać się między uruchomieniem symulacji temperatury i symulacji wody. Jednak nie zbudowałem niczego przy użyciu zmian temperatury, więc nie będę komentować, jak to zrobić.
Ewoluujące krajobrazy
Jeśli utrzymasz symulacje dla ziemi, wody i ciepła i znacznie zmniejszysz ich skutki, a także powstrzymasz ruchy płyt, możesz nadal zmieniać wszystkie te parametry w czasie. Nie uruchamiałbym obliczeń bardzo często, ale można uzyskać mapę świata, która reaguje na zmiany w ten sposób.
Wniosek
Chociaż tego rodzaju techniki są znacznie bardziej zaangażowane, dają o wiele bardziej realistyczne i ewoluujące efekty. Weź to za co jest warte?
źródło
Możesz użyć Perlin Noise do generowania terenu, oto jak działają biomy w Minecraft. Jak widać, wykorzystuje on mapę cieplną w połączeniu z mapą deszczu do tworzenia biomów.
źródło