Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kaliman777 en Septiembre 03, 2014, 06:19:59 PM

Título: Al crear un objeto de entre 10 diferentes, no se repita el mismo
Publicado por: kaliman777 en Septiembre 03, 2014, 06:19:59 PM
Buenas Makers:

Por favor necesito ayuda para hacer esto:
Supongan que quiero elegir 5 objetos (frutas) de 10 disponibles. Una a la vez usando alarmas cada 10 steps.
La condición es que si por ejemplo, salió manzana de primero, que que solo sean 9 las opciones para elegir las otras 4 frutas y manzana ya no salga. Y así también si salió pera de segunda, que ya no salga en las que me falta por crear.

Para elegirlas yo uso
instance_create(x,y,choose(pera,papaya,banana...mango));

Hay alguna forma simple, ojalá que sin recurrir a List_Ds_Create? Cualquier opción sea bienvenida.

Gracias, me urge mucho.
Título: Re:Al crear un objeto de entre 10 diferentes, no se repita el mismo
Publicado por: penumbra en Septiembre 03, 2014, 06:38:50 PM
La mejor manera me parece que es usando una ds_list. Las otras manera que se me ocurren es usando ifs y while, pero se me hace algo ineficiente ya que se podrían "gastar ciclos" generando el mismo objeto varias veces. Por ejemplo
[gml]
inst = instance_create(x,y,choose(pera,papaya,banana...mango));

with (inst)
{
     other.objeto = object_index
     if instance_number(other.objeto) > 1
          instance_destroy()
}[/gml]
El código anterior se tendría que usar en STEP, pero la probabilidad de que se generen 5 objetos distintos uno tras otro es bajísima, lo más seguro es que se generen objetos repetidos varias veces (entre más objetos frutas se hayan creado, la probabilidad de que el nuevo sea repetido es mayor) por lo que se necesitarán varios o muchos STEPS para lograr tener 5 objetos distintos.
Título: Re:Al crear un objeto de entre 10 diferentes, no se repita el mismo
Publicado por: Black_Cat en Septiembre 04, 2014, 01:16:47 AM
Otra solucion sería usando un Array, en donde irías almacenando los indices de los objetos que van saliendo.Así, calcular una resta entre la lista de objetos Original y la de objetos que ya han sido creados, y luego crear objetos de esa tercera lista resultado de la resta entre las dos anteriores, por lo que no contendría objetos que ya han sido creados. :)

Título: Re:Al crear un objeto de entre 10 diferentes, no se repita el mismo
Publicado por: Killer en Septiembre 04, 2014, 01:29:39 AM
Puedes usar este código cada vez que quieras crear una fruta nueva:

var fruta;
do fruta = choose(pera,papaya,banana...mango);
until(!instance_exists(fruta));
instance_create(x,y,fruta);


Donde se elige una fruta y se revisa si la fruta ya existe, si aún no existe se crea la instancia de la fruta, si ya existe se vuelve a elegir una fruta hasta que se elija una que aún no exista.