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.
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.
Se puede así:
[gml]
randomize();
objeto = choose( ob1, ob2, ob3, ... );
if( not instance_exists(objeto) ) instance_create( x,y, objeto );
[/gml]
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
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]
Gracias, ya entendi!!! :D
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
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.
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.