Capitulo 5: Programando las raquetas de juego.
INTRODUCCION
============
Vamos a aprender en este cap¡tulo como mover las raquetas de juego. En nuestro juego ser necesario conocer en todo momento las coordenadas (X,Y) que tiene cada una de las raquetas, y controlar si se pulsan las teclas que hacen que se mueva, como hay dos raquetas que se controlan con distintas teclas podr¡amos crear dos procedimientos, uno para cada una de ellas o almacenar también las teclas que hacen moverlas en variables y un único procedimiento que recibe como par metros las teclas que lo hacen mover y las coordenadas que se deben incrementar o decrementar. Parece m s cómoda la segunda opci¢n pero a£n puede serlo m s si en vez de hacer que reciba tantos par metros definimos un nuevo tipo que tenga todos esos campos y declaramos dos variables de este tipo, que son las que recibe el procedimiento que las controla. Algo del tipo:
TYPE
Raqueta = RECORD
X,Y : INTEGER; (* Coordenadas *)
TArr,TAba : BYTE; (* Teclas que lo controlan *)
Imagen : BYTE; (* Numero de imagen dentro del BSF *)
Puntos : BYTE; (* Puntuaci¢n de cada raqueta *)
END;
VAR
RaquetaRoja, RaquetaAzul : Raqueta;
PROCEDURE Inicializaciones;
BEGIN
(* Inicio las coordenadas de las raquetas y las teclas que las controlan *)
RaquetaRoja.X:=20;
RaquetaRoja.Y:=90;
RaquetaRoja.Imagen:=1;
RaquetaRoja.TArr:=T_Q;
RaquetaRoja.TAba:=T_A;
RaquetaRoja.Puntos:=0;
RaquetaAzul.X:=300;
RaquetaAzul.Y:=90;
RaquetaAzul.Imagen:=2;
RaquetaAzul.TArr:=T_ARRIBA;
RaquetaAzul.TAba:=T_ABAJO;
RaquetaAzul.Puntos:=0;
END;
PROCEDURE ControlaRaqueta (VAR QueRaqueta : Raqueta);
BEGIN
IF ((Teclado[QueRaqueta.TArr]) AND (QueRaqueta.Y>10)) THEN DEC (QueRaqueta.Y);
IF ((Teclado[QueRaqueta.TAba]) AND (QueRaqueta.Y<141)) THEN INC (QueRaqueta.Y);
PonSpriteBSF (QueRaqueta.X,QueRaqueta.Y,QueRaqueta.Imagen,Sprites,PV3);
END;
El campo Imagen del tipo de variable almacena el n£mero de sprite dentro del archivo BSF es el que le corresponde visualizar, as¡ si recordamos, el primer archivo del BSF era ROJO.SPR luego haremos RaquetaRoja.Imagen:=1; y el segundo era AZUL.SPR luego haremos RaquetaAzul.Imagen:=2; Para que cuando hagamos PonSpriteBSF en el procedimiento de controlar la raqueta le digamos las coordenadas y el n£mero de sprite en funci¢n de la variable de tipo raqueta que recibe. Observar adem s que donde le indico que quiero que dibuje el sprite es en la pantalla de mezcla (PV3) para hacer una animaci¢n suave. OJO!!!! para poder dibujar uno de los sprites es necesario haber cargado el fichero BSF en una variable de tipo SPRITEBSF, en mi caso se llama SPRITES (Ver el c¢digo fuente (PINPON.PAS) en caso de duda). Para controlar las posiciones de las raquetas lo que hacemos es comprobar si se pulsa alguna de las teclas de movimiento, si es as¡, decrementamos o incrementamos la coordenada Y de la raqueta recibida como par metro. Adem s se establece un rango de movimiento para que las raquetas no puedan salir de la pantalla. En el programa principal bastar con cambiar las l¡neas que escribian en pantalla por: ControlaRaqueta (RaquetaRoja); ControlaRaqueta (RaquetaAzul); y ya estar , al ejecutar el programa las raquetas funcionar n correcta- mente con las teclas (en mi ejemplo) Q,A (Roja) y Arriba, Abajo (Azul). Ya que definimos un tipo de variable para almacenar las teclas... ser necesario inicializar cada variable de ese tipo con unos valores correctos, por claridad creamos un nuevo procedimiento para incializar las variables. OJO!!! Hay que tener en cuenta que las posiciones de las raquetas y los puntos deben inicializarse cada vez que empieza una partida por lo que justo antes de entrar en el bucle de partidas es cuando llamamos al modulo de inicializaciones. Como vemos es un buen m‚todo el definir nuevos tipos de variable para cada elemento del juego, aunque la bola solo tenga dos variables (X,Y) la implementaremos como un tipo por comodidad.
DESPEDIDA
=========
Hasta aqu¡ el cap¡tulo de hoy, ya hemos aprendido a mover sprites en funci¢n de las teclas pulsadas y hacer la animaci¢n mediante el volcado de pantallas virtuales. En el pr¢ximo cap¡tulo controlaremos la bola. No olvides que siempre encontraras el c¢digo fuente completo de todo lo que llevamos hecho para que compares con tu c¢digo (PINPON.PAS)
Por: Ismael Fernandez Bustos