En la semana estuvimos trabajando con gráficos y el fantasmita, esta vez le daremos la posibilidad de moverse por la pantalla. Para el ejemplo comenzaremos con un simple rectángulo y luego agregaremos el resto del fantasma en el ejemplo final.
Para lograr un movimiento interactivo, necesitaremos que la computadora dibuje una y otra, y otra vez el fantasma hasta que la posicion cambie, en ese momento, dara la ilusion de movimiento, el resto del tiempo el fantasma estara en el lugar (la computadora estara borrando y redibujandolo en la misma posicion).
Bucles o Loops
Los bucles o Loops (en inglés) son estructuras que repiten el contenido. con estructura nos referimos a que deben tener un segmento superior e inferior del codigo a repetir, como si fuera una hamburguesa, los panes serían la estructura que contienen la repeticion.
Linea 2 : Guardamos un numero 0 en el espacio de memoria a (variable a).
Linea 3 y 5 : Estructura While, repetira mientrasa sea igual a0.
linea 4 : Print "repetir como tonto", es el comando que se repetira dentro del bucle.
Como vimos en el ejemplo, el comando PRINT "repetir como tonto", se repite de forma infinita ya que la variable a SIEMPRE sera 0 por lo tanto el bucle repetira como tonto hasta que detengamos la ejecucion o apaguemos la PC.
A este tipo de bucles se los llama bucles Infinitos, en inglés: Infinite Loop.
Por cierto, en la ciudad de Cupertino, California la empresa Apple Inc, tiene sus cuarteles generales en un complejo de edificios (dentro de la cual estan los Oompa Lumpas diseñando cosas geniales) rodeada por una calle llamada INFINITE LOOP.
Buble no infinito
En este ejemplo haremos una modificacion para que el bucle tenga un fin y no sea infinito.
linea 2 : asignamos1a la variable a.
linea 3 : el PRINT "esta es la tabla del 2" esta fuera del bucle por lo tanto aparecera 1 sola vez.
linea 5 y 8: Estructura del bucle, repetira todo lo que esta dentro (lineas 6 y 7) mientras la condicion sea verdadera o sea que a variable a sea menor o igual a 10.
linea 6 : PRINT 2*a le indicamos que escriba en el area de texto el resultado de 2 multiplicado por el contenido de la variable a. Por eso escribe 2 debajo del titulo, por lo que ocurre en la linea 7, el proximo bucle a valdra 2 por ello 2*a sera igual a 2x2 y saldra 4, y a medida que se autoincrementa a obtendremos el proximo resultado de la tabla.
Linea 7 : a=a+1 se llama a esto un incrementador, o sea que tomamos el valor que habia en a y le sumamos 1 y reemplazamos el valor anterior.
Ejemplo: Si imaginamos un juego de carreras, cada vez que el auto pase por la meta el numero de vueltas sera vueltas=vueltas+1.
En este nuevo ejemplo, puse 2 bucles (reinicie la variable en la linea 11, a = 1 porque despues del primer bucle tenia un valor de 10).
Cambie los multiplicadores en ambos Print (y titulos) por el 7 en el primer ciclo y 8 en el segundo ciclo obteniendo las tablas que mas me costaron memorizar cuando era chico... fueron dos dignos enemigos.
NOTA: El contenido de la estructura While esta desplazado a la derecha, es una buena práctica hacerlo para comprender a simple vista QUE ESTA CONTENIDO DENTRO DE QUE OTRA COSA, a ésto se lo llama INDENTACION.
Les recomiendo hacer lo mismo (simplemente usando la telca espacio o la tecla TAB) el software correra igual si lo hacen o no, pero cuando tengan que volver a corregir errores, va a ser un dolor de cabeza el codigo si no lo respetan.
Moviendo el Fantasmita
para movel el fantasma de forma automatica, usaremos autoincrementadores como antes (a=a+1), pero en este caso con izq=izq+4 haciendo que en cada ciclo izq valdra 4, 8, 12, 16... (la tabla del 4, ok?), es mejor incrementarlo de a 4 porque si lo hacia de 1 el fantasma era muuuy lento, prueben diferentes valores para ver cual les gusta mas.
En este caso solo puse la forma basica de fantasma para que podamos ver de forma simple como actua el while, si desean hacerlo aun mas interesante, pongan PRINT izq dentro del while y veremos en la ventana de texto como crece con cada ciclo (y en la ventana de graficos veremos el fantasma moverse a la derecha).
Este es el código para Copiar/Pegar y probar:
Los colores solo Demarcan en azul la estructura de While y en rojo las apariciones de la variable izq:
CLG fastgraphics ancho = 40 izq = 40 arriba = 60 while ancho >0 izq = izq + 4 print izq #dibuja el fantasma color blue rect izq , arriba , ancho , ancho circle izq+ancho/2 , arriba, ancho/2 refresh pause .1 CLG end while
En éste vídeo, agregué el resto del cuerpo del fantasma, y probe incrementando izq, arriba, y ambos a la vez (se mueve en diagonal).