Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3817 miembros registrados.
El último usuario registrado es mendo89.

Nuestros miembros han publicado un total de 86235 mensajes en 12290 argumentos.

Operaciones de variable: operar con valor de 0 a otra variable

Ver el tema anterior Ver el tema siguiente Ir abajo

Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por silvanash el 2014-02-15, 17:39

No sé si alguna vez os ha pasado que necesitáis hacer un cálculo usando la opción de "aleatorio entre a y b", pero sustituyendo "a", "b" o ambas por una variable. Desgraciadamente, RMXP no tiene opción por defecto para hacer esta operación, quedando el script como alternativa. No obstante, para los que quieran mantener un juego sólo con engines, existe una forma de hacerlo.

¿Cómo, si el Maker no te permite usar una variable en ese valor? Sencillo: "aleatorio entre 0 y 1", repetido hasta llegar al valor que quieres, es lo que mismo que hacer aleatorio hasta ese valor. Veamos un ejemplo:

Spoiler:
Alex es un aventurero que se dispone a empezar su aventura en el mundo del RPG, armado con su espada de bronce, su peto de bronce, su escudo de bronce y un gato de porcelana. Por el camino, Alex se encuentra varios huevos cerrados de gatos de porcelana, y se dirige hacia un ciudad cercana en la que puedan abrir los huevos y comprobar si tienen gatos dentro. Álex ha encontrado un total de X huevos, y los gatos que puedan salirle oscilan entre 0 y X.

Al llegar a la ciudad, lo que habrá es un evento con un ciclo parecido a éste:

Comenzar ciclo:
Operaciones de variable[huevos encontrados] restar 1
Operaciones de variable[temporal] sumar aleatorio entre 0 y 1
Condiciones y efectos: si variable[huevos encontrados] igual a 0
-> Romper ciclo
Fin de condiciones
Fin de ciclo

Con eso tenemos un ciclo que se repetirá hasta comprobar todos los huevos que haya encontrado. Imaginemos que Alex ha encontrado 4 huevos de gatos de porcelana. Lo que necesitaríamos es un "aleatorio entre 0 y 4". El ciclo se repetirá cuatro veces, pudiendo sumar 0 ó 1 en cada operación, hasta llegar a ese valor aleatorio. Alex podría encontrarse 0 gatos, 1, 2, 3 ó 4.

Ahora bien, cambiemos la situación:

Spoiler:
Alex llega a la ciudad tras encontrarse X huevos, pero ya tiene en sus manos 3 gatos de porcelana. Si ahora abriese los huevos, los gatos que podría tener oscilarían entre 3 y 3+X.

En este caso, lo que necesitamos es un "aletario entre variable[1] y variable[2]. Podemos, simplemente, usar el mismo ciclo que usamos antes, sumándole los 3 gatos que ya tenía de antemano tras el cálculo. Esta operación, expresada de otra forma, es "aleatorio entre 0 y X" + "valor mínimo del aleatorio". Los resultados que pueden salir son 3, 4, 5 ó 6, que es lo mismo que "aleatorio entre 3 y 6" o "3 más aleatorio entre 0 y 3".

Es posible hacer sumas, restas, multiplicaciones y divisiones con "aleatorio entre variable y variable". Basta con guardar el resultado del aleatorio y después sumar, restar, multiplicar o dividir por él.

Obviamente, es mucho más simple hacer la llamada a script, pero para los que no quieran liarse existe la opción a engine puro.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

Re: Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por Gatchan el 2014-02-15, 18:00


Esto es MUY interesante para los que buscamos soluciones mediante engines, y sirve de referencia para crear diferentes cosas...excelente.

avatar
Gatchan
Iniciado
Iniciado

0/3

Créditos 68

Gracias : 6

Volver arriba Ir abajo

Re: Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por Wecoc el 2014-02-15, 19:34

Pues sí es interesante, no por los "Buuuu fuera usar scripts en engines" que esos son unos pendejos sino porque así se puede hacer también en RPG maker 2k y 2k3, supongo.

Por si acaso dejo la alternativa con llamar script, para complementar (creo que lo hice bien xD)

Código:
# Aleatorio entre la variable 1 y la variable 2
result = rand($game_variables[2]-$game_variables[1] + 1)
result += $game_variables[1]

Y un código muy similar pero por si no sabes cual de las dos variables es mayor

Código:
# Aleatorio de la variable menor a la variable mayor entre 1 y 2
result = rand( ( $game_variables[2] - $game_variables[1] ).abs + 1)
result += [ $game_variables[1], $game_variables[2] ].min

Edito: Es verdad, me dejé el + 1 en los rand, aunque es solo un detalle.
En realidad cuando haces rand(4) las posibilidades son 0, 1, 2, 3 por lo tanto hay 4 posibilidades tal y como dice el comando, por eso casi siempre me dejo el + 1 cuando realmente quiero que salga el número 4 xD


Última edición por Wecoc el 2014-02-15, 22:36, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12103

Gracias : 522

Volver arriba Ir abajo

Re: Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por silvanash el 2014-02-15, 20:19

Con el rand hay que tener en cuenta el detalle de que rand(4) te da valores entre 0 y 3, no entre 0 y 4. Si quieres sacar un aleatorio entre 0 y 4 tienes que usar rand(5), donde el valor máximo que puede devolverte es 4.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

Re: Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por orochii el 2014-02-15, 22:30

En buena teoría múltiples aleatorios entre 0 y 1, y un aleatorio de X a Y son lo mismo. Pero... ¿no pasa como con los dados?
Ayer estuve leyendo un poco, por ejemplo, tiras 2d6 (2 dados de 6 caras), el número con mayor probabilidad de salir es 6 (1+5, 2+4, 3+3, 4+2, 5+1).
Pero bueno, con 0 y 1 (¿¿¿¿un dado de dos caras???? xD! o quiza como los de rol de mesa, con 3 ceros, y 3 unos).

0+0 : 0+1 : 1+0 : 1+1

Pasa lo mismo, hay mayor probabilidad de que salgan ciertas combinaciones.

En todo caso, es interesante, y quiza hasta ayude a "balancear" ciertas cosas. A veces un "azar perfecto" no es lo mejor.
avatar
orochii
Reportero

0/3

Créditos 7463

Gracias : 368

Volver arriba Ir abajo

Re: Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por Wecoc el 2014-02-15, 23:13

Un dado de dos caras es una moneda.

Lo que dijo Orochii me dió ganas de hacer un "ejercicio" de estadística, lástima que hace más de dos años que no hago y ya no recuerdo como va xD

Código:
def binomial(n, k=n/2, p=0.5) # Si hay n, la probabilidad de que salga k, si
  # p es la probabilidad de que salga 1. Atención p va de 0 a 1
  num = 1
  for i in 1..n
    num *= i # n!
  end
  den1 = 1
  for i in 1..k
    den1 *= i # k!
  end
  den2 = 1
  for i in 1..(n-k)
    den2 *= i # (n-k)!
  end
  return (num/(den1*den2)) * (p**k) * ((1-p)**(n-k))
end

def poisson(m, k) # Siendo m el punto máximo, esperanza y a la vez variáncia
  # calcula la probabilidad de que salga k
  den = 1
  for i in 1..k
    den *= i # k!
  end
  return (m**k / den) * (Math::E)**(-m)
end

Con ese script puedes calcular probabilidades usando un modelo binomial o un modelo de Poisson. Más que nada por lo que dijo Orochii de que es más probable de que salga una cosa que otra.

Fijaos en lo que dijo Orochii con la moneda: 0+0 : 0+1 : 1+0 : 1+1

Trasladado a mi script

Código:
p binomial(2, 0) # => 0.25
p binomial(2, 1) # => 0.5
p binomial(2, 2) # => 0.25

También está ésto: Random con diferentes probabilidades
avatar
Wecoc
Administrador
Administrador



Créditos 12103

Gracias : 522

Volver arriba Ir abajo

Re: Operaciones de variable: operar con valor de 0 a otra variable

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.