8. Dibujar tres obstáculos. Comprobar colisiones.

Vamos a hacer que aparezcan 3 obstáculos en pantalla, y que la partida acabe cuando choquemos con uno de ellos.

Esto supone algunos cambios, la mayoría sencillos:

  • Si queremos tres obstáculos, necesitaremos 3 nuevas coordenadas X y 3 nuevas coordenadas Y (ya veremos formas menos repetitivas de trabajar), que llevaremos xo1, xo2 y así sucesivamente.
  • A la hora de dibujar cosas en pantalla, ya no sólo dibujaremos nuestro personaje, sino también los obstáculos.
  • El juego ya no se repetirá siempre (con ese "mientras 1=1"), sino que ahora usaremos una variable "fin", para comprobar si ha terminado la partida o no. A falta de conocer formas más elegantes, podemos hacer que la variable "fin" valga 0 cuando la partida no haya terminado, o bien 1 cuando sí termine (cuando choquemos con un obstáculo).
  • Eso de comprobar colisiones también es fácil: por ahora bastará con ver si nuestro personaje está en la misma posición de pantalla que alguno de los obstáculos, comparando sus coordenadas X e Y: "if ( (x==x2) && (y==y2) ) fin = 1;"

El resultado sería:

// Primer mini-esqueleto de juego en modo texto
// Versión "c"
 
using System;
 
public class Juego03c
{
    public static void Main()
    {
        ConsoleKeyInfo tecla;
        int x = 40, y=12;
        int xo1 = 20, yo1 = 15;  // Obstáculo 1
        int xo2 = 25, yo2 = 5;   // Obstáculo 2
        int xo3 = 62, yo3 = 21;  // Obstáculo 3
        int fin = 0;   // 0 = no terminado, 1 = terminado
 
        // Bucle de juego
        while( fin == 0 )
        {
            // Dibujar
            Console.Clear();
            Console.SetCursorPosition(x, y);
            Console.Write("A");
 
            Console.SetCursorPosition(xo1, yo1); // Obstáculos
            Console.Write("o");
 
            Console.SetCursorPosition(xo2, yo2);
            Console.Write("o");
 
            Console.SetCursorPosition(xo3, yo3);
            Console.Write("o");
 
            // Leer teclas y calcular nueva posición
            tecla = Console.ReadKey(false);
 
            if(tecla.Key == ConsoleKey.RightArrow) x++;
            if(tecla.Key == ConsoleKey.LeftArrow) x--;
            if(tecla.Key == ConsoleKey.DownArrow) y++;
            if(tecla.Key == ConsoleKey.UpArrow) y--;
 
            // Mover enemigos, entorno
            // NADA
 
            // Colisiones, perder vidas, etc
            if ( ( (x==xo1) && (y==yo1) )
                || ( (x==xo2) && (y==yo2) )
                || ( (x==xo3) && (y==yo3) )
               )
               fin = 1; 
 
            // Pausa hasta el siguiente "fotograma" del juego
            // NO TODAVIA
        }
    }
}
 

Ejercicio propuesto: Mejora esta versión del juego, para que las posiciones de los obstáculos no sean prefijadas, sino que se escojan al azar.