Pregunta:
¿Cuántas semillas del mundo hay en Minecraft?
John
2015-07-14 14:25:59 UTC
view on stackexchange narkive permalink

Me preguntaba cuántas semillas hay en Minecraft (1.8.7) y cómo ocupa tan poco espacio en el disco. Creo que hay muchas semillas por tipo de mundo, calculando esto también para CADA combinaciones personalizadas. Estoy seguro de que son más de trillones. ¿Puedes decirme la cantidad de semillas?

Solo pregunto por la cantidad de semillas.Por ejemplo, si alguien juega cada tipo de mundo con cada semilla y cada posibilidad personalizada (ejemplo: controles deslizantes movidos por 1 en otra dirección, estoy seguro de que alguien realmente no hará eso).¿En cuántas semillas habría jugado esa persona?@Ionic
@5pike los caracteres que ingresa son realmente irrelevantes.Todo el texto está codificado en un solo valor.
Minecraft no almacena todos los mundos posibles.Los mundos se generan aleatoriamente y la semilla se usa para influir en el generador de números aleatorios (de una manera predecible, de modo que si usa la misma semilla, haga los mismos números "aleatorios")
El malentendido que parece tener es que las semillas son algo así como contraseñas de nivel en algunos juegos de la vieja escuela, no lo son.En cambio, cada semilla simplemente representa un punto de partida para generar el mundo entero, pieza por pieza según sea necesario.Por lo tanto, no hay semillas "especiales" ni "ocultas". El objetivo principal de usar una semilla personalizada (además del valor de entretenimiento) es que puedas jugar en el mismo mapa que tus amigos. Ambos aceptan jugar en un mundo con unsemilla de decir "HumblePhoenix", y ambos tendrán el mismo terreno inicial, recursos, etc.
Es posible que desee obtener más información sobre los [generadores de números pseudoaleatorios] (https://en.wikipedia.org/wiki/Pseudo_random_number_generator).
Sabía lo que es una semilla.Reinicié muchos mundos usando eso.@Luaan
Seven respuestas:
SirBenet
2015-07-14 15:05:31 UTC
view on stackexchange narkive permalink

Hay 18,446,744,073,709,551,616 (2 64 ) posibles semillas. Todas las semillas son un número, si se ingresan letras en el cuadro de semillas, la función hashCode () de Java se usa para convertirlo en un número.

Las semillas no usan mucho disco espacio (almacenado como un entero largo, lo que significa solo 8 bytes por mundo) porque solo se almacena una semilla que se ha elegido para un mundo; no todos los 18 trillones. Cuando se necesita una semilla para la generación del mundo, se genera una aleatoria a partir del reloj del sistema (o el usuario la ingresa manualmente) y luego se almacena y se usa para generar el mundo.

¿Cuántos mundos posibles pueden generar , incluidas las opciones de personalización ? Probablemente más de lo que cualquier computadora puede calcular dados todos los controles deslizantes flotantes disponibles en un mundo personalizado.


Aquí hay una imagen que muestra una semilla generada aleatoriamente:

enter image description here

-3,010,441,696,458,036,422 es mucho más bajo que -2,147,483,648 y -140,737,488,355,328. Esto significa que las semillas utilizan rangos de enteros con signo de más de 32 y 48 bits.

Tu edición no agrega nada útil a tu respuesta.Reviértalo y agréguelo como comentario sobre la respuesta que crea que es incorrecta.
@Lilienthal La edición muestra que el rango de semillas es (al menos) 2 ^ 64, reforzando mi respuesta.Creo que es muy útil saber cuándo una respuesta es correcta.
@ratchetfreak La semilla que se muestra en la imagen se generó aleatoriamente y está fuera del rango de un número de 48 bits.
@colorfusion, entonces deben haber cambiado RNG desde la última vez que verifiqué
¿Tienes idea de cuántas posibilidades mundiales hay realmente?¿La generación de procedimientos tiene realmente una entropía de 64 bits, o está más cerca de decir 32 bits?
@colorfusion La imagen podría ser útil (incluso si un solo valor no dice mucho sobre el rango), pero las respuestas generalmente deben ser independientes.También resulta bastante pasivo y agresivo señalar otras respuestas por ser incorrectas, especialmente si no le ofreces al otro usuario la oportunidad de mejorar o retractarse de su respuesta dejando un comentario.
@Lilienthal La otra respuesta fue la respuesta aceptada en el momento de esa edición, así que sentí la necesidad de notificar a OP que la respuesta que aceptaron es incorrecta y por qué es incorrecta.No intento ser pasivo-agresivo, solo asegurarme de que la gente tenga la información correcta.Si mi respuesta es incorrecta, me encantaría que alguien escribiera otra respuesta con la respuesta correcta, mencionando por qué la mía es incorrecta.
Dice que el número que está mostrando es "mucho más bajo que el -2,147,483,648 que Kevin van der Velden afirma que es el valor mínimo", pero también dice que "la función hashCode () de Java se usa para convertirlo en un número".lo que significa que es solo otra forma de decir `-140449792`, que no es menor que` -2147483648`.¿Cual es verdad?
@JonHanna Creo que `hashCode ()` solo se usa si la semilla ingresada tiene letras.Si ingresa "1" en la caja de semillas, la semilla de nivel es solo 1. -140449792 no crea el mismo mundo que -3010441696458036422.
@JonHanna `hashCode ()` solo se usa si la semilla ingresada tiene letras.No se usaría en -3010441696458036422.
BlueRaja - Danny Pflughoeft
2015-07-14 20:55:54 UTC
view on stackexchange narkive permalink

Originalmente dije que Minecraft usa la clase Random predeterminada de Java para la generación de números pseudoaleatorios. Random usa semillas de 48 bits.

Sin embargo, eso implicaría que las semillas 1 y 2 48 +1 dan como resultado en el mismo mundo, lo que otros han señalado no es cierto. Así que investigué un poco más.


Minecraft parece usar Random en todas partes excepto para el código de generación de bioma. Allí, utiliza su propio generador aleatorio casero. De GenLayer.java:

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

Este es un generador congruencial lineal con valores a = 6364136223846793005 y m = 1442695040888963407 . De hecho, esto producirá 2 64 flujos de salida distintos y, por lo tanto, hay 2 64 mundos distintos.

La afirmación sobre la wiki de Minecraft que "Las semillas multijugador solo pueden tener 2 48 valores posibles [..] debido al uso de Random.nextLong () " es incorrecta . Los generadores de mundos para un jugador y multijugador no son diferentes.


El uso de Random en cualquier otro lugar significa que algunas cosas serán las lo mismo entre las semillas que tienen una diferencia de 2 48 , como las semillas 1 y 2 48 +1. Por ejemplo, la ubicación de los minerales debería ser casi la misma entre los dos (excepto los minerales extraídos por sistemas de cuevas) .

Además, el uso de semillas por trozo tiene algunas consecuencias interesantes. Por ejemplo, dada la pequeña cantidad de biomas y la gran cantidad de fragmentos, en cualquier mundo dado existe una probabilidad muy alta de que haya dos fragmentos que sean exactamente iguales. Sin embargo, encontrar esos trozos implica matemáticas que me superan. Si alguien está interesado en averiguarlo, el código para inicializar chunkSeed es

  public void initChunkSeed (long chunkX, long chunkY) {this.chunkSeed = this. worldGenSeed; para (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: No. El valor de entrada debe ser hash si no es numérico _ (ya que la semilla debe ser un número) _, pero si las entradas numéricas también fueran hash, no podría recrear mundos de semilla aleatoria, ya que los hash sonde una sola mano.Así que toda la discusión sobre el hash es una pista falsa.
Mi respuesta aceptada (y la pregunta original) solo se refieren a posibles semillas, no a mundos posibles;ambas respuestas pueden ser correctas.Si su respuesta es el caso, ¿no deberían ser iguales los mundos generados con semillas como 281474976710657 y 1?Puedo estar equivocado en esto.
Sin embargo, los otros bits de la semilla de 64 bits pueden usarse para inicializar un RNG por fragmento o algún otro parámetro.Minecraft utiliza un algoritmo de generación de terreno procedimental basado en coordenadas (por lo que el mundo generado es independiente de la dirección en la que viaje primero), en lugar de un solo algoritmo que se ejecuta una vez en función de una única secuencia aleatoria.
excepto que `Random.nextLong ()` usa dos iteraciones de esa semilla de 48 bits.Básicamente dice `Random.nextInt ()` dos veces y los junta en un número de 64 bits.Por lo tanto, es completamente posible que una semilla de 64 bits salga de un objeto `Random`.
@corsiKa: Está confundiendo la salida de 64 bits con la semilla de 64 bits.El PRNG generará muchos miles de millones de bits antes de repetirse, por lo que, en cierto sentido, la salida es "miles de millones de bits", mucho más que 64. Pero la entrada (semilla) sigue siendo de 48 bits;esos 48 bits determinan completamente cuál será la salida.
@BlueRaja-DannyPflughoeft Entonces, si entiendo correctamente lo que está diciendo, ¿deberían las semillas con los mismos 48 bits finales producir mundos idénticos?¿Y así, semillas como 281474976710657 y 1 deberían producir exactamente los mismos mundos?
@BlueRaja-DannyPflughoeft No estoy confundiendo nada con nada.El hecho de que solo haya 2 ^ 48 formas de iniciar un objeto aleatorio no significa que solo haya 2 ^ 48 formas de usar un objeto aleatorio.Es muy probable que el objeto Random no se cree con el único propósito de determinar la semilla, e incluso si lo fuera, sería exagerado inferir lo que ha dicho de esa declaración.Tu evidencia simplemente no se sostiene.
@colorfusion: Tenías razón;ver editar.
Ryan
2015-07-15 01:56:27 UTC
view on stackexchange narkive permalink

Entonces, la respuesta se encuentra aquí: http://minecraft.gamepedia.com/Seed_(level_generation)

Que aunque ya está vinculado en esta página, nadie parece haberlo leído todo.

Para resumir:

Si usa una palabra o frase , entonces String.hashCode () se llama y limita la cantidad máxima de semillas a 2 ^ 32 debido a su implementación.

Si ingresa su propio número o permite que el sistema determine la semilla, entonces su límite de semilla es 2 ^ 64 semillas.

SIN EMBARGO:

Si se trata de un mundo multijugador , implementan la función java nextLong () y las limitaciones de eso son 2 ^ 48 posibles opciones semilla.

La última frase no tiene sentido.Está combinando varios problemas _ (la semilla de `new Random (semilla)` es solo de 48 bits, lo cual no tiene nada que ver con "sobrecargar` nextLong () `) _
Es `String # hashCode ()` no `Java.hashCode ()`.No hay una clase `Java` con un método estático` hashCode`.(Sí, podrías salirte con la tuya reemplazando la libra con un punto, pero me gusta ser pedante)
@BlueRaja-DannyPflughoeft No estoy combinando nada, simplemente repito lo que dice el ** DESARROLLADOR ** en su propia página wiki.Y nunca dije nada sobre "sobrecargar" `nextLong ()`.Así que discuta todo lo que quiera, no cambia lo que el desarrollador dice que hacen.En cuanto a lo de `Java.hashCode`, lo escribí mal cuando estaba tratando de resumir en lugar de simplemente copiar y pegar.El desarrollador lo enumera como `String.hashCode ()`.Mi error.
El desarrollador no mantiene esa página wiki, lo hacen los usuarios aleatorios.No es una fuente oficial de información más que esta página.
Elva
2015-07-14 14:59:52 UTC
view on stackexchange narkive permalink

Las semillas se han convertido en un entero de 32 bits con signo. El programador habla por un número que puede ser positivo o negativo, y tiene 32 valores en base 2.

Esto da los números de -2,147,483,648 a 2,147,483,647.

Dependiendo de la implementación de Minecraft, algunos de ellos pueden resultar en el mismo mundo en ciertos aspectos, como tener 2 semillas con biomas diferentes pero el mismo mapa de altura.

Corrección (parcial): si no configuras una semilla de texto, Minecraft lo hará tome la hora actual como su valor, que es un número de 64 bits, por lo que hay más opciones allí.

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

Si Minecraft reemplaza una semilla de cadena con la hora actual, ¿cómo es que siempre obtengo el mismo mundo para la semilla "SEED"?
¿Existe una lógica específica que prohíba la entrada de números de más de 32 bits?Estás diciendo que el juego puede manejar 64 bits de valores de tiempo, pero solo se pueden ingresar números de 32 bits manualmente, ¿verdad?
@OrcJMR no reemplaza la semilla de cadena con la hora actual, si * no * la configura, entonces usará la hora actual.También es por eso que no puede insertar un valor de 64 bits a través del campo de texto.Convertirá ese texto (mediante hash unidireccional) en un número de 32 bits.Si desea especificar un número arbitrario, puede editar el archivo de mapa y eliminar los fragmentos generados y luego comenzar el juego, supongo.
@KevinvanderVelden si la cadena ingresada es numérica, se analiza en un largo y se usa como semilla, si no lo es, se usa String.hashCode.
Oh, mi mal, la lectura falla en ese tema de tiempo.Pero ya llegué al juego y lo probé: http://i.imgur.com/x0fMiR3.png Definitivamente es posible ingresar números enteros de 64 bits, como esos MÁS DE 9 MIL MILLONES.
Oh, fantástico, no sabía eso.Eso es lo que dijo @ratchetfreak
Ionic
2015-07-14 14:37:26 UTC
view on stackexchange narkive permalink

El número de semillas no está limitado por la aplicación en sí. Solo por la longitud del valor permitido para la semilla en sí.

Las semillas no se almacenarán en Minecraft. La semilla en sí misma será una especie de "valor inicial" donde la generación mundial comienza su proceso de generación. No hay una semilla para cada mundo dentro del juego. Solo obtendrá el mismo mundo que el proceso de generación y generaría el mismo mundo debido a las mismas condiciones de inicio.

Puede compararlo contando los pasos desde su camino a casa hasta su trabajo. Si se aplica la misma condición todos los días, se utilizará la misma forma. Si nieva un día o si te quedas despierto un poco más tarde, la condición de inicio es diferente y vas a tomar otro camino u otro momento para tu trabajo. Pero si la misma condición diferente se aplicara otro día, terminaría de la misma manera. Solo como un ejemplo para aclararlo para los no expertos en tecnología. :-)

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

Las computadoras no generan realmente números aleatorios. Al buscar un número aleatorio, solo le da el siguiente número en una secuencia de números aparentemente aleatorios (no tienen ningún patrón o conexión entre sí).

Una semilla es lo que realmente aleatoriza esta lista de números, en la mayoría de los casos, la hora actual del sistema se utilizará como semilla. Podría pensar en una semilla como una forma de obtener el mismo resultado aleatorio repetidamente.
La forma en que se genera un mundo de Minecraft es mediante un algoritmo que recupera repetidamente números aleatorios, como cuándo aumentar la altura de la superficie, etc.

Al usar semillas, estos números aleatorios serán los mismos cada vez, lo que da como resultado que un mundo sea el mismo cuando se usa la misma semilla.
Dicho esto, las semillas no ocupan espacio en el disco porque son simplemente una forma de mezclar / aleatorizar la lista de números aparentemente aleatorios.

Bueno, en realidad elige una de las semillas en función de la hora en que está configurada la computadora.
Más importante aún, esto no respondió a la pregunta que se hizo.
MyTreeko78255
2016-09-02 19:23:38 UTC
view on stackexchange narkive permalink

1.2413916e + 61

aparentemente esto es un número muy grande, ¡pero 48x!sería la respuesta

Esta respuesta sería mucho mejor si explicaras de dónde provienen esos números: ¡qué es 48!se supone que representa?A partir de ahora, parece que esto está completamente mal.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...