Gamedev-Glossar Sequenz- und Zahlengeneratoren

Verfahrenserzeugung Die Wiedergabefähigkeit wird durch die Verwendung interner Regeln zur Erstellung von Teilen des Spiels im Handumdrehen gesteigert: vom Entwurf eines Dungeons bis zum Bau eines Sonnensystems. Diese Regeln basieren oft auf einer Reihe von Zahlen, die dann vom Programm zur Erstellung des erforderlichen Inhalts interpretiert werden.

Es gibt viele Möglichkeiten, diese Zahlen zu generieren. In diesem Artikel schauen wir uns an Sequenzgeneratoren und Pseudozufallszahlengeneratoren, und ihre Unterschiede.


Sequenzgenerator

Die erste Option - ein Sequenzgenerator - ist die härteste der beiden genannten Verfahren. Aber was ist es?

Ein Sequenzgenerator ist ein Algorithmus, der eine mathematische Formel verwendet, um eine Zahlenfolge zu erzeugen. Als Beispiel wollen wir uns eine sehr einfache Sequenz anschauen - die, die ich erklären möchte, ist eine Ableitung der bekannten Fibonacci-Sequenz.

Grundsätzlich beginnt die Standard-Fibonacci-Sequenz immer mit 0 und 1. Diese Zahlen werden dann zu 1 addiert - also sind die zweite und dritte Zahl in dieser Sequenz 1 und 1. Wenn sie addiert werden, ist das Ergebnis 2, und dies ist die vierte Zahl in der Reihenfolge. Die Sequenz wird wie folgt fortgesetzt, wobei immer die vorherigen zwei Zahlen in der Sequenz hinzugefügt werden, um die nächste zu generieren.


Die Standard-Fibonacci-Sequenz

Implementierung eines Simple Sequence Generators

Das Programmieren eines Sequenzgenerators mag einfach erscheinen, insbesondere wenn man sich auf die Fibonacci-Sequenz stützt, der erste Eindruck täuscht jedoch. Nehmen wir als Beispiel an, wir versuchen, ein zweidimensionales Sternenfeld wie folgt zu erstellen:


Ein einfaches Sternenfeld

Wenn man dieses Sternenfeld betrachtet, kann man sehen, dass jeder Stern durch seine Koordinaten und seine Größe definiert werden kann. Wenn der Bereich jedes Werts zwischen 0 und 99 liegt, können wir eine Zahlenfolge in Dreiergruppen unterteilen - jede Zahl als X-Koordinate, Y-Koordinate oder Größe eines Sterns interpretieren.


Bearbeitung einer Beispielsequenz

Wenn Sie Schritt für Schritt einen Sequenzgenerator basierend auf der Fibonacci-Sequenz programmieren, um eine ähnliche Sequenz zu erstellen, ist dies keine schwierige Aufgabe.

Wir beginnen mit einer Zahl (Samen genannt), die aus vier Ziffern besteht - zum Beispiel 1234. Der Samen wird dann in ein Paar zweistelliger Zahlen aufgeteilt, die die 0 und 1 der Fibonacci-Sequenz einnehmen. Diese Zahlen werden dann unter Verwendung einer Formel verarbeitet, um eine dritte Zahl im Strom zu erzeugen.

Beim Erstellen eines Sequenzgenerators möchten Sie wahrscheinlich, dass die generierten Zahlen in einem bestimmten Bereich liegen (z. B. 0-99). Es ist daher wichtig zu kürzen diese Zahl, wenn sie außerhalb des zulässigen Bereichs liegt. (In unserem Beispiel können wir die "Hundert" -Spalte einfach abschneiden.) Obwohl dies unbedeutend erscheinen mag, erleichtert dies den Workflow, wenn diese Sequenz später bearbeitet wird.

Wenn dieser Prozess wiederholt wird, wird eine Zahlenfolge erstellt, die zur Bearbeitung bereit ist und somit implementiert werden kann:

Sequenz erstellen

Leider erst nachdem Sie die Sequenz als 2D-Zeichnung implementiert haben, beginnen Sie, wiederkehrende Muster zu bemerken. In der Regel wird das Lösen dieser Art von Problemen dazu führen, dass viele Stunden lang Versuche und Fehler durchgeführt werden, um verschiedene Algorithmen zu testen.


Pseudozufallszahlengenerator

Der zweite oben erwähnte Ansatz verwendet einen Pseudozufallszahlengenerator (PRNG). Bevor ich erkläre, was ein PRNG ist, denke daran, dass der Computer eine logische Maschine ist - er muss bestimmte Regeln einhalten. Daher ist nichts in einem Computer wirklich zufällig.

Ein Pseudozufallszahlengenerator ist nur ein Algorithmus, der (scheinbar) Zufallszahlen erzeugt. Ich sage "scheinbar", weil ein PRNG immer noch vordefinierte Formeln verwendet, um die Zahlen zu erzeugen. Dies bedeutet, dass ein PRNG noch ein Sequenzgenerator ist.

Die Haupteigenschaft eines PRNG im Vergleich zu anderen Sequenzgeneratoren besteht darin, dass die Anzahl der Male, die unterschiedliche Zahlen erscheinen, ausgeglichen wird. Dieser Prozess wird durch komplexe Formeln und Algorithmen durchgeführt und bedeutet, dass die von ihm erzeugten Zahlen genauso unterschiedlich erscheinen wie die Anzahl von Würfeln mit wiederholten Würfeln oder Gewinnzahlen.


Ein Beispiel für eine PRNG-Sequenz

Während ein Sequenzgenerator normalerweise speziell für ein Problem entwickelt wurde, wird ein PRNG verwendet, wenn die generierte Sequenz normalerweise verworfen wird oder nicht beibehalten werden muss.


PRNG vs Sequenzgenerator

Ein PRNG ist einfacher zu verwenden und zu implementieren als ein Sequenzgenerator und kann vielfältig eingesetzt werden. Trotzdem ist es manchmal sinnvoller, einen zusätzlichen Schritt zu gehen und einen Sequenzgenerator zu verwenden. Warum?

In komplexen Systemen ist es wichtig, den Platz optimal zu nutzen. Die Verwendung eines PRNG bedeutet, dass Sie zum Speichern der Details eines Sonnensystems die gesamte Sequenz speichern müssen. Wenn Sie dagegen einen Sequenzgenerator verwenden, können Sie den ursprünglichen Startwert und die Länge der Sequenz einfach speichern. (In diesem Fall ist es entscheidend, dass der Sequenzgenerator aus einem gegebenen Samen die gleiche Sequenz erzeugt.) Dasselbe kann nicht über PRNGs gesagt werden: Im Allgemeinen legt ein PRNG seinen Samen nicht frei und akzeptiert auch keinen. Dies macht das Replizieren einer PRNG-Sequenz extrem schwierig.

Manchmal, wenn auch selten, könnte ein PRNG eine scheinbar voreingenommene Sequenz liefern (auf dieselbe Weise, wie eine faire Münze gelegentlich fünf Mal hintereinander landen kann). Dies ist möglicherweise auf den ersten Blick nicht leicht zu erkennen oder wenn Sie die Sequenz als Ganzes betrachten. Wenn Sie jedoch das erzeugte Bild betrachten, können Sie Cluster von Sternen oder Planeten bemerken. Durch die Verwendung eines Sequenzgenerators kann dieses Problem minimiert werden, da ein solcher Algorithmus für das vorliegende Problem maßgeschneidert ist.

Ein weiterer Vorteil, ähnlich dem vorherigen, ist Inhaltskontrolle. Wenn Sie ein entferntes Sternenfeld prozedural generieren möchten, ist es nur natürlich, dass kleine Sterne häufiger als die größeren Sterne angezeigt werden sollen. Bei Verwendung eines unveränderten PRNG ist diese Verzerrung nicht möglich. Durch Verwendung eines Sequenzgenerators können Sie jedoch selbst die erforderliche Verzerrung bereitstellen. Auch hier kommt es auf die Formel oder die Formeln an, die Sie verwenden möchten, und auf die Art und Weise, wie Sie die resultierende Zeichenfolge interpretieren.

Während ein PRNG nützlich sein könnte, wäre es beim Erstellen einer prozeduralen Generierungs-Engine wahrscheinlich am besten, einen spezifischeren Sequenzgenerator zu wählen. Die damit verbundenen Vorteile sind vorteilhaft und stellen sicher, dass die Implementierung die Möglichkeit hat, sich vom Rest abzuheben.