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.