Continuamos recreando el mítico juego de Atari Telepong con Castle Game Engine. En la entrada anterior preparamos todo el entorno usando el editor. En esta entrada vamos a programar algunas líneas de código. Vamos a ello.

Moviendo los jugadores

Lo primero que programaremos es el movimiento de los jugadores. Y se producirá al pulsar unas teclas. Por ejemplo, la tecla Q y A servirán para desplazar el jugador uno, arriba y abajo. Y las teclas de los cursores, arriba y abajo harán la misma función pero para el jugador 2.

Abre el editor de código pulsando F12. En la clausula uses añade la unidad CastleScene, y añade los jugadores en la parte published.

Ahora en la función Press, gestionaremos las teclas. Cuando se pulse una tecla de las que hemos definido anteriormente, aplicaremos una velocidad en el sentido que corresponda en el caso que no tenga velocidad el jugador. Si el velocidad es en sentido contrario al pulsado la velocidad aplicada será cero. Con ello se detendrá el jugador. Define en la sección Private dos variables que contendrán la velocidad de cada jugador

En el procedimiento start, inicializa las variables a cero. El procedimiento start se ejecuta una sola vez, cuando se inicia nuestro programa. Por ello es un buen lugar para inicializar las variables, clases, etc.

El evento Press recoge las pulsaciones de las teclas. Así, que tal como comentamos anteriormente, capturamos la pulsación de las teclas, y asignamos un valor a la velocidad del jugador.

Hasta ahora solo hemos capturado las teclas y asignado valores a las variables de la velocidad. Para que se muevan los jugadores debemos trasladarlos en el eje Y, cada vez que se actualice el juego, osea en cada frame.

El evento update se encarga de esto. Así que cambiaremos la posición de los jugadores (trasladar) , en función del valor de la variable multiplicada por una constante SecondPassed. Al multiplicar por esta constante conseguimos que la velocidad de desplazamiento sea la misma, con independencia del rendimiento del equipo dónde se esté ejecutando el juego.

Además, debemos limitar la posición del jugador para que no se salga de los límites de campo.

Gestionando las colisiones.

Ya solo nos queda gestionar cuando la pelota colisione con uno de los lados, con ello sabremos que un jugador ha marcado un gol.

Añade en la sección published los elemento LadoDerecho y LadoIzquierdo.

En el evento Start, asignaremos a cada RigidBody de cada uno de los lados un procedimiento que se ejecutará cada vez que se produzca un colisión (OnCollisionEnter).

Añadí un condicional de compilación, de tal manera que si este código se compila con Free Pascal, la asignación del evento lleva la letra @ delante. En caso contrario, que es cuando se compila con Delphi, no lo lleva. Con esto conseguimos tener un código portable o crosscompile.

En Lazarus, si pulsas la combinación de teclas ctrl+c, en el sobre la línea en la que que se asigna el evento, por ejemplo la línea 12, el editor creará automáticamente el procedimiento.

Cada vez que se produzca una colisión, anotaremos un punto al jugador correspondiente. Así si la bola colisiona con el lado derecho, el punto será para jugador uno. Y actualizaremos la etiqueta de este jugador.

En la sección privada añade dos variables de tipo entero, para guardar la puntuación de cada jugado. En la sección published declara los elementos TCastleLabel, que representan el marcador. Algo así:

En los eventos de colisión que creamos anteriormente añade el código para incrementar los puntos de cada jugador.

Probando

Antes de probar el juego, vete al editor de CGE, y cambia la propiedad Visible de los elementos LadoDerecho y LadoIzquierdo de su valor True a False. Con ello, ocultamos los lados de la pista.

Ahora, compila el juego desde el editor y observa el resultado.

Ya tenemos un juego casi funcional, aunque le quedan algunos detalles para ser totalmente funcional, como el sonido, detener el juego cuando se alcance un número de puntos, reiniciarlo, etc.

Conclusiones

En esta parte hemos visto:

  • Hacer uso de los elemento creados en el editor desde código.
  • Como desplazar un elemento en el evento Update.
  • Como gestionar las teclas en el evento Press.
  • Gestionar los eventos de colisión.

Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.