Registrarse

[RPGXP] Usando valores aleatorios

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?
  • Condicionar eventos
  • Generar codigos de amigo
  • Crear nuevas situaciones de juego

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:
Código:
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.

Código:
variable = rand(9)
Con tu numero aleatorio almacenado en una variable puedes hacer gran cosa, a continuación un ejemplo y lo explicaré:

Código:
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
Código:
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
Código:
[PLAIN]
def hackaleatorio(cantidad)
  if cantidad == 4
     [MENTION=25770]Aleatorio[/MENTION] = rand(3)
  end [MENTION=26553]lol[/MENTION]
      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  
[/PLAIN]
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
 
Última edición por un moderador:

VGS

I Love Enchiladas ♥
Respuesta: Usando valores aleatorios en RPG

Genial, Muy bien tu aporte :D
Es de mucha ayuda, se pueden hacer varias cosas.
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Re: Respuesta: Usando valores aleatorios en RPG

lolo necropost



Eso no es del todo cierto. Se puede generar un número cualquiera en un rango haciendo algo como esto:

Código:
numerito=0 # Dando un valor a numerito
until numerito>=1000 && numerito<=1100 # Genera números de valor máximo 1100 hasta tener uno comprimido entre 1000 y 1100
numerito=rand(1100)
end
Para comprobar que eso funciona, bastaría con poner algo así:

Código:
Kernel.pbMessage("#{numerito}")
Y podremos comprobar que ese mensaje siempre mostrará un número comprimido entre 1000 y 1100.
Eso es algo así como súper sub-optimo (?). Mucho mejor:

Código:
def awesome_rand(min, max)
	return min + rand(max-min)
end
 
Arriba