Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: vitail en Marzo 01, 2015, 06:01:53 AM

Título: para que sirve la condicion ''for''
Publicado por: vitail en Marzo 01, 2015, 06:01:53 AM
No se es que siempre he visto esa condicion y no la entiendo ya que if es si en español, se entiende como while, es mientras, else es si no pero for no entiendo nadaaaa
Título: Re:para que sirve la condicion ''for''
Publicado por: Black_Cat en Marzo 01, 2015, 06:38:29 AM
No es una condicion, es un ciclo.

Tiene la siguiente forma:

for(estado_inicial; condicion; incremento)
{
sentencias_ejecutables.
}


donde:
"estado_inicial" es el valor con el que comenzará el ciclo.
"condicion" es la condicion que hará que se repita el ciclo mientras sea verdadera.
"incremente" es el valor a incrementar, para pasar del valor inical a uno que haga la condicion falsa.
"sentencias_ejecutables" es el grupo de sentencias que quieres que se ejecuten repetidas veces.



Título: Re:para que sirve la condicion ''for''
Publicado por: p34 en Marzo 02, 2015, 05:02:51 AM
El for es como el while, un ciclo que repite una definida cantidad de veces una parte del código.

Como explicó Black_Cat esta conformado por cuatro partes.

for(inicio;condición;incremento/decremento)
{acciones;}

En el inicio tienes que poner una variable y asignarle un valor, por ejemplo i=0; que es el más famoso. En game maker no tienes que declarar la variable "i", pero si quieres usar otra creo si la tienes que declarar. Esta variable es para el control del ciclo ya que en algún momento tienes que salir de él. Esta parte sólo se lee la primera vez que entra al código.

La segunda parte, condición, es como un "if", pones en que momento quieres que se acabe el ciclo, por ejemplo i<10; no tienes que poner la palabra "if" sino que sólo la condición o condiciones. Cada que termina de leer todas las acciones checa si la condición se cumple y en caso de ser así, vuelve a entrar.

La tercera parte es el incremento/decremento. Una vez que acabe de leer todas las acciones viene a esta parte y realiza lo que le digas que tiene que hacer, por ejemplo i+=1

Por ejemplo puedes poner el siguiente código en el draw de algún juego para que veas cómo funciona todo esto:

for(i=0;i<10;i+=1)
{
draw_text(10+10*1,30,string(i));
}


La última parte es la de acciones, y es donde pones todo lo que quieres que repita. Es igual que un if, si sólo es una acción puedes o no ponerle las llaves "{}" pero si es más de una si debes ponerlas.

Trata de que nunca te quede un ciclo del que nunca se pueda salir ya que se traba el programa o juego en este caso, por ejemplo nunca pongas algo así for(i=0;i<10;i-=1){/*cosas*/} ya que inicias en 0, lo haces mientras sea mayor a 10 y lo vas decrementando, por lo que nunca va a ser mayor a 10 y nunca va a salir.
Título: Re:para que sirve la condicion ''for''
Publicado por: vitail en Marzo 02, 2015, 10:22:36 PM
Cita de: p34 en Marzo 02, 2015, 05:02:51 AM
El for es como el while, un ciclo que repite una definida cantidad de veces una parte del código.

Como explicó Black_Cat esta conformado por cuatro partes.

for(inicio;condición;incremento/decremento)
{acciones;}

En el inicio tienes que poner una variable y asignarle un valor, por ejemplo i=0; que es el más famoso. En game maker no tienes que declarar la variable "i", pero si quieres usar otra creo si la tienes que declarar. Esta variable es para el control del ciclo ya que en algún momento tienes que salir de él. Esta parte sólo se lee la primera vez que entra al código.

La segunda parte, condición, es como un "if", pones en que momento quieres que se acabe el ciclo, por ejemplo i<10; no tienes que poner la palabra "if" sino que sólo la condición o condiciones. Cada que termina de leer todas las acciones checa si la condición se cumple y en caso de ser así, vuelve a entrar.

La tercera parte es el incremento/decremento. Una vez que acabe de leer todas las acciones viene a esta parte y realiza lo que le digas que tiene que hacer, por ejemplo i+=1

Por ejemplo puedes poner el siguiente código en el draw de algún juego para que veas cómo funciona todo esto:

for(i=0;i<10;i+=1)
{
draw_text(10+10*1,30,string(i));
}


La última parte es la de acciones, y es donde pones todo lo que quieres que repita. Es igual que un if, si sólo es una acción puedes o no ponerle las llaves "{}" pero si es más de una si debes ponerlas.

Trata de que nunca te quede un ciclo del que nunca se pueda salir ya que se traba el programa o juego en este caso, por ejemplo nunca pongas algo así for(i=0;i<10;i-=1){/*cosas*/} ya que inicias en 0, lo haces mientras sea mayor a 10 y lo vas decrementando, por lo que nunca va a ser mayor a 10 y nunca va a salir.

a ver, es como el while, solo que con menos lineas de codigo y de que puedo decrementar la variable cuando esa condicion sea mayor o menor, y si es mayor o menor (en uno no debe de tener limitacion) pasa tal acción?, bueno supongo que no sera tan importante el ciclo for ¿o si?
Título: Re:para que sirve la condicion ''for''
Publicado por: Marth en Marzo 02, 2015, 10:35:13 PM
Ya veras que lo vas a utilizar bastante...
Título: Re:para que sirve la condicion ''for''
Publicado por: Iros en Marzo 02, 2015, 10:47:15 PM
Algo que nunca aclararon es que la variable "i" (puede ser cualquiera) no siempre puede empezar en 0, puede empezar en 10 y el condicional lo pones >= que y en el 3 argumento le pones i-=1 quedando algo así:

[gml]
for (i=10;i>=0;i-=1) {
    //Acción a realizar.
}
[/gml]
Título: Re:para que sirve la condicion ''for''
Publicado por: penumbra en Marzo 02, 2015, 10:48:29 PM
Cita de: vitail en Marzo 02, 2015, 10:22:36 PM
a ver, es como el while, solo que con menos lineas de codigo
No, no es como un while. El que while y for sean ciclos, no los hace similares.Obvio que todos los ciclos implican repetición, pero cada uno tiene sus particularidades (no es correcto pensar que un ciclo while trabaja como uno for).

Cita de: vitail en Marzo 02, 2015, 10:22:36 PM
bueno supongo que no sera tan importante el ciclo for ¿o si?
Al contrario, el ciclo for posiblemente sea el ciclo más usado en cualquier lenguaje de programación.

¿Quieres entender fácilmente como funciona un ciclo for? Usa el debugger de GMS para ver cómo progresa cada iteración del ciclo, cómo se evalúa la condición y cómo se incrementa la variable del ciclo
Título: Re:para que sirve la condicion ''for''
Publicado por: p34 en Marzo 02, 2015, 11:20:39 PM
Un for lo primero que va a hacer es ponerte la variable en el valor que le asignes, y como comentaron no necesariamente es 0, luego va y lee todas las acciones que le indiques que haga, aumenta o disminuye la variable de "control" por decirle de una forma en la tercer sección <incremento/decremento> y evalúa la condición. Si la condición es verdadera, (ya que se maneja de manera booleana con valores posibles de verdadero/falso), vuelve a hacer todas las acciones, después va a la sección de incremento/decremento y vuelve a evaluar la condición; así hasta que la condición se haga falsa y ya no entre.

En la condición no solamente se puede poner "<" o ">" sino que puede ser de cualquier manera al igual que en un "if", por ejemplo i=10 (sólo cuando sea 10 entra); i!=10 (siempre que sea diferente de 10 entra); i<5 and i>0 (mientras el valor de i esté entre 0 y 5 entra), etc.

Un for es de lo que más va a usar cuando programes por su simpleza de estructura pero eficiencia en el programa, yo personalemte lo uso para todos mis menús, mi propio sistema de gravedad en mis juegos (porque el "gravity" no es exacto y con un for se puede ser completamente preciso), en el movimiento de mis personajes tanto el jugador como las IAs, en el HUD y en muchas otras cosas.


//código para dibujar un corazón por cada vida que tengas
for(i=global.vidas;i>0;i+=1)
{draw_sprite(30+16*i,20,spr_corazon);}



//código de gravedad
var incremento;
incremento = 0;
for(i=0;i<5+incremento;i+=1)
{
  if(place_meeting(x,y+1,obj_suelo))
    break;//Esta palabra reservada termina el for sin importar que aún se cumpla la condición
  y += 1;
  incremento += 0.2;
}
Título: Re:para que sirve la condicion ''for''
Publicado por: vitail en Marzo 03, 2015, 01:52:52 AM
No se si tengo un serio retraso en la cabeza pero no entiendo para nada nisiquiera con los ejemplos  :'( :'( :'( :'(

Ya no importa, gracias de todas formas por las respuestas :(
Título: Re:para que sirve la condicion ''for''
Publicado por: Iros en Marzo 03, 2015, 02:03:44 AM
Leete la documentación oficial:

http://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_11_for.html

O recurrí a Wikipedia:

http://es.wikipedia.org/wiki/Bucle_for
Título: Re:para que sirve la condicion ''for''
Publicado por: ChinglesVara en Marzo 03, 2015, 02:20:20 AM
Te lo explico en criollo pa que te sea mas simple, (No te preocupes que a mi me paso lo mismo que a ti)

escribi eso en un objeto y colocalo en la room para fijarte que suscede

for(i=0;i<10;i++){
draw_text(0,0+(32*i),"Texto" +string (i))
}

te lo tradusco


i es igual a 0;mientras i sea menor a 10; el valor de i se incrementara de 1 en 1 hasta llegar a 10

y lo que esta entre { }
dice que se dibuje el texto + el valor de i en el momento de dibujar ese reglon, en la pociosion x0 y luego en la pocicion y + 32 pixeles*el valor actual de i

entonces primer ciclo
i=0 el texto se dibuja en la pocision 0
i=1 el texto se dibuja en la pocicion y32
i=2 el texto sedibuja en la pocicion y 64 (osea i+ (32*2) )

en conclucion hace que una accion se repita 10 veces (en este caso)

i=0 valor actual
i<10 veces que se repetira la accion
i++ se le suma 1 cada vez, mientras se repite la accion


Ahora porque es importante el ciclo for, pues porque te sirve tanto como para ahorrar lineas de codigo,  para tener el codigo mas organizado, por lo que resulta mas facil de modificar, y leer en busca de errores por ejemplo.

el for te simplifica mucho las cosas

Título: Re:para que sirve la condicion ''for''
Publicado por: p34 en Marzo 03, 2015, 03:22:19 AM
No te preocupes por no entenderlo al inicio.

La primera vez que me explicaron para que servia me pusieron un ejemplo de movimiento horizontal con un for y me dijeron "aumentale el valor para que veas que pasa" y yo le puse como 10000 o una cosa así y se trabó el programa xD y como no lo entendí lo dejé a un lado por cerca de un año, lo cual ahora sé que me hubiera ahorrado mucho trabajo.

Trato de explicártelo de forma explícita pero sinceramente no sé que parte es la que no entiendes (o si es todo), si pudieras especificar que es lo que te revuelve, podría decirlo de otra forma. O pon que versión de GM usas y te hago un ejemplo.

Lo del incremento con el i++ ó i-- no lo usé porque en GM8 según recuerdo no lo aceptaba y en el Studio ya lo hace, pero es lo mismo poner i+=1 que i++ asimismo i-=1 que i--.
Título: Re:para que sirve la condicion ''for''
Publicado por: Sockman en Marzo 04, 2015, 12:09:26 PM
Por aquí otro al que le costó comprenderlo también.  :'( Y los ejemplos que suele poner la gente no suelen ayudar, porque te meten las misma variable "i" en las acciones y puede confundir.

Piénsalo de esta forma:
Si tenemos for (variable=0; variable<10; variable+=1)'
Significa que cuando la variable sea 0, se le va a sumar 1 mientras sea menor que 10.

Pero tienes que tener en cuenta que todo esto se hace en un solo step. Osea, que en un sólo step, la variable habrá tenido los 10 valores (0,1,2...9), habrá llegado al 10 y habrá salido del bucle.
Título: Re:para que sirve la condicion ''for''
Publicado por: vitail en Marzo 05, 2015, 12:46:33 AM
Cita de: Sockman en Marzo 04, 2015, 12:09:26 PM
Por aquí otro al que le costó comprenderlo también.  :'( Y los ejemplos que suele poner la gente no suelen ayudar, porque te meten las misma variable "i" en las acciones y puede confundir.

Piénsalo de esta forma:
Si tenemos for (variable=0; variable<10; variable+=1)'
Significa que cuando la variable sea 0, se le va a sumar 1 mientras sea menor que 10.

Pero tienes que tener en cuenta que todo esto se hace en un solo step. Osea, que en un sólo step, la variable habrá tenido los 10 valores (0,1,2...9), habrá llegado al 10 y habrá salido del bucle.

ah asi se le entiende bien :D