Categories
Juegos

Generador de números aleatorios en juegos online

Por si alguna vez te lo has preguntado, los juegos online utilizan generadores de números aleatorios. Un generador de números aleatorios (GNA o random number generator RNG en inglés) es un algoritmo que produce números que dependen del azar. En video juegos, estos números aleatorios se utilizan para determinan eventos aleatorios como puede ser lanzar un dado, las cartas de un cofre, las recompensas de un juego y más.

Por ejemplo, en el juego Heartstone hay algunas mecánicas de juego que se basan en obtener cartas aleatorias de un coste fijo o de coste variable. También puedes abrir sobres y te salen 5 cartas diferentes cada vez que lo haces con una probabilidad determinada según el tipo de carta que sea. O en Clash Royale hay varios tipos de cofre de recompensas que te proporcionan una probabilidad x de obtener una carta legendaria o cartas de cualquier tipo.

Lo que escribo en este artículo es una suposición de cómo funcionan estos juegos, no puede afirmar que sea así al 100% (habría que preguntar al desarrollador) pero es una posible explicación de cómo funcionan estos generadores de números aleatorios en juegos online.

Números aleatorios puros

Una sucesión de números aleatorios (true random), se caracteriza por que no existe ninguna regla o plan que nos permita conocer sus valores. Existen tablas de dígitos aleatorios obtenidos por procesos físicos como loterias, ruletas, etc.. En la página random.org permite crear estos números aleatorios y un ejemplo lo puedes ver en la Fig. 1.

generador de números aleatorios
Figura 1. Generador de enteros aleatorios al azar

Estos números aleatorios puros tienen varios inconvenientes como:

  • Es recomendable conocer su distribución.
  • Los datos generados deberían ser idénticamente independientemente distribuidos.
  • Reproductividad, no se puede reproducir una secuencia generada previamente.
  • Pueden requerir del almacenamiento en tablas puesto que sus valores cambian cada vez.

Cómo funciona un generador de números aleatorios

Simulación es realizar experimentos con un modelo con el objetivo de
recopilar información bajo determinadas condiciones. Me centraré en el caso de la simulación estocástica. Las conclusiones se obtienen habitualmente generando repetidamente simulaciones del modelo aleatorio.

Debido a los inconvenientes de los números aleatorios puros se suelen utilizar los números pseudoaleatorios que simulan realizaciones de una variable aleatoria (uniforme). La mayoría de los métodos de simulación se basan en la posibildiad de generar números pseudoaleatorios con distribución uniforme entre 0 y 1.

Un generador de números aleatorios se obtiene mediante un algoritmo recursivo denominado generador:

 x_i = f(x{i-1}, x{i-2}, ..., x{i-k})
[cool_tag_cloud smallest=”10″ largest=”20″]

en donde,

  • k orden del generador.
  • (x0, x1, …, xk-1) semilla (estado inicial).

Los números de la sucesión serán predecibles a partir de la semilla, conociendo el algoritmo y la semilla. Sin embargo, si esto no se conociese no se podría distinguir una serie de números pseudoaleatorios de una sucesión de números verdaderamente aleatorios.

Problemas encontrados en el pasado

En el pasado se encontraron graves problemas de precedibilidad. Es decir, se puede predecir el resultado de un generador de números aleatorios y esto no es deseable. Un ejemplo fue el trabajo realizado por unos investigadores sobre el generador de número aleatorios del sistema operativo Windows. En éste trabajo se analizó la aleatoriedad del generador, del algoritmo que utilizaba Windows para generar números aleatorios. El resultado fue que no eran números realmente aleatorios.

El generador se ejecutaba en modo de usuario en lugar de en modo kernel y, por lo tanto, es fácil acceder a su estado incluso sin privilegios de administrador. Los valores iniciales de parte del estado del generador no se establecen explícitamente, sino que se definen por los valores presentes en la pila cuando se llama al generador. Además, cada proceso ejecuta una copia diferente del generador y el estado de el generador se actualiza con la entropía generada por el sistema solo después de generar 128 KBytes de salida para el proceso que lo ejecuta.

Algoritmos utilizados

Existe una gran cantidad de algoritmos para generar números aleatorios entre ellos:

  • Cuadrados medios. El algoritmo consiste en elegir un número de 2n cifras. Por ejemplo n igual a 2, por tanto debemos elegir un número de 4 cifras. Elijo 4545 y lo elevo al cuadrado obteniéndose un número de 8 cifras. Da como resultado 20657025. Se denomina X1 al número resultante de seleccionar las 2n cifras centrales del resultado anterior. El número pseudoaleatorio sería 0,6570. El número estar comprendido entre 0 y 1.
  • Lehmer. Es un tipo de generador congruencial lineal (LCG) que opera en un grupo multiplicativo de enteros módulo n. Es decir es secuencia de números pseudoaleatorios calculados con una función lineal definida a trozos discontinua.
  • Registros desfasados. Se basa en generadores lineales recursos múltiples.
  • Combinaciones.

El código fuente está disponible en muchas librerías online como:

El uso en los juegos online

La generación de números aleatorios, o RNG, es un factor decisivo en muchos juegos modernos. Son la razón por la que siempre te encuentras con recompensas únicas, por qué las cartas de Hearthstone o Clash Royale son diferentes cada vez que las obtienes y por qué encuentras al azar un tesoro genial (o no) en Diablo. Algunos juegos generados por procedimientos, como The Binding of Issac o Minecraft, ni siquiera serían posibles sin RNG.

El proceso más o menos sería así. El juego lanza una petición para obtener un número aleatorio, y asigna ese número aleatorio a un resultado o item. Si una carta te dice que obtienes 3 esbirros aleatorios de coste uno, lo que hace el juego es hacer una petición a una funión programada de número pseudoaleatorios, y obtiene 3 números, y cada número se le asigna una carta de coste uno.

Resumen

En conclusión, no es culpa tuya que te salgan cartas al azar penosas y pensar que tu juego favorito apesta. Todo se debe al RNG, o si deseas el término más apropiado, generador de números pseudoaleatorios o generador de bits aleatorios determinista.

No importa cuánto entrenes, todo depende de lanzar un dado digital que tu no ves. Los juegos más antiguos eran muy predecibles y limitados en términos de dónde se colocó el RNG, por lo que la manipulación fue muy fácil. Los juegos más nuevos ahora quieren que la aleatorización parezca aleatoria tanto como sea posible. La próxima vez que culpes a RNG, o al dios del RNG, no serán ellos, así fue como se programó.

Referencias

  • https://en.wikipedia.org/wiki/AMillionRandomDigitswith.
  • https://www.random.org/integers/
  • http://www.fourmilab.ch/hotbits/
  • https://eprint.iacr.org/2007/419
  • https://es.wikipedia.org/wiki/Caja_de_recompensas
  • https://medium.com/@naomijoyce/random-number-generation-in-video-games-dda985c5652f

Leave a Reply