Manteniendo al fantasma 
dentro de la pantalla

IF es una estructura de validación, tal vez una de las más utilizadas. 

If en español significa "SI...pasa esto" pero no como afirmacion sino como condicionamiendo, algo asi como "EN CASO DE..".

Por ejemplo, una madre le dice al hijo: 



     "Anda al almacen a comprar leche, si tienen huevos, entonces trae media docena" Entonces, el chico trajo seis botellas de leche".
En terminos humanos, parece un chiste (y lo es) pero desde el punto de vista de la programacion el chico valido si habia huevos y trajo media docena de leches (que es la rutina principal)... desde el punto de vista de la programacion esta bien, en terminos humanos no, porque no se deben explicar los chistes :(  

    Ese SI... Entonces, se traduce como IF... Then

La ventana de gráficos tiene un tamaño de 300x300, cuando izq o arriba superan éste valor el fantasma desaparece de la pantalla. 

   Hay forma de hacer que la pantalla gráfica sea más grande (lo haremos en proximas clases) pero aún así queremos que cuando salga por la pantalla vuelva a aparecer por la izquierda (como pasaba en el pacman).

Para lograr esto, debemos volver a 1 el valor de IZQ, pero SOLAMENTE si el valor de IZQ es mayor o igual a 300, para ello usamos if. Para entenderlo lo razonaremos en español, tambien conocido com pseudocodigo (usado para explicar codigo):


      SI  (izq  es mayor o igual a 300)  ENTONCES

               asignar 1 a izq
    finSi

Este código detectará el valor de izq a 300, cuando la condición sea cierta (marcada en rojo) se asignara 1 a izq. Veamos otro ejemplo que comprenderemos facilmente:


      SI  (mi pelo es un desastre)  ENTONCES
               ir a la peluqueria

    finSi

Ese codigo SOLO se ejecuta si el pelo es un desastre, por lo tando cuando esa condicion sea falsa, podrá ser ignorada. En el ejemplo, podemos ver a la derecha como el valor de izq crece (gracias a PRINT izq) y cuando llega a 300 el IF lo vuelve a 1, y el fantasma aparece por la izquierda.




Controlando el Fantasma con las teclas

Como ya dijimos, para que el personaje se mueva a la derecha izq=izq+4, si queremos que se mueva a la izquierda, debemos disminuir el valor izq=izq - 4.


Para controlar los valores verticales, si queremos que el personaje baje usamos arriba = arriba + 1 y si queremos que suba arriba = arriba - 1. 

Podemos combinar, como vimos en el video un incremento en vertical y horizontal que nos da un movimiento en diagonal, siempre dentro del ciclo While para que se repita.


En el ejemplo, usamos a = key que detecta que tecla esta presionada y guarda el numero de esa tecla en la variable a. 

luego con 4 IF evaluamos si es la tecla de cursor:


  • ARRIBA (Codigo 16777235)
  • ABAJO (Codigo 16777237)
  • IZQUIERDA (Codigo 16777234)
  • DERECHA (Codigo 16777236)
Si se desea usar otras teclas, pueden ver todos los codigos en este link.





Codigo Funcionando
para Copiar/Pegar


CLG
fastgraphics
ancho = 40
izq = 20
arriba = 60
radioChico = ancho/5
radioGrande = ancho/2
while ancho >0
    a = key  
    #pregunta si es la tecla de cursor de arriba, abajo, izquierda, o derecha
    if (a = 16777235) then 
           arriba = arriba - 4
    endif

    if (a = 16777236) then 
          izq = izq + 4
    endif
    if (a = 16777237) then 
           arriba = arriba + 4
    endif
    if (a = 16777234) then
           izq = izq - 4
    endif
    #controla que no se salga de la pantalla
    if izq >=300 then
    izq = 1
    endif
    if arriba >= 300 then
    arriba = 1
    endif
    color blue
    #cuerpo fantasma
    rect izq, arriba, ancho, ancho
    circle izq+radioGrande, arriba, radioGrande
    circle izq+radioGrande, arriba+ancho, radioChico/2
    circle izq+radioChico/2, arriba+ancho, radioChico/2
    circle izq+radioGrande+radioChico*2, arriba+ancho, radioChico/2
    color clear
    circle izq+radioGrande+radioChico, arriba+ancho, radioChico/2
    circle izq+radioChico/2+radioChico, arriba+ancho, radioChico/2
    color white
    circle izq+ancho/3, arriba+ancho/3, ancho/6
    circle izq+(ancho/3)*2, arriba+ancho/3, ancho/6
    color black
    circle izq+ancho/3 , arriba+ancho/3, ancho/10
    circle izq+(ancho/3)*2 , arriba+ancho/3, ancho/10 
   refresh
    pause .1
    clg
end while



Mejorando el Codigo 

   Tenemos 4 IF consecutivos para leer las teclas (es un codigo poco optimizado digamos), para eso existe otra estructura llamada CASE, y tiene esta sintaxis.

Como se ve en la imagen de la izquierda, dentro del case esta el valor de cada posibilidad de a, podemos evaluar TODAS las teclas del teclado si deseamos.
El código final quedaría de ésta forma:


CLG
fastgraphics
ancho = 40
izq = 20
arriba = 60
radioChico = ancho/5
radioGrande = ancho/2
while ancho >0
    a = key
    begin case
        case a = 16777235
                arriba = arriba - 4
        case a = 16777236
                izq = izq + 4
        case a = 16777237
                arriba = arriba + 4
        case a = 16777234
                izq = izq - 4
    end case
    #controla que no se salga de la pantalla a la derecha
    if izq >=300 then
            izq = 1
    endif
    #controla que no se salga de la pantalla por abajo
    if arriba >= 300 then
            arriba = 1
    endif
    color blue
    #cuerpo fantasma
    rect izq, arriba, ancho, ancho
    circle izq+radioGrande, arriba, radioGrande
    circle izq+radioGrande, arriba+ancho, radioChico/2
    circle izq+radioChico/2, arriba+ancho, radioChico/2
    circle izq+radioGrande+radioChico*2, arriba+ancho, radioChico/2
    color clear
    circle izq+radioGrande+radioChico, arriba+ancho, radioChico/2
    circle izq+radioChico/2+radioChico, arriba+ancho, radioChico/2
    color white
    circle izq+ancho/3, arriba+ancho/3, ancho/6
    circle izq+(ancho/3)*2, arriba+ancho/3, ancho/6
    color black
    circle izq+ancho/3 , arriba+ancho/3, ancho/10
    circle izq+(ancho/3)*2 , arriba+ancho/3, ancho/10
    refresh
    pause .1
    CLG
end while