Saltar al contenido

¿Cuántas semillas del mundo hay en Minecraft?

Solución:

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

Las semillas no utilizan mucho espacio en disco (almacenado como un entero largo, es decir, 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 utiliza para generar el mundo.

Cuantos mundos posibles se pueden generar, incluyendo 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:

ingrese la descripción de la imagen aquí

-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 bits y 48 bits.

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

Sin embargo, eso implicaría que las semillas 1 y 248+1 da como resultado el mismo mundo, lo que otros han señalado que 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. Desde 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;
}

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

La afirmación en la wiki de Minecraft de que “Las semillas multijugador solo pueden tener 248 valores posibles [..] debido al uso Random.nextLong() Es incorrecto. Los generadores de mundos para un jugador y multijugador no son diferentes.


El uso de Random en todos lados lo hace significa que algunas cosas serán iguales entre las semillas que están fuera de 248, como las semillas 1 y 248+1. Por ejemplo, la ubicación de los minerales debe ser casi la misma entre los dos (excepto 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 el chunkSeed es

public void initChunkSeed(long chunkX, long chunkY)
{
    this.chunkSeed = this.worldGenSeed;
    for(int i = 0; i < 2; i++)
    {
        this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
        this.chunkSeed += chunkX;
        this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L;
        this.chunkSeed += chunkY;
    }
}

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

Que a pesar de que ya está vinculado en esta página, nadie parece haberlo leído todo.

Para resumir:

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

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

SIN EMBARGO:

Si es un mundo multijugador ellos implementan el nextLong() java y sus limitaciones son 2 ^ 48 posibles opciones de inicialización.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *