Septiembre 03, 2014, 06:19:59 PM Ultima modificación: Septiembre 03, 2014, 06:22:18 PM por kaliman777
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.
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

#1 Septiembre 03, 2014, 06:38:50 PM Ultima modificación: Septiembre 03, 2014, 07:02:41 PM por penumbra
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.

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. :)




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.