24957-Usando_valores_aleatorios_en_RPG
#0
Alice 28243
He visto en muchos foros que al trabajar valores aleatorios desde scripts muchos tienen problemas, es por ello que vengo a compartir un poco de ayuda.

¿Para que puedo utilizar los valores aleatorios?


No se me ocurrio nada mas que poner así que me voy directo a la explicación.

En Ruby, podemos generar un valor aleatorio de la siguiente manera:
rand(X..Y)
rand(X...Y)
Lo que hace es definir un rango y elegir un valor cualquiera del mismo.
Sin embargo, en RPG Maker esto no trabaja de la misma manera. En RPG podemos definir únicamente el valor máximo.

Generando el valor aleatorio
Para generarlo basta con utilizar:
rand(X)
Y es todo :3

...
...
...

¡Pero no se queda ahí!
Si quieres trabajar con ese valor debes almacenarlo en una variable, según la situación es el tipo de variable, yo la almacenaré en una local.

variable = rand(9)

Con tu numero aleatorio almacenado en una variable puedes hacer gran cosa, a continuación un ejemplo y lo explicaré:


def menu
opciones = [_INTL("4"),_INTL("Pocos"),_INTL("No sé"),_INTL("Muchos")]
comandos = Kernel.pbMessage(_INTL("¿Cuantos hacks hay en wah?"),opciones)
if comandos == 0
elegirhack(4)
elsif comandos == 1
elsif comandos == 2
elsif comandos == 3
end
end



def elegirhack(cantidad)
@cantidad = cantidad
@bloque = []
if @cantidad == 4
Kernel.pbMessage("A continuación, introduce algunos de ellos.")
@bloque[0] = Kernel.pbMessageFreeText(_INTL("¿Cómo se llama el hack?"),"",false,5)
@bloque[1] = Kernel.pbMessageFreeText(_INTL("¿Cómo se llama el hack?"),"",false,5)
@bloque[2] = Kernel.pbMessageFreeText(_INTL("¿Cómo se llama el hack?"),"",false,5)
@bloque[3] = Kernel.pbMessageFreeText(_INTL("¿Cómo se llama el hack?"),"",false,5)
Kernel.pbMessage("Se elegirá uno al azar.") if @cantidad == 4
hackaleatorio(4) if @cantidad == 4
end
end


def hackaleatorio(cantidad)
if cantidad == 4
[MENTION=25770]Aleatorio[/MENTION] = rand(3)
end
Kernel.pbMessage("Agrupando...")
[MENTION=15149]Hack[/MENTION] = @bloque [MENTION=25770]Aleatorio[/MENTION]]
if [MENTION=15149]Hack[/MENTION]almacenado.include? [MENTION=15149]Hack[/MENTION])
elegirhack(cantidad)
else
[MENTION=15149]Hack[/MENTION]almacenado.push [MENTION=15149]Hack[/MENTION]
Kernel.pbMessage("El hack elegido es: # [MENTION=15149]Hack[/MENTION]}")
continuarproceso equisdequisde
end
end


EXPLICACIÓN
Primero he creado un menú sencillito :3, muestra 4 opciones siendo la primera la que continua la cadena.

Al elegir la primera opción se llama a otro método con un atributo en cuestión; cantidad. (4)

Se abre un array vacio y si la variable es igual a la especificada en el atributo, te da la oportunidad de introducir 4 valores que serán almacenados en el array definido.

Finalmente, este te lleva a otro método, en este último se almacena un valor aleatorio de 4 opciones en una variable de clase.
rand(3)
Se elige un valor del array correspondiente al resultado del valor aleatorio y se almacena en otra variable de clase.

Por ultimo paso, se compara si el valor de la variable existe ya en otro array, si existe vuelve a elegir un valor aleatorio, si no existe se almacena en el array y continua el proceso.


Es solo un ejemplo, se pueden utilizar para otras cosas, espero haberme explicado bien que he hecho un gran esfuerzo tratando de ser clara :s