PICO-8 Tutorial #3: IF Statements


IF Statements

Los IF son unas estructuras de programación que nos permiten cambiar el flujo de ejecución de nuestro programa. ¿Recuerdas que dijimos que el código se ejecutaba de forma secuencial? Pues bien no tiene porqué ser siempre así, o al menos con un IF statement lo que podemos hacer es decidir si ejecutar o no un comando o un bloque de código en base a una condición.

if, en LUA lo veremos siempre acompañado de un then se puede traducir como un Si… entonces… . O dicho de mejor modo Si (pasa este algo) entonces (ejecuta este código).  Además todos los if statements en LUA se cierran con END igual que hacemos con las funciones. Esto es un ejemplo:

Y también es un adelanto de lo que vamos a hacer para entender estos statements. Vamos a lograr que nuestro corazón no salga de la pantalla. Para simplificar nuestro objetivo de momento vamos a olvidarnos del eje de las Y y solo trataremos lo que sucede en el eje de las X:

  1. Declaramos las siguientes variables. Son las mismas que en el post anterior, pero hemos añadido una nueva llamada speed o velocidad.

Esta variable nueva es muy importante y va a sustituir el +1 que teníamos anteriormente.  Del siguiente modo:

  1. Vamos a crear nuestro if statement justo después con la condición de que si m_x supera el valor de 127 que te recuerdo es el límite de la pantalla en pixeles de PICO-8 el valor de la variable speed pase a ser -1 o sea que en vez de sumar +1 como estabamos haciendo en m_x = m_x + speed ahora va a restar.

  1. Dentro de _draw mantenemos todo como en nuestro post anterior:

Si ejecutas el siguiente código el resultado es que el corazón cuando llegue a la coordenada 127 va a empezar a sustraer en vez de sumar 1 pixel a la posición de m_x generando este rebote de nuestro corazón hacia el otro lado. Pero verás, si dejas ejecutar el programa, que cuando m_x llegue a la coordenada 0, o sea el extremo izquierdo, no va a rebotar sino que seguirá sustrayendo y nuestro corazón va a perderse por el lado izquierdo de la pantalla. ¿Intuyes que estructura de programación necesitamos para prevenir que eso pase?

Antes de nada te dejo el código completo:

color_♥ = 8

texto = "♥"

m_x = 10

m_y = 10

speed = 1

function _init()

end

function _update()

m_x = m_x + speed

    if m_x > 127 then

       speed = -1

    end

    

end

function _draw()

cls()

print(texto, m_x, m_y, color_♥)

    

end

Sobre speed

Quizás te estés preguntando, antes de seguir porque no era válido hacer m_x = m_x - 1 dentro del IF y ahorrarnos esa variable nueva. Bien, el problema es que arriba seguimos teniendo m_x = m_x + 1. Esto  hace que nuestro if statement sea inutil, ya que una cancela la otra y el resultado es que el corazón seguirá perdiéndose más allá del límite derecho de la pantalla. Sin embargo si lo que hacemos es cambiar el propio incremento, en vez de la variable que refleja la posición (m_x) cuando se llega a una cierta condición ya no se contradicen.

Más IF statements

¿Sabrías cómo añadir otro if para evitar que el corazón se pierda por la parte derecha? ¿Sabrías añadir además 2 otros if que hagan referencia al eje de la Y? Tendrás que cambiar tus variables y  además añadir una nueva variable de speed vertical. Pero fíjate que la lógica sería exactamente la misma. Voy a poner el código definitivo de como lo he montado yo personalmente, pero te recomiendo que lo pruebes por ti mismo/a antes de sencillamente mirar el código a continuación:

color_♥ = 8

texto = "♥"

m_x = 10

speed_x = 1

m_y = 15

speed_y = 1

function _init()

end

function _update()

m_x = m_x + speed_x

m_y = m_y + speed_y

    if m_x > 122 then

       speed_x = -1

    end

    

    if m_x < 0 then

       speed_x = 1

    end

    

    if m_y > 122 then

       speed_y = -1

    end

    

       if m_y < 0 then

       speed_y = 1

    end

    

end

function _draw()

cls()

print(texto, m_x, m_y, color_♥)

    

end

Comentarios

Puedes ver que nuestro script se está volviendo cada vez más complejo. Una buena práctica en cualquier proyecto de programación es añadir comentarios para dejar claro para tí y otras personas que lean el código de que se encarga cada parte. Para añadir un comentario usa dos guiones seguidos del siguiente modo:

Los comentarios son obviados por el compilador por lo que solo se muestran en el script, no se ejecutan. Para rematar el ejemplo, y por si sigues un poco confuso con los ejemplos de este post, espero que los siguientes comentarios sean de ayuda para entenderlo:

-- variables

texto = "♥" -- corazon

color_♥ = 8 -- color del corazon

-- coordenadas x y velocidad x

m_x = 10

speed_x = 1

-- coordinadas y y velocidad y

m_y = 15

speed_y = 1

function _init()

end

function _update()

m_x = m_x + speed_x -- crear movimiento en x

m_y = m_y + speed_y -- crear movimiento en y

-- reconocer los limites de la pantalla

    if m_x > 122 then

       speed_x = -1 -- cambiar direccion en x

    end                                           -- cuando se llega al extremo izquierdo

    

    if m_x < 0 then

       speed_x = 1 -- cambiar direccion en x

           end        -- cuando se llega al extremo derecho

    

-- reconocer los limites de y

    if m_y > 122 then

       speed_y = -1

    end

    

       if m_y < 0 then

       speed_y = 1

    end

    

end

function _draw()

cls() --limpia la pantalla

print(texto, m_x, m_y, color_♥) -- dibuja el corazon

    

end

Oye, con esto ya tenemos un corazón que rebota por la pantalla. Podría ser el primer paso hacia nuestro juego completo.

Leave a comment

Log in with itch.io to leave a comment.