Ich starte / starte ein 2D-Tilemap-RPG-Spiel in Java und möchte eine zufällige Kartengenerierung implementieren. Ich habe eine Liste verschiedener Kacheln (Dreck / Sand / Stein / Gras / Kies usw.) zusammen mit Wasser- und Pfadkacheln. Das Problem ist, dass ich keine Ahnung habe, wo ich anfangen soll, zufällig eine Karte zu erstellen.
Es müsste Geländeabschnitte geben (wie ein Teil davon Sand, ein Teil Dreck usw.). Ähnlich wie in Minecraft gibt es verschiedene Biome, die sich nahtlos ineinander verwandeln. Zuletzt müsste ich auch zufällige Pfade hinzufügen, die in verschiedene Richtungen über die Karte verlaufen.
Ich bitte niemanden, mir den gesamten Code oder irgendetwas zu schreiben, piont mich einfach in die richtige Richtung, bitte.
tl; dr - Generiere eine Kachelkarte mit Biomen, Pfaden und stelle sicher, dass die Biome nahtlos ineinander übergehen.
Während die anderen Antworten hier wirklich gut für die Erzeugung der Arten von statischen Landschaften sind, die für dieses spezielle Bedürfnis funktionieren würden. Es gibt andere Methoden, nach denen Menschen suchen, die auf diese Frage stoßen, wenn sie Landschaften erstellen möchten, die sich im Laufe der Zeit ändern oder viel realistischer erscheinen.
Im Gegensatz zu den anderen Antworten beginnen Sie dies mit einer völlig leeren Karte. Beginnen Sie mit dem, was Sie als Meeresspiegel betrachten würden. Verwenden Sie Perlin-Rauschen , um geringfügige Abweichungen hinzuzufügen. Wenn Sie 256 mögliche Höhen haben, variieren Sie nicht mehr als 3-5 in beide Richtungen. Auf diese Weise werden die ersten paar Milliarden Jahre Ihrer Landschaft erstellt, ohne dass eine Simulation so lange ausgeführt werden muss.
Plattentektonik
Teilen Sie die Karte entlang gerader oder gebogener Linien, um Platten zu erstellen. Je detaillierter die Formen der Platten sind, desto interessanter wird Ihre Landschaft. Halte sie groß. Geben Sie jeder Platte eine Richtung, Geschwindigkeit. Bewegen Sie die Platten über einen bestimmten Zeitraum schrittweise um die Karte und ziehen Sie alle Kacheln darüber mit sich.
Wenn sich zwei Platten kreuzen, treffen Sie eine Auswahl, welche über- und welche untergehen. Diese Auswahl kann zufällig sein. Fliesen auf unter bezeichneten Platten werden sofort um 5 Stufen in der Höhe reduziert. Sobald eine Platte über oder unter einer Platte benannt wurde, werden alle zukünftigen Interaktionen mit Platten diesen Regeln folgen:
Alle Platten, die sich kreuzen, verlangsamen sich bei jedem Schritt um 20% ihrer aktuellen Geschwindigkeit. Fügen Sie für zusätzlichen Realismus bei jedem Schritt eine zufällige Änderung der Bewegungsrichtung von -10% bis 10% hinzu.
Nach der gewünschten Anzahl von Schritten. Wahrscheinlich sind 5-10 genug. Alle Kacheln, auf denen sich keine Platten befinden, sollten auf die niedrigste vorhandene Ebene fallen gelassen werden.
Groß oder klein?
Diese Karte kann unverändert verwendet oder erweitert werden, um eine viel größere Karte zu erstellen, indem sie in 4X4-Kacheln (Zellen) aufgeteilt und diese Abschnitte auf der Grundlage ihrer individuellen Höhen erweitert werden. Behandeln Sie die Höhe jeder Zelle als Punkt und erstellen Sie eine glatte Abstufung in der größeren Karte zwischen diesen Punkten. Wenn also die größere Karte 40 × 40 statt 4 × 4 ist und Punkt (0,0) 10 und Punkt (0,1) 1 ist, sind die Kacheln auf der größeren Karte zwischen ihnen 10,9,8,7,6 , 5,4,3,2,1 in der Höhe. Weitere Perlin-Geräusche können hinzugefügt werden, um die Pisten zu glätten. Insgesamt ist diese Skalierungstechnik dem Diamond Square- Algorithmus ähnlich .
Wasser
Um Flüsse und Seen, Ozeane und Grundwasserspiegel zu simulieren. Ich bevorzuge es, zellulare Automaten zu verwenden .
Höhen werden zu Floats oder erweiterten Int-Bereichen, um eine feinkörnigere Verfolgung zu ermöglichen. Wasserzellen haben Sättigungswerte, beispielsweise im Bereich von 1 bis 256. Die Karten sollten gleichmäßig starten. Sie müssen mit den Zahlen für Ihre individuellen Kartengrößen spielen. Im Allgemeinen befolgen Sie jedoch die folgenden Regeln:
Machen Sie diese Überprüfung für jede benachbarte Zelle. Führen Sie eine ausreichende Anzahl von Schritten durch. Wenn Sie möchten, können Sie dieser Simulation eine Temperatur hinzufügen, indem Sie den Betrag der verlorenen / gewonnenen Sättigung um diese Temperatur ändern. Sie können es auch basierend auf der Höhe ändern. Es sollten sich natürliche Seen und Flüsse bilden. Einige werden in den Ozean fallen. (Der Ozean füllt sich wahrscheinlich nicht mit einer Metrik, aber Sie bezeichnen alles unter dem Meeresspiegel sowieso als wassergefüllt.)
Sie können die Temperatur- und Sättigungsdaten beibehalten, um wie in den anderen Antworten zum Erstellen von Biomen verwendet zu werden. Sie sollten VIEL genauer und interessanter sein. Mit schneebedeckten Biomes an den Polen und heißen in der Mitte (wenn Sie eine glatte abgestufte Temperaturliste verwenden).
Sie können auch Wind und damit Temperaturänderungen anhand der Höhen simulieren. Sie können zwischen der Temperatursimulation und der Wassersimulation wechseln, wenn Sie möchten. Ich habe jedoch noch nichts mit Temperaturänderungen gebaut, daher werde ich nicht darauf eingehen, wie das geht.
Sich entwickelnde Landschaften
Wenn Sie die Simulationen für Land, Wasser und Wärme beibehalten und deren Auswirkungen drastisch reduzieren und die Bewegung der Platten stoppen, können Sie alle diese Metriken im Laufe der Zeit weiter ändern. Ich würde die Berechnungen nicht oft durchführen, aber Sie können eine Weltkarte erhalten, die auf diese Weise auf Änderungen reagiert.
Fazit
Während diese Art von Techniken weitaus aufwendiger sind, erzeugen sie viel realistischere und sich entwickelnde Effekte. Nehmen Sie es für das, was es wert ist?
quelle
Sie können Perlin Noise für die Erzeugung des Geländes verwenden. So funktionieren die Biome in Minecraft. Wie Sie sehen, verwendet er eine Heatmap in Kombination mit einer Rainmap, um die Biomes zu erstellen.
quelle