Vorwort
In der Front-End-Entwicklung, insbesondere der Spielentwicklung, werden häufig zufällige Zahlen verwendet, sodass wir uns vorstellen: Math.random , schauen wir uns den folgenden Code an:
für (var i = 0; i <10; i ++) {document.WriteLn (math.random ()+<br />); }Das Ausführen des obigen Codes generiert 10 verschiedene Zahlen. Natürlich können Sie mehr generieren, was ziemlich gut aussieht. Wenn das alles ist, müssen diesen Artikel nicht schreiben.
Beispiel
Versuchen Sie, darüber nachzudenken. Wenn wir in einem bestimmten Szenario ein Spiel machen und der Benutzer auf halbem Weg durch das Stück verlässt, so dass der Benutzer den vorherigen Fortschritt beim nächsten Mal fortsetzen kann. Dann ist das Problem: Wir können einfache Beschreibung Daten wie Benutzerspiele Fortschritt und Benutzerpunkte aufzeichnen, aber die Hindernisse, Fliegerobjekte und viele dekorative Geräte. Ziehen Sie das Spiel. unnötig.
So erscheint die Zufallssamenzahl. Wenn wir einen Samenwert haben, wenn das Element zufällig auf der Leinwand gezogen wird und die Position, Größe usw. aller Elemente auf der Seite basierend auf diesem Saatgut berechnet werden, müssen wir, wenn die zweite Zeichnung gezogen wird, nur in diesem Samen passieren, um die zuvor unvollendeten Leinwandelemente zu reproduzieren.
Zu diesem Zeitpunkt werden Sie feststellen, dass die mit JS gelieferte Mathematik nicht gut funktioniert und die Bedürfnisse nicht erfüllen kann. Schauen wir uns diesen Code weiter an:
Die Codekopie lautet wie folgt:
Math.seed = 5; Math.seedrandom = function (max, min) {max = max || 1; min = min || 0; Math.seed = (math.seed * 9301 + 49297) % 233280; var rnd = math.seed / 233280.0; return min + rnd * (max - min); }; für (var i = 0; i <10; i ++) {document.writeln (math.seedrandom ()+<br />); }
Führen Sie den oben genannten Code aus und Sie werden feststellen, dass sich die generierte Zufallszahl nicht ändert, wenn die Mathematik. Oh, wenn diese Funktion eingeführt wird, kann die Reproduktion der Spielszene erreicht werden. Obwohl weitere Details erforderlich sind, kann der Mechanismus garantiert werden. Der Schwerpunkt dieses Artikels liegt nicht auf der Implementierung eines solchen Spiels.
Der Schwerpunkt dieses Artikels liegt : (Mathematik.
Ein Pseudo-Random-Zahlengenerator wie Math.seedrandom wird als linearer kongruenter Generator (LCG, linearer kongruenter Generator) bezeichnet. Fast alle von der Laufzeitbibliothek bereitgestellten Rand verwenden LCG, was ähnlich ist:
I n+1 = ai n+c (mod m)
Die maximale Periode m der erzeugten Pseudo-Random-Zahlensequenz liegt zwischen 0 und M-1. Um diesen maximalen Zyklus zu erreichen, müssen Sie sich treffen:
1.C und m schließen sich gegenseitig aus
2.A - 1 kann durch alle Primfaktoren von m geteilt werden
3. Wenn m ein Vielfalt von 4 ist, muss a - 1 auch ein Vielfaches von 4 sein
Die obigen drei werden als Hull-Dobell-Theorem bezeichnet. Als Pseudo-Random-Zahlengenerator ist es peinlich, festzuhalten, wenn der Zyklus nicht groß genug ist. Dies ist also eine der Anforderungen. Daher sind Folgendes: A = 9301, C = 49297, M = 233280. Alle oben genannten drei Elemente sind erfüllt.
Zusammenfassen
Das obige ist eine Einführung in die Implementierung und Funktion von Zufallszahlen in JS. Ich hoffe, es wird für JavaScript -Lernende hilfreich sein.