Wie erzeugen Spiele wie Minecraft ganze Welten aus einer Startnummer?

32

Ich möchte eine völlig einzigartige Welt mit Biomen erschaffen (wie Minecraft und ähnliche Spiele). Ich verstehe nicht, wie sie diese ganzen Welten aus einer einzigen "Samen" -Zahl erzeugen. Kann jemand einen grundlegenden Überblick über die Technik geben?

Josh
quelle
13
Notch hat tatsächlich einen Blog-Beitrag über die Geländegenerierung geschrieben , der mittlerweile völlig veraltet ist, da der neue Code Biomes und FRACTALS und andere solche Zauberer enthält. Es gab auch nie einen zweiten Teil.
eine Katze

Antworten:

27
  1. Wie erzeugt man zufälliges X aus einem Startwert? Ein Startwert ist der Anfangszustand eines Zufallszahlengenerators. In den meisten Programmiersprachen können Sie diesen Startwert festlegen. Zum Beispiel verwendet C srand(). Wenn Sie zu Beginn keinen bestimmten Startwert angeben, wird normalerweise ein Zeitstempelwert als Startwert verwendet. Auf diese Weise sind die Zufallszahlen bei jeder Ausführung unterschiedlich.

    // C example
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    
    1270216262 
    1085377743 
    1481765933
    1270216262 
    1085377743 
    1481765933

    Wie Sie sehen, sind die resultierenden Zufallszahlen immer gleich, wenn Sie mit einem bestimmten Wert setzen (ich habe 1 als Startwert verwendet).

  2. Wie erschafft man eine Minecraft-Life-Welt, die auf Zufallszahlen basiert? Notch hat einen Beitrag dazu. Sie können sich auch die Tutorials anderer Leute zu "minecraft-ähnlichen Welten" ansehen. Mir hat dieses Beispiel gefallen : Minecraft-ähnliches Rendering in OpenGL 4 . Die Grundidee ist, Perlin-Rauschen (oder Simplex-Rauschen) zu verwenden. Hier ist eine gute Frage zu Rauschfunktionen: Grundlegendes zu Perlin-Rauschen

Jimmy
quelle
1
Eigentlich wirst du Perlin Noise nicht benutzen können. Ich fürchte, Minecraft hat überhängende Klippen, Höhlen und so weiter, und PN kann das nicht.
JCORA
6
Perlin Noise ist nur ein Geräuschsystem, das Sie im Rahmen einer größeren Geländegenerierungsmethode verwenden können. z.B. Sie können 3D - Perlin Noise mit einem höhenabhängigen Schwellenwert verwenden Klippen zu erzeugen, Höhlen usw. (Bearbeiten - in der Tat, ich über den Link in der Antwort sehen , das ist genau das , was Notch wurde an einer Stelle zu tun.)
Kylotan
1
+1 Kylotan. Hier ist das Zitat aus Notchs Blog: "Insbesondere gibt es für [2D-Perlin-Höhenkarte] keine Möglichkeit, Überhänge zu erzeugen. Deshalb habe ich das System auf ein ähnliches System umgestellt, das auf 3D-Perlin-Rauschen basiert. Anstatt die" Bodenhöhe "abzutasten, habe ich behandelte den Rauschwert als die "Dichte", bei der alles, was niedriger als 0 ist, Luft ist und alles, was höher als oder gleich 0 ist, Boden ist. "
Jimmy