En este capítulo veremos la función juego(), la cual se encarga de controlar el juego.
-- funcion juego
function juego()
botonesjuego()
controlpuntos()
colisiones()
pantallajuego()
Lo primero que se hace es una llamada a otras funciones, cuya misión es la siguiente:
botonesjuego() Se ocupa de comprobar si se ha pulsado algún botón de la PSP para mover las barras. La veremos en el capítulo 4.
controlpuntos() Se ocupa de detectar si la pelota ha sobrepasado alguna barra de control, para sumar el punto al otro jugador y reiniciar el juego. También detecta si la pelota ha golpeado una barra, y por tanto debe rebotar. La veremos en el capítulo 5.
colisiones() Se ocupa de detectar si la pelota ha colisionado con la pared inferior o la superior, para cambiar la dirección del movimiento.
pantallajuego() Se encarga de mostrar la pantalla de juego.
-- posicion pelota x = x + VelPelota * math.cos(AngPelota) y = y + VelPelota * math.sin(AngPelota)
Estos comandos son los que mueven la pelota por la pantalla. x e y son las variables que definen la posición de la pelota en la pantalla. Para cada ciclo, la posición en pantalla de la pelota se modifica, en función de la velocidad y la dirección de desplazamiento. Para entenderlo mejor utilizaremos el siguiente dibujo:
Las dos variables que definen como se mueve la pelota son VelPelota y AngPelota .
VelPelota es el número de pixels que se mueve la pelota en cada ciclo. AngPelota es el ángulo que indica en que dirección se mueve la pelota.
Para mover la pelota por la pantalla debemos descomponer VelPelota en las direcciones X e Y. Para ello utilizamos la trigonometría:
cos (AngPelota) = VelPelotaX / VelPelota => VelPelotaX= VelPelota * cos (AngPelota)
sen (AngPelota) = VelPelotaY / VelPelota => VelPelotaY= VelPelota * sen (AngPelota)
Por tanto, en cada ciclo las coordenadas de la pelota serán ( x + VelPelotaX , y + VelpelotaY ), es decir ( x + VelPelota * cos (AngPelota) , y + VelPelota * sen (AngPelota) ).
if NumGolpes >= 0 and NumGolpes <5 then VelPelota = VelPelotaIni elseif NumGolpes >= 5 and NumGolpes <10 then VelPelota = VelPelotaIni + 2 elseif NumGolpes >= 10 and NumGolpes <15 then VelPelota = VelPelotaIni + 4 elseif NumGolpes >= 15 then VelPelota = VelPelotaIni + 6 end
Aquí lo que hacemos es aumentar gradualmente la velocidad de la pelota con ayuda de la variable NumGolpes, la cual ya veremos que aumenta en 1 cada vez que la pelota golpea en una barra.
Recordamos que VelPelotaIni es la velocidad inicial de la pelota, la cual depende del modo de juego elegido.
Si la pelota se ha golpeado entre 0 y 4 veces, no aumentamos su velocidad.
Si la pelota se ha golpeado entre 5 y 9 veces, aumentamos su velocidad en 2.
Si la pelota se ha golpeado entre 10 y 14 veces, aumentamos su velocidad en 4.
Si la pelota se ha golpeado 15 o mas veces, aumentamos su velocidad en 6.
end
A continuación vemos como trabaja la función colisiones(), que se ocupa de cambiar la dirección de la pelota cuando esta golpea con la pared superior o la inferior.
-- funcion colisiones function colisiones() if y >= 267 then AngPelota = - AngPelota local sonido = SonidoPared voz = sonido:play() end if y<= 5 then AngPelota = - AngPelota local sonido = SonidoPared voz = sonido:play() end end
Como ya sabemos, la pantalla de la PSP tiene 480 x 272 pixels, y el origen se considera en la esquina superior izquierda. La imagen de la pelota mide 10 x 10 pixels. Por tanto, cuando la coordenada Y del centro de pelota sea mayor o igual a 267, esta habrá alcanzado la parte inferior de la pantalla, y deberá rebotar. Para hacer que la pelota rebote cambiamos su dirección, según este dibujo de ejemplo.
Si la pelota en el momento de tocar la parte inferior de la pantalla venia según la dirección 1 con un ángulo de –30º, deberá salir rebotada en dirección 2 con un ángulo de 30º. Por tanto lo que debe hacer el programa es simplemente cambiar el signo del ángulo de desplazamiento.
Lo mismo ocurre cuando la pelota toca la parte superior de la pantalla.
Después de cambiar el ángulo, vemos que el programa ejecuta el sonido SonidoPared.
Por ultimo vemos la funcion pantallajuego(), la cual muestra la pantalla de juego.
-- funcion pantalla juego function pantallajuego() screen:blit(0, 0, fondo)
Dibuja el fondo de la pantalla de juego.
screen:blit(x-5, y-5, pelota)
Dibuja la pelota. La pelota mide 10 x 10 pixels. Desplazamos la pelota 5 pixels en X y en Y para que el centro de la pelota este situado justo en las coordenadas (x,y). Esto lo hacemos porque LUA posiciona las imágenes con respecto a su esquina superior izquierda.
screen:blit(0, PosBarraIzda - 30, BarraIzda)
Dibuja la barra izquierda. La barra mide 10 x 60 pixels. Su coordenada X siempre será 0, y la coordenada Y la disminuimos 30 para hacer que el centro de la barra coincida con su posición.
screen:blit(470, PosBarraDrch - 30, BarraDrch)
Dibuja la barra derecha. Su coordenada X siempre será 470, y la coordenada Y la disminuimos 30 para hacer que el centro de la barra coincida con su posición.
screen:fontPrint(proportional25, 210, 30, PuntosIzda, rojo)
Escribe los puntos conseguidos por el jugador de la izquierda.
screen:fontPrint(proportional25, 260, 30, PuntosDrch, rojo)
Escribe los puntos conseguidos por el jugador de la derecha.
screen.waitVblankStart() screen.flip() end
Comentarios
macho
i luego desis que lua es facil mira estoy no comprendo bueno voy a seguir leeyendo asta que lo coja