Frage:
Wie viele Weltsamen enthält Minecraft?
John
2015-07-14 14:25:59 UTC
view on stackexchange narkive permalink

Ich habe mich gefragt, wie viele Seeds in Minecraft (1.8.7) enthalten sind und wie wenig Speicherplatz belegt ist. Ich denke, dass es viele Samen pro Welttyp gibt, was auch für JEDE kundenspezifische Kombination berechnet wird. Ich bin sicher, dass sie über zig Millionen sind. Können Sie mir die Anzahl der Samen mitteilen?

Ich frage nur nach der Anzahl der Samen.Wenn zum Beispiel jemand jeden Welttyp mit jedem Samen und jeder benutzerdefinierten Möglichkeit spielt (Beispiel: Schieberegler, die um 1 in eine andere Richtung verschoben wurden, bin ich sicher, dass jemand das nicht wirklich tut).Auf wie vielen Samen hätte diese Person [email protected]
@5pike Die von Ihnen eingegebenen Zeichen sind eigentlich irrelevant.Der gesamte Text wird in einen einzigen Wert gehasht.
Minecraft speichert nicht jede mögliche Welt.Welten werden zufällig generiert und der Startwert wird verwendet, um den Zufallszahlengenerator zu beeinflussen (auf vorhersehbare Weise, sodass bei Verwendung desselben Startwerts dieselben "Zufallszahlen" erzeugt werden).
Das Missverständnis, das Sie zu haben scheinen, ist, dass Samen in einigen Spielen der alten Schule so etwas wie Level-Passwörter sind - sie sind es nicht.Stattdessen stellt jeder Samen einfach einen Ausgangspunkt dar, um die ganze Welt Stück für Stück nach Bedarf zu erzeugen.Es gibt also keine "speziellen", "versteckten" Samen - der Hauptgrund für die Verwendung eines benutzerdefinierten Samens (abgesehen vom Unterhaltungswert) ist, dass Sie auf derselben Karte wie Ihre Freunde spielen können - Sie sind beide damit einverstanden, in einer Welt mit einem zu spielenSamen von "HumblePhoenix", und Sie beide haben das gleiche Startgelände, die gleichen Ressourcen usw.
Vielleicht möchten Sie mehr über [Pseudozufallszahlengeneratoren] erfahren (https://en.wikipedia.org/wiki/Pseudo_random_number_generator).
Ich wusste, was ein Same ist.Damit habe ich viele Welten neu [email protected]
Sieben antworten:
#1
+52
SirBenet
2015-07-14 15:05:31 UTC
view on stackexchange narkive permalink

Es gibt 18.446.744.073.709.551.616 (2 sup> 64 sup>) mögliche Samen. Alle Seeds sind eine Zahl. Wenn Buchstaben in das Seed-Feld eingegeben werden, wird die Funktion hashCode () von Java verwendet, um daraus eine Zahl zu machen.

Seeds verbrauchen nicht viel Festplatte Leerzeichen (als lange Ganzzahl gespeichert, dh nur 8 Bytes pro Welt), da nur ein Startwert gespeichert wird, der für eine Welt ausgewählt wurde; nicht alle 18 Billionen. Wenn ein Startwert für die Weltgenerierung benötigt wird, wird ein zufälliger Startwert aus der Systemuhr generiert (oder manuell vom Benutzer eingegeben) und dann gespeichert und zur Generierung der Welt verwendet.

Wie viele mögliche Welten können generiert werden? , einschließlich Anpassungsoptionen ? Wahrscheinlich kann mehr als jeder Computer mit allen in einer benutzerdefinierten Welt verfügbaren Float-Schiebereglern rechnen.


Hier ist ein Bild, das einen zufällig generierten Startwert zeigt:

enter image description here

-3.010.441.696.458.036.422 ist weitaus niedriger als sowohl -2.147.483.648 als auch -140.737.488.355.328. Dies bedeutet, dass Seeds Ganzzahlbereiche mit mehr als 32 Bit und 48 Bit verwenden.

Ihre Bearbeitung fügt Ihrer Antwort nichts Nützliches hinzu.Bitte setzen Sie es zurück und fügen Sie es als Kommentar zu der Antwort hinzu, die Sie für falsch halten.
@Lilienthal Die Bearbeitung zeigt, dass der Bereich der Samen (mindestens) 2 ^ 64 beträgt, was meine Antwort erzwingt.Ich denke, es ist sehr nützlich zu wissen, wann eine Antwort richtig ist.
@ratchetfreak Der im Bild gezeigte Startwert wurde zufällig generiert und liegt außerhalb des Bereichs einer 48-Bit-Zahl.
@colorfusion dann müssen sie RNG geändert haben, seit ich das letzte Mal überprüft habe
Haben Sie eine Vorstellung davon, wie viele Weltmöglichkeiten es tatsächlich gibt?Hat die prozedurale Generierung tatsächlich eine Entropie von 64 Bit oder ist es näher, 32 Bit zu sagen?
@colorfusion Das Bild kann nützlich sein (auch wenn ein einzelner Wert nicht viel über den Bereich aussagt), aber die Antworten sollten im Allgemeinen in sich geschlossen sein.Es wirkt auch eher passiv aggressiv, andere Antworten als falsch herauszustellen, insbesondere wenn Sie dem anderen Poster keine Möglichkeit bieten, seine Antwort zu verbessern oder zurückzuziehen, indem Sie einen Kommentar hinterlassen.
@Lilienthal Die andere Antwort war die akzeptierte Antwort zum Zeitpunkt dieser Bearbeitung, daher hatte ich das Bedürfnis, OP zu benachrichtigen, dass die von ihnen akzeptierte Antwort falsch ist und warum sie falsch ist.Ich versuche nicht, passiv aggressiv zu sein, sondern stelle nur sicher, dass die Leute die richtigen Informationen haben.Wenn meine Antwort falsch ist, würde ich mich freuen, wenn jemand eine andere Antwort mit der richtigen Antwort schreibt und erwähnt, warum meine falsch ist.
Sie sagen, dass die Zahl, die Sie anzeigen, "weit niedriger ist als der von Kevin van der Velden behauptete Mindestwert von -2.147.483.648", aber Sie sagen auch, "Javas hashCode () -Funktion wird verwendet, um daraus eine Zahl zu machen."Das heißt, es ist nur eine andere Art, "-140449792" zu sagen, was nicht weniger als "-2147483648" ist.Was wahr ist?
@JonHanna Ich glaube, "hashCode ()" wird nur verwendet, wenn der eingegebene Startwert Buchstaben enthält.Wenn Sie "1" in die Seedbox eingeben, ist der Level-Seed nur 1. -140449792 erstellt nicht die gleiche Welt wie -3010441696458036422.
@JonHanna `hashCode ()` wird nur verwendet, wenn der eingegebene Startwert Buchstaben enthält.Es würde nicht auf -3010441696458036422 verwendet werden.
#2
+19
BlueRaja - Danny Pflughoeft
2015-07-14 20:55:54 UTC
view on stackexchange narkive permalink

Ich habe ursprünglich angegeben, dass Minecraft Javas Standardklasse Random für die Erzeugung von Pseudozufallszahlen verwendet. Random verwendet 48-Bit-Seeds.

Dies würde jedoch bedeuten, dass die Seeds 1 und 2 48 sup> +1 resultieren in der gleichen Welt, auf die andere hingewiesen haben, ist nicht wahr. Also habe ich noch ein bisschen gegraben.


Minecraft scheint überall Random zu verwenden, außer für den Code zur Biomgenerierung. Dort verwendet es einen eigenen hausgemachten Zufallsgenerator. From GenLayer.java:

 protected int nextInt (int UpperBound) {int randVal = (int) ((this.chunkSeed >> 24)% (long) UpperBound); if (randVal < 0) {randVal + = UpperBound; } this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = this.worldGenSeed; return randVal;}  

Dies ist ein linearer Kongruenzgenerator mit den Werten a = 6364136223846793005 und m = 1442695040888963407 . Dies wird in der Tat 2 sup> 64 sup> unterschiedliche Ausgabestreams erzeugen, und somit gibt es 2 64 sup> unterschiedliche Welten.

Der Anspruch auf Das Minecraft-Wiki, dass "Multiplayer-Seeds möglicherweise nur 2 48 sup> mögliche Werte [..] haben, weil Random.nextLong () " verwendet wird, ist falsch . Die Einzelspieler- und Mehrspieler-Weltgeneratoren unterscheiden sich nicht.


Die Verwendung von Random überall sonst bedeutet, dass einige Dinge die sein werden Gleiches gilt für Samen, die um 2 sup> 48 sup> versetzt sind, wie z. B. Samen 1 und 2 48 sup> +1. Zum Beispiel sollte die Position der Erze zwischen den beiden fast identisch sein (mit Ausnahme der Erze, die durch Höhlensysteme entfernt wurden) .

Auch die Verwendung von Samen pro Stück hat einige interessante Konsequenzen. Zum Beispiel besteht angesichts der geringen Anzahl von Biomen und der großen Anzahl von Brocken in jeder gegebenen Welt eine sehr hohe Wahrscheinlichkeit, dass es zwei Brocken gibt, die genau gleich sind. Das Finden dieser Brocken erfordert jedoch Mathematik, die mir ein Rätsel ist. Wenn jemand daran interessiert ist, es herauszufinden, lautet der Code zum Initialisieren des chunkSeed

  public void initChunkSeed (long chunkX, long chunkY) {this.chunkSeed = this. worldGenSeed; für (int i = 0; i < 2; i ++) {this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = chunkX; this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = chunkY; }}  
@Texenox: Nein. Der Eingabewert muss gehasht werden, wenn er nicht numerisch ist (da der Startwert eine Zahl sein muss). Wenn jedoch auch numerische Eingaben gehasht würden, könnten Sie keine zufälligen Startwertwelten neu erstellen, da Hashes vorhanden sindEinweg.Die gesamte Hashing-Diskussion ist also ein roter Hering.
Meine akzeptierte Antwort (und die ursprüngliche Frage) betrifft nur mögliche Samen, keine möglichen Welten;Unsere beiden Antworten mögen richtig sein.Wenn Ihre Antwort der Fall ist, sollten Welten, die mit Samen wie 281474976710657 und 1 erzeugt wurden, nicht gleich sein?Ich kann mich darin irren.
Die anderen Bits des 64-Bit-Seeds können jedoch verwendet werden, um ein RNG pro Block oder einen anderen Parameter zu initialisieren.Minecraft verwendet einen koordinatenbasierten prozeduralen Algorithmus zur Geländegenerierung (die generierte Welt ist also unabhängig davon, wie Sie zuerst reisen), anstatt eines einzelnen Algorithmus, der einmal basierend auf einer einzelnen Zufallssequenz ausgeführt wird.
mit der Ausnahme, dass "Random.nextLong ()" zwei Iterationen dieses 48-Bit-Seeds verwendet.Es geht im Grunde zweimal "Random.nextInt ()" und schiebt sie zu einer 64-Bit-Zahl zusammen.Es ist also durchaus möglich, dass ein 64-Bit-Startwert aus einem zufälligen Objekt stammt.
@corsiKa: Sie verwechseln 64-Bit-Ausgabe mit 64-Bit-Startwert.Das PRNG erzeugt viele Milliarden von Bits, bevor es sich wiederholt. In gewissem Sinne ist die Ausgabe also "Milliarden von Bits", viel mehr als 64. Aber die Eingabe (Startwert) ist immer noch 48 Bit;Diese 48-Bit bestimmen vollständig, welche Ausgabe sein wird.
@BlueRaja-DannyPflughoeft Wenn ich also verstehe, was Sie richtig sagen, sollten Samen mit denselben 48 nachfolgenden Bits identische Welten produzieren?Und so sollten Samen wie 281474976710657 und 1 genau die gleichen Welten produzieren?
@BlueRaja-DannyPflughoeft Ich verwechsle nichts mit irgendetwas.Nur weil es nur 2 ^ 48 Möglichkeiten gibt, ein zufälliges Objekt zu starten, heißt das nicht, dass es nur 2 ^ 48 Möglichkeiten gibt, ein zufälliges Objekt zu verwenden.Es ist sehr wahrscheinlich, dass das Zufallsobjekt nicht nur zum Bestimmen des Startwerts erstellt wurde, und selbst wenn dies der Fall war, ist es immer noch schwierig, auf das zu schließen, was Sie aus dieser Aussage gesagt haben.Ihre Beweise halten einfach nicht.
@colorfusion: Sie hatten Recht;siehe bearbeiten.
#3
+6
Ryan
2015-07-15 01:56:27 UTC
view on stackexchange narkive permalink

Die Antwort finden Sie hier: http://minecraft.gamepedia.com/Seed_(level_generation)

Was, obwohl es bereits auf dieser Seite verlinkt ist, niemand scheint um alles gelesen zu haben.

Zusammenfassend:

Wenn Sie ein Wort oder eine Phrase verwenden, dann String.hashCode () wird aufgerufen und begrenzt Ihre maximale Anzahl an Seeds aufgrund seiner Implementierung auf 2 ^ 32.

Wenn Sie Ihre eigene Nummer eingeben oder das System den Samen bestimmen lassen, beträgt Ihr Samenlimit 2 ^ 64 Samen.

JEDOCH:

Wenn es sich um eine Multiplayer-Welt handelt, implementieren sie die Java-Funktion nextLong () , und die Einschränkungen hierfür sind 2 ^ 48 mögliche Startoptionen.

Der letzte Satz macht keinen Sinn.Sie führen mehrere Probleme zusammen _ (der Startwert für "new Random (Startwert)" beträgt nur 48 Bit, was nichts mit "Überladung" von nextLong () ") zu tun hat.
Es ist "String # hashCode ()" nicht "Java.hashCode ()".Es gibt keine Java-Klasse mit einer statischen Methode hashCode.(Ja, Sie könnten davonkommen, indem Sie das Pfund durch einen Punkt ersetzen, aber ich bin gerne pedantisch.)
@BlueRaja-DannyPflughoeft Ich bringe nichts zusammen, ich wiederhole nur, was der ** ENTWICKLER ** auf seiner eigenen Wiki-Seite sagt.Und ich habe nie etwas über "Überladen" von "nextLong ()" gesagt.Streiten Sie also so viel Sie wollen, es ändert nichts an dem, was der Entwickler sagt.Was das `Java.hashCode`-Ding betrifft, habe ich es einfach falsch eingegeben, als ich versucht habe, zusammenzufassen, anstatt nur zu kopieren und einzufügen.Der Entwickler listet es als "String.hashCode ()" auf.Mein Fehler.
Der Entwickler pflegt diese Wiki-Seite nicht, zufällige Benutzer tun dies.Es ist keine offizielle Informationsquelle mehr als diese Seite.
#4
+2
Elva
2015-07-14 14:59:52 UTC
view on stackexchange narkive permalink

Seeds werden in eine 32-Bit-Ganzzahl mit Vorzeichen gehasht. Der Programmierer spricht für eine Zahl, die positiv oder negativ sein kann und 32 Werte in Basis 2 aufweist.

Dies ergibt die Zahlen von -2.147.483.648 bis 2.147.483.647.

Abhängig von der Implementierung von Minecraft Einige davon können in bestimmten Aspekten zur gleichen Welt führen, z. B. wenn 2 Samen mit unterschiedlichen Biomen, aber derselben Höhenkarte vorhanden sind.

(Teil-) Korrektur: Wenn Sie keinen Textsamen festlegen, wird Minecraft stattdessen Nehmen Sie die aktuelle Zeit als Wert, dh eine 64-Bit-Zahl, damit dort mehr Optionen verfügbar sind.

Quelle: http://minecraft.gamepedia.com/Seed_(level_generation)

Wenn Minecraft einen Saitensamen durch die aktuelle Zeit ersetzt, warum bekomme ich dann immer die gleiche Welt für den Samen "SEED"?
Gibt es eine spezielle Logik, die die Eingabe von Zahlen mit mehr als 32 Bit verbietet?Sie sagen, dass das Spiel 64-Bit-Zeitwerte verarbeiten kann, aber man kann 32-Bit-Zahlen nur manuell eingeben, oder?
@OrcJMR ersetzt den String-Startwert nicht durch die aktuelle Zeit. Wenn Sie ihn * nicht * festlegen, wird die aktuelle Zeit verwendet.Aus diesem Grund können Sie auch keinen 64-Bit-Wert über das Textfeld einfügen.Dieser Text wird (über einen Einweg-Hash) in eine 32-Bit-Zahl konvertiert.Wenn Sie eine beliebige Zahl angeben möchten, können Sie die Kartendatei bearbeiten, die generierten Blöcke löschen und dann das Spiel starten, nehme ich an.
@KevinvanderVelden Wenn die eingegebene Zeichenfolge numerisch ist, wird sie in eine lange Zeichenfolge analysiert und als Startwert verwendet. Wenn dies nicht der Fall ist, wird String.hashCode verwendet.
Oh, mein schlechtes Lesen schlägt in dieser Zeitfrage fehl.Aber ich bin schon zum Spiel gekommen und habe getestet: http://i.imgur.com/x0fMiR3.png Es ist definitiv möglich, 64-Bit-Ganzzahlen einzugeben, wie diese über 9 Milliarden.
Oh, Lust, wusste das nicht.Das hat @ratchetfreak gesagt
#5
+1
Ionic
2015-07-14 14:37:26 UTC
view on stackexchange narkive permalink

Die Anzahl der Samen ist nicht durch die Anwendung selbst begrenzt. Nur durch die Länge des zulässigen Werts für den Samen selbst.

Die Samen werden nicht in Minecraft gespeichert. Der Keim selbst wird nur eine Art "Startwert" sein, bei dem die Weltgeneration beginnt, den Prozess zu generieren. Es gibt nicht für jede Welt im Spiel selbst einen Samen. Sie erhalten nur dieselbe Welt wie der Generierungsprozess und generieren aufgrund derselben Startbedingungen dieselbe Welt.

Sie können sie vergleichen, indem Sie die Schritte von Ihrem Heimweg zu Ihrer Arbeit zählen. Wenn jeden Tag die gleiche Bedingung gilt, wird der gleiche Weg verwendet. Wenn es eines Tages schneit oder Sie etwas später am Tag aufbleiben, ist die Startbedingung anders und Sie werden einen anderen Weg oder eine andere Zeit für Ihre Arbeit einschlagen. Wenn jedoch an einem anderen Tag dieselbe unterschiedliche Bedingung gilt, endet sie auf dieselbe Weise. Nur als Beispiel, um es für Nicht-Techniker zu verdeutlichen. :-)

#6
+1
Jayden Miller
2015-07-15 08:32:19 UTC
view on stackexchange narkive permalink

Computer erzeugen keine Zufallszahlen. Wenn Sie eine Zufallszahl abrufen, erhalten Sie nur die nächste Zahl in einer Folge von scheinbar zufälligen Zahlen (sie haben kein Muster oder keine Verbindung zueinander).

Ein Startwert ist das, was diese Liste von Zahlen wirklich zufällig macht. In den meisten Fällen wird die aktuelle Systemzeit als Startwert verwendet. Sie können sich einen Startwert als einen Weg vorstellen, um wiederholt das gleiche zufällige Ergebnis zu erzielen.
Die Art und Weise, wie eine Minecraft-Welt erzeugt wird, beruht auf einem Algorithmus, der wiederholt Zufallszahlen abruft, z. B. wann die Oberflächenhöhe erhöht werden soll, usw.

Bei Verwendung von Seeds sind diese Zufallszahlen jedes Mal gleich, was dazu führt, dass eine Welt dieselbe ist, wenn derselbe Seed verwendet wird.
Davon abgesehen belegen Seeds keinen Speicherplatz, weil sie es sind einfach eine Möglichkeit, die Liste der scheinbar zufälligen Zahlen zu verschlüsseln / zu randomisieren.

Nun, es wählt tatsächlich einen der Samen aus, basierend auf der Zeit, auf die Ihr Computer eingestellt ist.
Noch wichtiger ist, dass dies die gestellte Frage nicht beantwortete.
#7
-1
MyTreeko78255
2016-09-02 19:23:38 UTC
view on stackexchange narkive permalink

1.2413916e + 61

anscheinend das Es ist eine sehr große Zahl, aber 48x!wäre die Antwort

Diese Antwort wäre viel besser, wenn Sie erklären würden, woher diese Zahlen kommen - was ist 48!soll darstellen?Ab sofort sieht es so aus, als ob dies völlig falsch ist.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...