Richtiger Weg, um „zufällig“ fließendes Gelände zu erzeugen

9

Ich erstelle ein einfaches Top-Down-RTS-Spiel. Ich plane "zufällig" Karten im laufenden Betrieb zu generieren, wenn ich muss. Ich plane alles in 'Pässen':

  1. Füllen Sie das Gelände mit Gras
  2. Gehen Sie zurück und fügen Sie einige zufällige Spritzer Kies hinzu
  3. Runden Sie den Kies ab
  4. Zeichne die Berglandschaft auf die zweite Ebene
  5. Berge abrunden
  6. usw. usw.

Schauen Sie sich jetzt das folgende Bild an:

Geben Sie hier die Bildbeschreibung ein

Ich habe dies mit meinem Karteneditor von Hand erstellt, aber ich plane, dass dies im Grunde das Ergebnis nach hoffentlich bestandenem / Schritt 3 ist.

Wie soll ich entscheiden, wann und wo ich meinen Kies so platzieren soll, dass er zumindest unregelmäßig geformt und sporadisch genug ist, um natürlich auszusehen?

Danke, wenn du kannst! Jede Hilfe wird geschätzt!

Als Anmerkung:

Bei jedem Durchgang durchlaufe ich im Grunde alle meine Kacheln (die Karte ist in 40 x 40 Kacheln unterteilt), ähnlich wie folgt:

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}
Freesnöw
quelle

Antworten:

5

Sie können mit Perlin Noise herumspielen (eine Implementierung finden Sie in meiner StackOverflow-Antwort ), um eine Höhenkarte zu erstellen. Über die Höhenkarte können Sie bestimmte Höhenbereiche verschiedenen Kacheln zuordnen. Etwas wie:

  • Top 20% Schnee
  • Nächste 20% Kies
  • Nächste 40% Gras
  • Letzte 20% Wasser

Sie müssen mit den Werten des Perlin Noise-Generators spielen, um ein Terrain zu erhalten, das generiert werden kann und gut aussieht.

Nick Banks
quelle
5

Wie die anderen gesagt haben, sollte Perlin-Rauschen eine gute Datenquelle für die Entscheidung sein, wo verschiedene Arten von Kacheln platziert werden sollen. Ich möchte diese Idee ergänzen und zwei zusätzliche Ressourcen verknüpfen, die beim dritten Schritt Ihrer Checkliste hilfreich sein sollten - Abrunden der Ecken .

Dies ist ein Prozess, der als automatisches Kacheln bezeichnet wird und dessen Implementierung nicht allzu schwierig ist. Es gibt viele verschiedene Möglichkeiten, aber die meisten von ihnen basieren auf der Berechnung von Adjazenzinformationen für jede Kachel, um zu entscheiden, welche Grafik an dieser Stelle gezeichnet werden soll.

Eine sehr elegante Möglichkeit, dieses Problem zu lösen, besteht darin, jeder benachbarten Kachelrichtung einen eindeutigen Flaggenwert zuzuweisen und Ihr Spritehseet so auszulegen, dass der Wert, den Sie durch Addieren aller benachbarten Flags einer Kachel erhalten, der korrekten Position der entspricht Kachel im Spritesheet. In diesem Artikel finden Sie eine sehr klare Beschreibung der Technik.

Und hier ist eine weitere Ressource, die eine weitere Variation der Technik beschreibt.

David Gouveia
quelle
Hey, nur um dich wissen zu lassen, deine Antwort war äußerst hilfreich, um die Ecken abzurunden. Vielen Dank :) Jetzt funktioniert eigentlich alles (sogar die abgerundeten Ecken)!
Freesnöw
4

Im Wesentlichen können Sie die Perlin Noise- Generierung verwenden, um Ihre Karten zu generieren. Sie würden die generierte Höhenkarte abtasten und Kiesblöcken Teilen der Karte zuweisen, die über einer bestimmten Höhe liegen.

Hier finden Sie einen hervorragenden Nachschlagewerk zur Implementierung eines solchen Systems und verschiedener Geländetypen, die Sie generieren können.

Die Beispiele haben viel mehr Schritte als Sie benötigen würden, aber das Konzept ist das gleiche.

Mehr über Minecraft-artige Weltgen

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

Geben Sie hier die Bildbeschreibung ein

David Young
quelle