32. Frontón (1): Pelota que rebota
Como acercamiento a la forma de descomponer en juego en una serie de clases que colaboran, vamos a crear un nuevo proyecto sencillo: un juego de "frontón", una pelota que rebota en una pared formada por ladrillos, al estilo del clásico Arkanoid.
Para centrarnos en la lógica y no perder tiempo en detalles adicionales, nuestro juego será en modo consola.
La apariencia final será algo como:
En esta primera entrega, vamos a hacer que una pelota rebote en los bordes de la pantalla. Después añadiremos los "ladrillos" y la posibilidad de que la pelota "los rompa". A continuación, incorporaremos una raqueta manejada por el usuario de forma simultánea. Para finalizar, añadiremos la colisión de la pelota con la raqueta, varias vidas, etc.
La lógica de esta primera entrega debería ser simple:
- Borrar la pantalla y dibujar la pelota en su posición actual
- Calcular la próxima posición, sumando un cierto incremento a la posición actual
- Si llegamos a un extremo de la pantalla, invertir el incremento correspondiente, para que la pelota se mueva en sentido contrario.
- Esperar un instante (por ejemplo, 40 milisegundos, para que el juego se mueva a 25 fotogramas por segundo)
- Repetir... indefinidamente.
Que se podría plantear así...
// Fronton - version 1: pelota que rebota using System; using System.Threading; public class Fronton01 { public static void Main() { char pelota = 'O'; int x = 40; // Posición de la pelota int y = 12; int incrX = 1; // Incremento (velocidad) de la pelota int incrY = -1; int minX = 0, maxX = 79; // Límites horizontales int minY = 0, maxY = 23; // Límites verticales bool terminado = false; do { // Dibujo la pelota Console.Clear(); Console.SetCursorPosition(x, y); Console.Write(pelota); // Compruebo si llego al límite de la pantalla if ( (x <= minX) || (x >= maxX) ) incrX = -incrX; if ( (y <= minY) || (y >= maxY) ) incrY = -incrY; // Y paso a la siguiente posición x += incrX; y += incrY; // Y espero un poco hasta el siguiente fotograma Thread.Sleep( 40 ); } while (!terminado); } }
Ejercicio propuesto: Mejora esta versión del juego, para que se pueda abandonar la partida pulsando ESC.