En este capítulo veremos las dos funciones que controlan la pulsación de botones durante el juego. Se detectará la pulsación de Flecha-arriba, Flecha-abajo, X y Triángulo para mover las barras de juego, y la tecla START para pausar o salir del juego. Veremos también como dotar al juego de “inteligencia artificial” para que este controle la barra derecha en el modo de 1 jugador.
-- funcion botonesjuego function botonesjuego() pad = Controls.read() if pad:down() then if PosBarraIzda < 242 then PosBarraIzda = PosBarraIzda + VelBarra end end
Si se pulsa Flecha-abajo, comprobamos que la barra izquierda no haya llegado a la parte inferior de la pantalla. Si es así desplazamos la barra izquierda hacia abajo sumando al valor de la variable PosBarraIzda el valor de VelBarra que vimos que era 8 pixels.
if pad:up() then
if PosBarraIzda > 30 then
PosBarraIzda = PosBarraIzda - VelBarra
end
end
Si se pulsa Flecha-arriba, comprobamos que la barra izquierda no haya llegado a la parte superior de la pantalla. Si es así desplazamos la barra izquierda hacia arriba restando al valor de la variable PosBarraIzda el valor de VelBarra.
if NumJug == 2 then if pad:cross() then if PosBarraDrch < 242 then PosBarraDrch = PosBarraDrch + VelBarra end end if pad:triangle() then if PosBarraDrch > 30 then PosBarraDrch = PosBarraDrch - VelBarra end end end
Esta condicional se ejecuta cuando se ha elegido 2 jugadores. En este caso NumJug = 2.
Si se pulsa X, comprobamos que la barra derecha no haya llegado a la parte inferior de la pantalla. Si es así desplazamos la barra derecha hacia abajo sumando al valor de la variable PosBarraDrch el valor de VelBarra que vimos que era 8 pixels.
Si se pulsa Triángulo, comprobamos que la barra derecha no haya llegado a la parte superior de la pantalla. Si es así desplazamos la barra derecha hacia arriba restando al valor de la variable PosBarraDrch el valor de VelBarra.
if NumJug == 1 then if x > 250 then if y > PosBarraDrch then if PosBarraDrch < 242 then PosBarraDrch = PosBarraDrch + VelBarra end end if y < PosBarraDrch then if PosBarraDrch > 30 then PosBarraDrch = PosBarraDrch - VelBarra end end end end
Esta condicional se ejecuta cuando se ha elegido 1 jugador. En este caso NumJug = 1. Veamos como funciona la “Inteligencia Artificial” casera que controla la barra derecha.
Si la coordenada x de la pelota es mayor de 250, hacemos que la barra derecha vaya a buscar la pelota. Si no utilizasemos esta primera condicional, la barra derecha siempre estaría alineada con la pelota, y seria imposible ganar a la PSP. De este modo hay jugadas en que la barra derecha no tiene tiempo de corregir su posición, y la pelota la sobrepasa.
La condicional if y > PosBarraDrch then se cumple cuando la pelota está por debajo de la barra. En este caso desplazamos la barra derecha hacia abajo VelBarra pixels, siempre y cuando no esté ya en la posición inferior de la pantalla ( if PosBarraDrch < 242 then ).
La condicional if y < PosBarraDrch then se cumple cuando la pelota está por encima de la barra. En este caso desplazamos la barra derecha hacia arriba VelBarra pixels, siempre y cuando no esté ya en la posición superior de la pantalla ( if PosBarraDrch < 242 then ).
if pad ~= oldpad then
if pad:start() then
oldpad=pad
pausar()
end
end
Aquí se detecta si se ha pulsado el botón START para llamar a la función que hace la pausa del juego.
oldpad = pad
end
A continuación vemos la función pausar() que hace que el juego se pause, para permitir salir del mismo o continuar cuando se desee.
-- Funcion Pausar function pausar() screen:blit(0, 0, fondo) screen:blit(x-5, y-5, pelota) screen:blit(0, PosBarraIzda - 30, BarraIzda) screen:blit(470, PosBarraDrch - 30, BarraDrch)
Enviamos a la pantalla el fondo, la pelota y las barras de juego en la última posición calculada.
screen:fontPrint(proportional15, 190, 130, "Juego en Pausa", rojo)
Enviamos a la pantalla el mensaje "Juego en Pausa".
screen:fontPrint(proportional15, 120, 160, "START=Continuar SELECT=Salir", rojo)
Enviamos a la pantalla el mensaje "START=Continuar SELECT=Salir".
screen:fontPrint(proportional25, 210, 30, PuntosIzda, rojo) screen:fontPrint(proportional25, 260, 30, PuntosDrch, rojo) Enviamos a la pantalla las puntuaciones de los 2 jugadores. screen.flip() Mostramos la nueva pantalla creada. while true do pad = Controls.read() if pad ~= oldpad then if pad:start() then break end if pad:select() then como = 1 inicializar() break end oldpad = pad end end
Este bucle se ejecuta indefinidamente a menos que se pulse START o SELECT.
Si se pulsa START se sale del bucle y a continuación de la función, regresando a la función botonesjuego(), y por tanto se continua el juego donde se había pausado.
Si se pulsa SELECT se le da a la variable como el valor 1, para indicar que se debe ejecutar la pantalla de menú al llegar al bucle principal. A continuación se hace una llamada a la función inicializar() que ya veremos en el capítulo 6 que se utiliza para inicializar todas las variables cuando se regresa a la pantalla de menú. Seguidamente se sale del bucle y sucesivamente se sale de las funciones pausar(), botonesjuego() y juego() . Al llegar al bucle principal este nos enviará a la pantalla de menú.
end
Para terminar se indica el fin de la función pausar().