7. Consola avanzada 2 - Comprobar teclas sin esperar Intro

Hemos conseguido mover algo por la pantalla, pero eso de tener que pulsar Intro tras escoger cada dirección lo hace "poco jugable".

Ahora las novedades son:

  • Para acceder directamente al teclado, necesitaremos usar un nuevo tipo de datos, llamado "ConsoleKeyInfo".
  • Utilizaremos "Console.ReadKey();" para esperar a que se pulse una tecla (pero no Intro), y "Console.ReadKey(false);" si además queremos que esa tecla pulsada NO se muestre en pantalla.
  • Para comprobar el código de la tecla pulsada usaremos ".Key", y compararemos con ciertos valores predefinidos, como "ConsoleKey.RightArrow" para la flecha derecha.

Suena más difícil de lo que realmente es:

// Primer mini-esqueleto de juego en modo texto
// Versión "b"
 
using System;
 
public class Juego03b
{
    public static void Main()
    {
        ConsoleKeyInfo tecla;
        int x = 40, y=12;
 
        // Bucle de juego
        while( 1 == 1 )
        {
            // Dibujar
            Console.Clear();
            Console.SetCursorPosition(x, y);
            Console.Write("A");
 
            // 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
            // NADA
 
            // Pausa hasta el siguiente "fotograma" del juego
            // NO TODAVIA
        }
    }
}
 

Ejercicio propuesto: Amplía el juego para que también se pueda mover con las teclas QAOP (sin pulsar Intro). Pista, como esas teclas, al contrario que las flechas, sí tienen un carácter asociado, puedes usar ".KeyChar" en vez de ".Key": if (tecla.KeyChar == 'a') ...