Diciembre 01, 2015, 05:46:16 PM Ultima modificación: Diciembre 01, 2015, 05:51:20 PM por cesar561
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));

#1 Diciembre 01, 2015, 05:57:50 PM Ultima modificación: Diciembre 01, 2015, 06:06:39 PM por penumbra
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.


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.

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]

randomize(); NUNCA OLVIDES ESTA FUNCIÓN!! es totalmente ESENCIAL!!
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Muchas gracias amigos, ambas funcionaron de maravilla, si al parecer es por el randomize();
que es lo que hace en especifico randomize();?
muchas graciasss

#6 Diciembre 01, 2015, 06:51:24 PM Ultima modificación: Diciembre 01, 2015, 06:54:00 PM por penumbra
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