Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: cesar561 en Diciembre 01, 2015, 05:46:16 PM

Título: Problema contador random
Publicado por: cesar561 en Diciembre 01, 2015, 05:46:16 PM
Buenos días, tengo un problema tal vez muy básico  :-[. En mi juego utilizare este tipo de contador para algunas condiciones . Mi intención es que funcione de manera que cuando la variable contador alcance cierto valor (random) se reinicie el contador una y otra vez.....

El problema esta en que  choose(30,60,90,120); solamente selecciona 30 reinicia el conteo y después ya no selecciona ninguno, por lo tanto variable contador se incrementa de manera infinita.  :-[  dejo mi código para explicarme mejor  :-[, agradeceré cualquier sugerencia.

///Objeto control contador

//Create
cotador = 0;

//Step
contador += 1;

t= choose(30,60,90,120)

if(contador == t){

    contador = 0;
}

//Draw
draw_text(20,20,string(contador));
Título: Re:Problema contador random
Publicado por: penumbra en Diciembre 01, 2015, 05:57:50 PM
Según lo que comentas, no es muy recomendable usar t=choose(30, 60, 90, 120) en STEP. Ya que en cada paso el valor de t podría cambiar. SI por ejemplo, en un paso, el contador es 59 y t se había fijado en el paso anterior a 60, pero en este paso actual se escoge 30 como valor de t, la condición que estaba a punto de cumplirse para c == t=60 ya no se cumplirá.

Yo haría algo parecido a:

CREATE
[gml]
contador = 0
randomize()
alarm[0] =choose(30,60,90,120)
[/gml]

STEP
[gml]
contador++
[/gml]

ALARMA[0]
[gml]
contador = 0    //Reiniciar contador
randomize()
alarm[0] = choose(30, 60, 90, 120)  //Volver a elegir un valor aleatorio
[/gml]

Esto creo que hace lo que quieres. La alarma elige un valor al azar al comienzo (CREATE), el contador se va incrementando en STEP. Cuando la alarma llega a su límte elegido al azar, por ejemplo, 60, el contador se hace 0 (en el evento de alarma). Esto es lo que hacías al preguntar en STEP si el contador y t eran iguales: reiniciabas el contador. Por último, la alarma vuelve a correr con un valor al azar, y el contador comienza a incrementarse desde 0.

Título: Re:Problema contador random
Publicado por: Marth en Diciembre 01, 2015, 05:58:06 PM
Pruba a usar previo al choose randomize(), que si no siempre te saldra el mismo valor.
Tambien puedes hacer pruebas en las que se muestra el valor de t, para ver que ocurre.
Título: Re:Problema contador random
Publicado por: Clamud en Diciembre 01, 2015, 06:08:17 PM
Otra forma sería:
[gml]
///Create
randomize();
contador = 0;
t = choose(30,60,90,120);
[/gml]
[gml]
///Step
contador += 1;
if( contador > t )
{
    randomize();
    contador = 0;
    t = choose(30,60,90,120);
}
[/gml]
Título: Re:Problema contador random
Publicado por: kostra en Diciembre 01, 2015, 06:23:14 PM
randomize(); NUNCA OLVIDES ESTA FUNCIÓN!! es totalmente ESENCIAL!!
Título: Re:Problema contador random
Publicado por: cesar561 en Diciembre 01, 2015, 06:49:46 PM
Muchas gracias amigos, ambas funcionaron de maravilla, si al parecer es por el randomize();
que es lo que hace en especifico randomize();?
muchas graciasss
Título: Re:Problema contador random
Publicado por: penumbra en Diciembre 01, 2015, 06:51:24 PM
si no usas randomize(), GM escogerá el mismo valor siempre que uses choose(), irandom(), etc. randomize() hace que la elección sea al azar.

En términos más técnicos. randomize() le da un valor aleatorio a la semilla aleatoria
http://docs.yoyogames.com/source/dadiospice/002_reference/maths/real%20valued%20functions/randomize.html

https://en.wikipedia.org/wiki/Random_seed