Nuevo Sistema de aleatoriedad basado en probabilidades (SABP)


El principal problema que encontré al momento de hacer los primeros códigos, con respecto a la generación de números aleatorios, o inconveniente seria mejor palabra para describir la situación, fue la facilidad con la que se repetían los números y la facilidad en la que podía salir un numero alto. 

Esto no seria problema si el tablero del juego fuese mas extenso o hubiera una mayor cantidad de elementos, pero por lo avanzado que tenia el juego no era una opción hacer estos cambios. 

De igual manera, un jugador me notificó que era posible pasar el juego sin caer en ninguna casilla "pregunta" o "serpiente", por lo que pensando en estos dos problemas se me ocurrió hacer un sistema de probabilidades para el numero del dado.

Partiendo de la premisa que  para cualquier numero de un dado se tiene una probabilidad de 1/6 de que "salga" dicho numero, por lo que lo primero que se debía atacar era esa probabilidad.

En un principio, para recrear el comportamiento normal de un dado real, implementé el siguiente código:

int i = Random.Range(0,6);
int ranNum = i + 1;

Donde i es un numero aleatorio dentro del rango de 0 a 5 (inclusivos), esto para poder acceder sin errores al arreglo de números usados para mostrarse en pantalla, y ranNum es el numero usado para avanzar el numero de casillas correspondiente al numero mostrado en pantalla. Usando este código si, por ejemplo, i = 2, se selecciona el objeto con el numero a mostrar en pantalla que se encuentra en la posición 2 del arreglo de dichos objetos, el cual contiene el texto con el numero "3",  y el numero usado internamente para avanzar casillas seria 3.

Como ya dije anteriormente y como se ve en el código, la probabilidad de cada numero del dado es de 1/6, ya que solo puede salir 1 numero de 6. Al momento de implementar el SABP, se hacen principalmente tres procesos, de los cuales el ultimo depende del segundo.

Como paso 1 del SABP, se elige un numero aleatorio en el rango de 1 a 100 (inclusivo). para esto se utiliza el siguiente código:

int i = Random.Range(1,101);

Posteriormente, como paso 2, se hace una serie de preguntas con respecto al numero almacenado en la variable i , las cuales son si el numero esta dentro de uno de 3 rangos diferentes:

if(i <= 49){
    ranNum = Random.Range(1,3);
}
if(i >= 50 && i <= 79){
    ranNum = Random.Range(3,5);
}
if(i >= 80){
    ranNum = Random.Range(5,7);
}

Como se ve, el rango de cada una de las decisiones es diferente y cada vez mas pequeño con respecto al anterior. Dentro de cada una de las decisiones se genera un numero aleatorio que depende del rango de la decisión. La información la condensé en la siguiente tabla:

Rango del conjunto [1,100]Números posibles Probabilidad de obtener alguno de los numero anterioresProbabilidad de obtener solo uno de esos dos números
1<= i <= 49 
1 o 249%24.5%
50<= i <= 793 o 430%15%
80<= i <= 1005 o 621%10.5%

 Como vemos, a comparación de el primer método de generación de números aleatorios en la cual para obtener cualquiera de los números del dado solo se tenia 16.66%, con el SABP es mas probable obtener un numero pequeño (1 o 2) en comparación al método tradicional, en cambio es menos probable obtener un numero grande (5 o 6), comparado al método anterior y comparado con la probabilidad de obtener un numero pequeño o mediano.

Files

Int&Esc_0.2a 22 MB
Sep 01, 2021

Get Inteligencias y escaleras

Leave a comment

Log in with itch.io to leave a comment.