Question:
Combien de graines du monde y a-t-il dans Minecraft?
John
2015-07-14 14:25:59 UTC
view on stackexchange narkive permalink

Je me demandais combien il y avait de graines dans Minecraft (1.8.7) et comment cela occupait-il si peu d'espace disque? Je pense qu'il y a beaucoup de graines par type de monde, en calculant cela aussi pour TOUTES les combinaisons personnalisées. Je suis sûr qu'ils dépassent des millions de dollars. Pouvez-vous me dire le nombre de graines?

Je demande simplement le nombre de graines.Par exemple, si quelqu'un joue tous les types de monde avec chaque graine et chaque possibilité personnalisée (exemple: les curseurs déplacés de 1 vers une autre direction, je suis sûr que quelqu'un ne le fera pas vraiment).Sur combien de graines cette personne aurait joué?@Ionic
@5pike, les caractères que vous saisissez ne sont en fait pas pertinents.Le texte entier est haché en une seule valeur.
Minecraft ne stocke pas tous les mondes possibles.Les mondes sont générés de manière aléatoire et la graine est utilisée pour influencer le générateur de nombres aléatoires (de manière prévisible, de sorte que si vous utilisez la même graine, elle crée les mêmes nombres «aléatoires»)
Le malentendu que vous semblez avoir est que les semences sont quelque chose comme des mots de passe de niveau dans certains jeux de la vieille école - ils ne le sont pas.Au lieu de cela, chaque graine représente simplement un point de départ pour générer le monde entier, pièce par pièce selon les besoins.Il n'y a donc pas de graines «spéciales», «cachées» - le principal intérêt de l'utilisation d'une graine personnalisée (en dehors de la valeur de divertissement) est que vous puissiez jouer sur la même carte que vos amis - vous acceptez tous les deux de jouer dans un monde avec ungraine de dire `HumblePhoenix`, et vous aurez tous les deux le même terrain de départ, les mêmes ressources, etc.
Vous voudrez peut-être en savoir plus sur les [générateurs de nombres pseudo aléatoires] (https://en.wikipedia.org/wiki/Pseudo_random_number_generator).
Je savais ce qu'est une graine.J'ai redémarré de nombreux mondes en utilisant cela.@Luaan
Sept réponses:
SirBenet
2015-07-14 15:05:31 UTC
view on stackexchange narkive permalink

Il existe 18 446 744 073 709 551 616 (2 64 ) graines possibles. Toutes les graines sont un nombre, si des lettres sont entrées dans la boîte de graines, la fonction hashCode () de Java est utilisée pour le transformer en nombre.

Les graines n'utilisent pas beaucoup de disque space (stocké sous la forme d'un entier long, soit seulement 8 octets par monde) car seule une graine qui a été choisie pour un monde est stockée; pas tous les 18 quintillions. Lorsqu'une graine est nécessaire pour la génération du monde, une graine aléatoire est générée à partir de l'horloge système (ou entrée manuellement par l'utilisateur) et est ensuite stockée et utilisée pour générer le monde.

Combien de mondes possibles peuvent générer , y compris les options de personnalisation ? Probablement plus que n'importe quel ordinateur peut calculer tous les curseurs flottants disponibles dans un monde personnalisé.


Voici une image montrant une graine générée aléatoirement:

enter image description here

-3.010.441.696.458.036.422 est bien inférieur à -2.147.483.648 et -140.737.488.355.328. Cela signifie que les valeurs de départ utilisent des plages d'entiers signés supérieures à 32 bits et 48 bits.

Votre modification n'ajoute rien d'utile à votre réponse.Veuillez l'annuler et l'ajouter en commentaire sur la réponse que vous estimez incorrecte.
@Lilienthal La modification montre que la plage de graines est (au moins) 2 ^ 64, ce qui renforce ma réponse.Je pense qu'il est très utile de savoir quand une réponse est correcte.
@ratchetfreak La graine montrée dans l'image a été générée aléatoirement et est en dehors de la plage d'un nombre de 48 bits.
@colorfusion, ils doivent avoir changé de RNG depuis ma dernière vérification
Avez-vous une idée du nombre de possibilités mondiales qui existent réellement?La génération procédurale a-t-elle réellement une entropie de 64 bits, ou est-elle plus proche de dire 32 bits?
@colorfusion L'image pourrait bien être utile (même si une seule valeur ne dit pas grand-chose sur la plage), mais les réponses devraient généralement être autonomes.Il apparaît également comme plutôt agressif passif de sélectionner d'autres réponses comme étant incorrectes, surtout si vous n'offrez pas à l'autre poster une chance d'améliorer ou de rétracter sa réponse en laissant un commentaire.
@Lilienthal L'autre réponse était la réponse acceptée au moment de cette modification, donc j'ai ressenti le besoin de notifier à OP que la réponse qu'ils ont acceptée est fausse, et pourquoi elle est fausse.Je n'essaie pas d'être passif et agressif, je m'assure simplement que les gens ont la bonne information.Si ma réponse est incorrecte, je serais heureux que quelqu'un écrive une autre réponse avec la bonne réponse, en mentionnant pourquoi la mienne est incorrecte.
Vous dites que le nombre que vous affichez est "bien inférieur aux -2 147 483 648 que Kevin van der Velden prétend être la valeur minimale", mais vous dites aussi que "la fonction hashCode () de Java est utilisée pour le transformer en nombre".ce qui signifie que c'est juste une autre façon de dire «-140449792», qui n'est pas inférieur à «-2147483648».Ce qui est vrai?
@JonHanna Je crois que `hashCode ()` n'est utilisé que si la graine saisie contient des lettres.Si vous entrez "1" dans la boîte de départ, le niveau de départ est juste 1. -140449792 ne crée pas le même monde que -3010441696458036422.
@JonHanna `hashCode ()` n'est utilisé que si la graine saisie contient des lettres.Il ne serait pas utilisé sur -3010441696458036422.
BlueRaja - Danny Pflughoeft
2015-07-14 20:55:54 UTC
view on stackexchange narkive permalink

J'ai initialement déclaré que Minecraft utilise la classe Random par défaut de Java pour la génération de nombres pseudo-aléatoires. Random utilise des valeurs de départ de 48 bits.

Cependant, cela impliquerait que les valeurs de départ 1 et 2 48 +1 résultent dans le même monde, ce que d'autres ont souligné n'est pas vrai. J'ai donc creusé un peu plus.


Minecraft semble utiliser Random partout sauf pour le code de génération de biome. Là, il utilise son propre générateur aléatoire maison. De 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;}  

Ceci est un générateur congruentiel linéaire avec les valeurs a = 6364136223846793005 et m = 1442695040888963407 . Cela produira en effet 2 64 flux de sortie distincts, et donc il y a 2 64 mondes distincts.

La revendication sur le wiki Minecraft selon lequel "Les graines multijoueurs ne peuvent avoir que 2 48 valeurs possibles [..] en raison de l'utilisation de Random.nextLong () " est incorrect . Les générateurs de monde solo et multijoueur ne sont pas différents.


L'utilisation de Random partout ailleurs signifie que certaines choses seront idem entre les graines qui sont décalées de 2 48 , comme les graines 1 et 2 48 +1. Par exemple, l'emplacement des minerais devrait être presque le même entre les deux (sauf pour les minerais enlevés par les systèmes de grottes) .

De plus, l'utilisation de graines par bloc a des conséquences intéressantes. Par exemple, étant donné le petit nombre de biomes et le grand nombre de morceaux, dans un monde donné, il y a une très forte probabilité qu'il y ait deux morceaux qui soient exactement les mêmes. Trouver ces morceaux, cependant, implique des mathématiques qui me dépassent. Si quelqu'un est intéressé à le découvrir, le code pour initialiser le chunkSeed est

  public void initChunkSeed (long chunkX, long chunkY) {this.chunkSeed = this. worldGenSeed; pour (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: Non. La valeur d'entrée doit être hachée si elle n'est pas numérique _ (puisque la valeur de départ doit être un nombre) _, mais si les entrées numériques étaient également hachées, vous ne seriez pas en mesure de recréer des mondes aléatoires, car les hachages sontune manière.Donc, toute la discussion sur le hachage est un hareng rouge.
Ma réponse acceptée (et la question originale) ne concerne que les semences possibles, pas les mondes possibles;nos deux réponses peuvent être correctes.Si votre réponse est le cas, les mondes générés avec des graines telles que 281474976710657 et 1 ne devraient-ils pas être les mêmes?Je peux me tromper là-dessus.
Les autres bits de la graine 64 bits peuvent cependant être utilisés pour initialiser un RNG par bloc ou un autre paramètre.Minecraft utilise un algorithme de génération de terrain procédural basé sur les coordonnées (de sorte que le monde généré est indépendant de la façon dont vous voyagez en premier), plutôt qu'un algorithme unique qui s'exécute une fois sur la base d'une seule séquence aléatoire.
sauf que `Random.nextLong ()` utilise deux itérations de cette graine de 48 bits.Il va essentiellement `Random.nextInt ()` deux fois et les pousse ensemble dans un nombre de 64 bits.Il est donc tout à fait possible qu'une graine de 64 bits sorte d'un objet `Random`.
@corsiKa: Vous confondez la sortie 64 bits avec la graine 64 bits.Le PRNG générera plusieurs milliards de bits avant de se répéter, donc dans un sens, la sortie est "milliards de bits", bien plus que 64. Mais l'entrée (graine) est toujours 48 bits;ces 48 bits déterminent complètement la sortie.
@BlueRaja-DannyPflughoeft Donc, si je comprends bien ce que vous dites, les graines avec les mêmes 48 bits de queue devraient-elles produire des mondes identiques?Et ainsi, des graines telles que 281474976710657 et 1 devraient produire exactement les mêmes mondes?
@BlueRaja-DannyPflughoeft Je ne confond rien avec quoi que ce soit.Ce n'est pas parce qu'il n'y a que 2 ^ 48 façons de démarrer un objet aléatoire ne signifie pas qu'il n'y a que 2 ^ 48 façons d'utiliser un objet aléatoire.Il est fort probable que l'objet Random ne soit pas créé dans le seul but de déterminer la graine, et même si c'était le cas, il serait toujours difficile de déduire ce que vous avez dit à partir de cette déclaration.Votre preuve ne tient tout simplement pas.
@colorfusion: Vous aviez raison;voir modifier.
Ryan
2015-07-15 01:56:27 UTC
view on stackexchange narkive permalink

La réponse se trouve donc ici: http://minecraft.gamepedia.com/Seed_(level_generation)

Qui, même s'il est déjà lié sur cette page, personne ne semble pour avoir tout lu.

Pour résumer:

Si vous utilisez un mot ou une phrase , alors String.hashCode () est appelée et limite votre quantité maximum de graines à 2 ^ 32 à cause de son implémentation.

Si vous entrez votre propre numéro ou laissez le système déterminer la graine, votre limite de graine est de 2 ^ 64 graines.

CEPENDANT:

Si c'est un monde multijoueur , ils implémentent la fonction java nextLong () et les limitations de cela sont 2 ^ 48 options de départ possibles.

La dernière phrase n'a aucun sens.Vous confondez plusieurs problèmes _ (la valeur de départ de `new Random (seed)` n'est que de 48 bits, ce qui n'a rien à voir avec la "surcharge` nextLong () `) _
C'est `String # hashCode ()` et non `Java.hashCode ()`.Il n'y a pas de classe `Java` avec une méthode statique` hashCode`.(Ouais, tu pourrais t'en tirer en remplaçant la livre par un point, mais j'aime être pédant)
@BlueRaja-DannyPflughoeft Je ne confond rien, je répète simplement ce que le ** DÉVELOPPEUR ** dit sur sa propre page wiki.Et je n'ai jamais rien dit sur la "surcharge" `nextLong ()`.Alors argumentez autant que vous le souhaitez, cela ne change pas ce que le développeur dit faire.En ce qui concerne la chose `Java.hashCode`, je l'ai juste mal tapée lorsque j'essayais de résumer au lieu de simplement copier-coller.Le développeur le répertorie comme `String.hashCode ()`.Mon erreur.
Le développeur ne maintient pas cette page wiki, les utilisateurs aléatoires le font.Ce n'est pas plus une source d'information officielle que cette page.
Elva
2015-07-14 14:59:52 UTC
view on stackexchange narkive permalink

Les graines sont hachées en un entier signé de 32 bits. Ce qui est programmeur parle pour un nombre qui peut être positif ou négatif, et est de 32 valeurs en base 2.

Cela donne les nombres de -2 147 483 648 à 2 147 483 647.

Selon l'implémentation de Minecraft, certains d'entre eux pourraient donner le même monde dans certains aspects, comme avoir 2 graines avec des biomes différents mais la même carte de hauteur.

Correction (partielle): Si vous ne définissez pas de graine de texte, Minecraft le fera à la place prenez l'heure actuelle comme sa valeur, qui est un nombre de 64 bits donc il y a plus d'options ici.

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

Si Minecraft remplace une graine de chaîne par l'heure actuelle, comment se fait-il que j'obtienne toujours le même monde pour la graine "SEED"?
Existe-t-il une logique spécifique qui interdit l'entrée de nombres de plus de 32 bits?Vous dites que le jeu peut gérer 64 bits de valeurs de temps, mais que l'on ne peut entrer que des nombres de 32 bits manuellement, non?
@OrcJMR il ne remplace pas la chaîne de départ par l'heure actuelle, si vous * ne * le définissez pas, il utilisera l'heure actuelle.C'est aussi pourquoi vous ne pouvez pas insérer une valeur 64 bits via le champ de texte.Il convertira ce texte (via un hachage à sens unique) en un nombre 32 bits.Si vous souhaitez spécifier un nombre arbitraire, vous pouvez modifier le fichier de carte et supprimer les morceaux générés, puis démarrer le jeu, je suppose.
@KevinvanderVelden si la chaîne saisie est numérique, elle est analysée en un long et utilisée comme valeur de départ, si ce n'est pas le cas, String.hashCode est utilisé.
Oh, mon mauvais, la lecture échoue sur cette question de temps.Mais je suis déjà arrivé au jeu et testé: http://i.imgur.com/x0fMiR3.png Il est certainement possible de saisir des entiers 64 bits, comme ceux de PLUS DE 9 MILLIARDS.
Ooh fantaisie, je ne le savais pas.C'est ce qu'a dit @ratchetfreak
Ionic
2015-07-14 14:37:26 UTC
view on stackexchange narkive permalink

Le nombre de graines n'est pas limité par l'application elle-même. Juste par la longueur de la valeur autorisée pour la graine elle-même.

Les graines ne seront pas stockées dans Minecraft. La graine elle-même sera juste une sorte de "valeur de départ" où la génération mondiale commence le processus de génération. Il n'y a pas de graine pour chaque monde à l'intérieur du jeu lui-même. Vous n'obtiendrez que le même monde que le processus de génération s'exécuterait et générerait le même monde en raison des mêmes conditions de départ.

Vous pouvez le comparer en comptant les étapes de votre chemin du retour à votre travail. Si la même condition s'applique tous les jours, la même manière sera utilisée. S'il neige un jour ou si vous restez debout un peu plus tard dans la journée, les conditions de départ sont différentes et vous allez prendre un autre chemin ou une autre heure pour votre travail. Mais si la même condition différente s'appliquait un autre jour, elle se terminera de la même manière. Juste comme exemple pour le clarifier pour les non-techniciens. :-)

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

Les ordinateurs ne génèrent pas vraiment de nombres aléatoires. Lorsque vous récupérez un nombre aléatoire, cela vous donne simplement le numéro suivant dans une séquence de nombres apparemment aléatoires (ils n'ont pas de modèle ou de connexion les uns aux autres).

Une graine est ce qui rend vraiment aléatoire cette liste de nombres, dans la plupart des cas, l'heure actuelle du système sera utilisée comme valeur de départ. Vous pourriez penser à une graine comme un moyen d'obtenir le même résultat aléatoire à plusieurs reprises.
La façon dont un monde Minecraft est généré est par un algorithme qui récupère à plusieurs reprises des nombres aléatoires tels que le moment d'augmenter la hauteur de la surface, etc ...

En utilisant des graines, ces nombres aléatoires seront les mêmes à chaque fois, ce qui fait qu'un monde est le même lorsque la même graine est utilisée.
Cela étant dit, les graines ne prennent pas d'espace disque car elles sont simplement un moyen de brouiller / randomiser la liste de nombres apparemment aléatoires.

Eh bien, il sélectionne en fait l'une des graines en fonction de l'heure à laquelle votre ordinateur est réglé.
Plus important encore, cela ne répondait pas à la question posée.
MyTreeko78255
2016-09-02 19:23:38 UTC
view on stackexchange narkive permalink

1.2413916e + 61

apparemment ceci c'est un très grand nombre mais 48x!serait la réponse

Cette réponse serait bien meilleure si vous expliquiez d'où viennent ces chiffres - c'est-à-dire 48!censé représenter?Pour le moment, il semble que ce soit complètement faux.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...