Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kaliman777 en Febrero 12, 2015, 06:13:11 PM

Título: Duda con instance_create(choose(x1,x2))
Publicado por: kaliman777 en Febrero 12, 2015, 06:13:11 PM
Hola amigos:

Cuando intento elegir varias frutas de una canasta donde cada fruta es diferente, usando instance_create(choose(x1,x2)) No quiero otros métodos complicados como listas ni arrays.

¿Es posible lograr que no me salgan frutas repetidas?

Cualquier idea que tengan para lograrlo, será bienvenida y agradecida.

No tengo idea, pero talvez algo así: if banana=1{instance_choose(otros-banana}}
Espero sus ideas, sé que me ayudarán.

Thanks.
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: kaliman777 en Febrero 12, 2015, 07:36:56 PM
No, Chron. Eso ya lo sabemos. El asunto es solo cómo no repetir.
Si ya salió una banana, que en el siguiente paso de elegir fruta ya no saque banana.
Ya sea porque una variable hizo 0 a la banana o porque un código la saca de la posibilidad.
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: Clamud en Febrero 12, 2015, 09:08:02 PM
Se puede así:
[gml]
randomize();
objeto = choose( ob1, ob2, ob3, ... );
if( not instance_exists(objeto) ) instance_create( x,y, objeto );
[/gml]
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: Yoo en Febrero 13, 2015, 01:51:59 AM
Cita de: Clamud en Febrero 12, 2015, 09:08:02 PM
Se puede así:
[gml]
randomize();
objeto = choose( ob1, ob2, ob3, ... );
if( not instance_exists(objeto) ) instance_create( x,y, objeto );
[/gml]

Yo tambien estaba siguiendo este tema, y kisiera saber para q es el randomize?? RESPONDE y GRACIAS  :D
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: Clamud en Febrero 13, 2015, 04:25:16 AM
Las funciones que devuelven un valor al azar (llamadas pseudo-aleatorias) funcionan en base a una número denominado semilla para generar los números "aleatorios". Para cada semilla se produce una secuencia de números aleatorios, si no se cambia se obtendrá el mismo orden de resultados

randomize() asigna una semilla "aleatoria", ocasionando que la función choose() sea más aleatoria.

También se puede asignar manualmente con random_set_seed().

Me acabo de dar cuenta que el código necesita un ciclo para funcionar, debe quedar así:
[gml]
randomize();
repeat( n ) //n es el número de objetos
{
    objeto = choose( ob1, ob2, ob3, ... );
    if( not instance_exists(objeto) ) { instance_create( x,y, objeto ); break; }
}
[/gml]
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: Yoo en Febrero 13, 2015, 01:42:30 PM
Gracias, ya entendi!!!   :D
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: kaliman777 en Febrero 13, 2015, 04:07:53 PM
Gracias Clamud, si el código funcionara fuera una maravilla. Voy a probarlo.
La duda es: al crear el objeto el código verifica si ya existe el objeto, no crees que siempre dará como resultado que sí que ya existe?

Yo siempre digo que nadie entiende más un código que quien lo elabora. Si no es mucha molestia talvez podrías hacernos un breve engine usando GM8 dode saques tres de cinco objetos en total siempre diferentes usando ese código.

objeto=choose( pera, manzana, banana, melon, sandia);
Aunque sé lo que significa el repeat(3), me pierde un poco. Porque aunque quiere decir que repita tres veces, hay que decir en qué posición y eso.

Saludos y gracias
Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: Black_Cat en Febrero 13, 2015, 05:37:58 PM
Inclusive creo que el código está mal empleado, porque se puede repetir N veces sin embargo puede que en una de esas veces, verifique un objeto que ya existe, por lo que no crearía uno nuevo y así no crearía los N objetos sino menos.

Una posibilidad que propongo para arreglarlo es usar:


randomize();
contador = 0; // Usaremos un contador para contar la cantidad de frutas sacadas


while(contador < 3)// Contamos la cantidad de frutas que queremos sacar, osea, 3
{
    objeto = choose( manzana, frutilla, naranja, cerezas, uvas); // escogemos una fruta
   
    if not instance_exists(objeto)  // si la fruta que escogimos no existe...
    {
        instance_create( contador * 30,y, objeto );  //...entonces la creamos
        contador += 1; // y contamos que sacamos una fruta
    }
}


De todas formas, dejo un ejemplo adjunto.


Título: Re:Duda con instance_create(choose(x1,x2))
Publicado por: kaliman777 en Febrero 13, 2015, 09:09:44 PM
Wow!!!!
Me quito el sombrero Black_cat. Llevaba más de dos años buscando este código, algo me decía que existía la forma, pero todo mundo me complicaba la vida con las dichosas ds_list_create()
TU CÓDIGO ES PERFECTO.

Como lo decías: el de Clamud, crea a los objetos, pero si ya existe no lo dibuja, talvez le falta un else "crearlo de nuevo" no sé.

Bueno estoy feliz porque ahora ya puedo crear objetos sin repetirse usando el más simple de los random.

Gracias de nuevo a todos, felicidades.