Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

No Asignar ciertos Aleatorios.

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP No Asignar ciertos Aleatorios.

Mensaje por Ledai el Lun Ene 30, 2017 9:32 pm

Hola, me preguntaba si hay un comando para asignar un valor aleatorio a una variable pero excluyendo algunos resultados en su selección.
Por ejemplo, que elija desde el 1 al 10 pero sin que pueda quedar en el 5 y 6 por ejemplo.

Debe de haber un comando para eso, pero no lo conozco.
De antemano, gracias!
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5205

Gracias : 214

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Producciones The Golden el Lun Ene 30, 2017 9:38 pm

No lo conozco, pero se me ocurre esto: del 1 al 5, y si da en el cinco empezar otra secuencia de al azar del 6 al 10, por ejemplo.
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 653

Gracias : 71

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Ledai el Lun Ene 30, 2017 9:56 pm

Sí, pudiera en el caso de tener que excluir un solo numero, pero para excluir tres por ejemplo se dificulta más.

En  realidad lo quiero para realizar un Área de aparición aleatoria personalizada.
Para que los eventos aparezcan en el área cercana a ti, pero no pegados o encima.
Ejemplo:

Ya que actualmente lo tengo de modo que pueden aparecer en todo el área incluido el centro.
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5205

Gracias : 214

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Wecoc el Lun Ene 30, 2017 10:07 pm

Hazlo por arrays, las arrays son tus amigas.

Código:
array = [1, 2, 3, 4, 7, 9]
result = array[rand(array.size)] # Selecciona al azar entre 1, 2, 3, 4, 7, 9

Código:
array = Array.new(100) {|index| index + 1} # [1, 2, 3, 4, (...) 100]
array.delete(17)
array.delete(91)
$game_variables[1] = array[rand(array.size)] # Cualquier valor de 1 a 100 menos 17 y 91


Última edición por Wecoc el Lun Ene 30, 2017 10:14 pm, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12236

Gracias : 638

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Ledai el Lun Ene 30, 2017 10:13 pm

Y luego le asigno el valor de "result" a la variable no?
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5205

Gracias : 214

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Wecoc el Lun Ene 30, 2017 10:15 pm

Exacto. He puesto otro ejemplo.
avatar
Wecoc
Administrador
Administrador



Créditos 12236

Gracias : 638

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Ledai el Lun Ene 30, 2017 10:32 pm

Hecho, he usado la primera forma porque se trataba de poquitos valores, tan solo 6 (Tres negativos y tres positivos)

¡Ahora el área de aparición tiene un hueco en medio en el que no aparecerán!

Código:
array = [3, 4, 5, -3, -4, -5]
result = array[rand(array.size)]
result2 = array[rand(array.size)]
$game_variables[15] += result
$game_variables[16] += result2

Gracias a ambos!!!!
Solucionado!
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5205

Gracias : 214

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Wecoc el Lun Ene 30, 2017 10:51 pm

Espera, ¿eso no los hace aparecer solo en los diagonales?
Además podrían aparecer fuera de pantalla o bien sobre tiles no pasables.

Te he hecho una fórmula para eso pero es demasiado larga para que quepa en un Llamar Script, así que te paso un pequeño script y un método para usarla.

Script:
Código:
class Interpreter
  def get_encounter_range(area_width, area_height, hole_width, hole_height)
    sx = $game_player.x - (area_width / 2)
    sy = $game_player.y - (area_height / 2)
    array = []
    for iy in sx...(sx + area_width)
      for ix in sy...(sy + area_height)
        next if !$game_map.valid?(ix, iy)
        next if !$game_map.passable?(ix, iy, 0)
        dx = ($game_player.x - ix).abs
        dy = ($game_player.y - iy).abs
        next if dx < (hole_width / 2) && dy < (hole_height / 2)
        array.push([ix, iy])
      end
    end
    return *array[rand(array.size)]
  end
end

Para usarla usa:
x, y = get_encounter_range(ancho del area grande, alto del area grande, ancho del area pequeña, alto del area pequeña)

y luego esas x, y las igualas a variables. Te pongo un ejemplo:

Código:
x, y, = get_encounter_range(10, 10, 4, 4)
$game_variables[1] = x
$game_variables[2] = y
avatar
Wecoc
Administrador
Administrador



Créditos 12236

Gracias : 638

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por Ledai el Lun Ene 30, 2017 11:12 pm

No no solo en los diagonales, aparecen bien ya que la variable 15 es la x y la 16 la y por lo que al juntarlas se crea la coordenada de transporte... Peeero sí, ese que mencionas es uno de los inconvenientes, que tengo que usar una condición de terreno para comprobar si a aparecido donde debe y no desde un tejado; lo he hecho bastante simplificado para que no se sobre cargue, pero es engorroso tener que configurar todos los tiles pasables con una ID de terreno.

Supongo que a largo plazo será mejor cambiar al script que has hecho... Y de paso no te dejo plantado el trabajo XD

Nahh, en serio, gracias; has entendido a la perfección lo que quería llegar a hacer sin necesidad de explicarlo, eso ya es el siguiente nivel.

Nuevo meme makero:
No sabes ni cómo pedir algo, y Wecoc va y te lo hace; Toma ya!

PD: de todos modos archivaré el comando de aleatorios condicionados para alguna otra cosa.

Edt: Al final creo que no lo usaré, pues he apañado solo una parte, la que comprueba si es pasable y valido por coordenadas, ya que necesito hacer más cálculos random del proyecto, pero igual sí me ha servido para mejorar el sistema y ahorrarme las ID de terreno, así que igualmente gracias!
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5205

Gracias : 214

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

Mensaje por kyonides-arkanthos el Miér Jun 28, 2017 10:04 pm

Aun si no es muy importante acotar algo después de todo este tiempo o luego de la respuesta de final Ledai, me pareció curioso agregar una curiosidad de Ruby a lo que había comentado Wecoc.



Código:
array = Array.new(100) {|index| index + 1} # [1, 2, 3, 4, (...) 100]
array.delete(17)
array.delete(91)
$game_variables[1] = array[rand(array.size)] # Cualquier valor de 1 a 100 menos 17 y 91


Se podría cambiar la primera línea por...
Código:
array = (1..100).to_a

Digamos que usar ahí un rango y luego restarle los valores indeseables es más sencillo de digitar, ya que no hace falta crear un bloque o closure para conseguir el mismo resultado.

En fin lo pueden hacer de ambas maneras, la cuestión es que sepan que existen 2 formas.

De paso me queda la duda de si el evento o monstruo podía aparecer sobre el jugador de vez en cuando. Solo es curiosidad.
avatar
kyonides-arkanthos
Principiante
Principiante

0/3

Créditos 553

Gracias : 84

Volver arriba Ir abajo

RPG Maker XP Re: No Asignar ciertos Aleatorios.

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.