Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


12.2. Más posibilidades de la consola

En "Console" hay mucho más que ReadLine y WriteLine, aunque no todas las posibilidades están incluidas en las primeras versiones de la "plataforma punto net". Vamos a ver algunas de las funcionalidades adicionales que nos pueden resultar más útiles:

// Ejemplo_12_02a.cs
// Más posibilidades de "System.Console"
// Introducción a C#, por Nacho Cabanes

using System;

public class Ejemplo_12_02a
{
    public static void Main()
    {
        int posX, posY;

        Console.Title = "Ejemplo de consola";
        Console.BackgroundColor = ConsoleColor.Green;
        Console.ForegroundColor = ConsoleColor.Black;
        Console.Clear();

        posY = 10;  // En la fila 10
        Random r = new Random(DateTime.Now.Millisecond);
        posX = r.Next(20, 40); // Columna al azar entre 20 y 40
        Console.SetCursorPosition(posX, posY);
        Console.WriteLine("Bienvenido");
        
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.SetCursorPosition(10, 15);
        Console.Write("Pulsa 1 o 2: ");
        ConsoleKeyInfo tecla;
        do 
        {
            tecla = Console.ReadKey(false);
        } 
        while ((tecla.KeyChar != '1') && (tecla.KeyChar != '2'));

        int maxY = Console.WindowHeight;
        int maxX = Console.WindowWidth;
        Console.SetCursorPosition(maxX-50, maxY-1);
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write("Pulsa una tecla para terminar... ");    
        Console.ReadKey(true);
    }  
}

(Nota: no todas las posibilidades que se aplican en este ejemplo están disponibles en la plataforma .Net 1.x, sino a partir de la versión 2).

Para comprobar el valor de una tecla, como se ve en el ejemplo anterior, tenemos que usar una variable de tipo "ConsoleKeyInfo" (información de tecla de consola). Un ConsoleKeyInfo tiene campos como:

        if ((tecla.Modifiers & ConsoleModifiers.Alt) != 0)  
            Console.Write("Has pulsado Alt");

Console.Readkey hace que el programa se quede parado hasta que se pulse una tecla. Si queremos hacer algo mientras que el usuario no pulse ninguna tecla, podemos emplear Console.KeyAvailable para comprobar si ya se ha pulsado alguna tecla que haya que analizar, como en este ejemplo, que permite mover un símbolo a izquierda y derecha, pero muestra una animación simple si no pulsamos ninguna tecla:

// Ejemplo_12_02b.cs
// No bloquear el programa con Console.Readkey
// Introducción a C#, por Nacho Cabanes

using System;
using System.Threading;

public class Ejemplo_12_02b
{
    public static void Main()
    {
        int posX=40, posY=10;
        string simbolos = "^>v<";
        byte simboloActual = 0;
        bool terminado = false;
        
        do
        {
            Console.Clear();
            Console.SetCursorPosition(posX, posY);
            Console.Write( simbolos[ simboloActual ]);
            Thread.Sleep(500);
            if (Console.KeyAvailable)
            {
                ConsoleKeyInfo tecla = Console.ReadKey(true);
                if (tecla.Key == ConsoleKey.RightArrow) posX++;
                if (tecla.Key == ConsoleKey.LeftArrow) posX--;
                if (tecla.Key == ConsoleKey.Escape) terminado = true;
            }
            simboloActual++;
            if (simboloActual > 3) simboloActual = 0;
        }
        while ( ! terminado );
    }  
}

Al igual que en este ejemplo, será recomendable hacer una pequeña pausa entre una comprobación de teclas y la siguiente, con Thread.Sleep, tanto para que la animación no sea demasiado rápida como para no hacer un consumo muy alto de procesador para tareas poco importantes.

Los colores que tenemos disponibles (y que se deben escribir precedidos con "ConsoleColor") son: Black (negro), DarkBlue (azul marino), DarkGreen (verde oscuro) DarkCyan (verde azulado oscuro), DarkRed (rojo oscuro), DarkMagenta (fucsia oscuro o púrpura), DarkYellow (amarillo oscuro u ocre), Gray (gris), DarkGray (gris oscuro), Blue (azul), Green (verde), Cyan (aguamarina o verde azulado claro), Red (rojo), Magenta (fucsia), Yellow (amarillo), White (blanco).

Ejercicios propuestos:

Ejercicio propuesto 12.2.1: Crea un programa que muestre una "pelota" (la letra "O") rebotando en los bordes de la pantalla. Para que no se mueva demasiado rápido, haz una pausa de 50 milisegundos entre un "fotograma" y otro.
Ejercicio propuesto 12.2.2: Crea una versión de la "base de datos de ficheros" (ejemplo 04_06a) que use colores para ayudar a distinguir los mensajes del programa de las respuestas del usuario, y que no necesite pulsar Intro tras escoger cada opción.
Ejercicio propuesto 12.2.3: Crea un programa que permita "dibujar" en consola, moviendo el cursor con las flechas del teclado y pulsando "espacio" para dibujar un punto o borrarlo.
Ejercicio propuesto 12.2.4: Crea una versión del programa de "dibujar" en consola (12.2.3), que permita escribir más caracteres (por ejemplo, las letras), así como mostrar ayuda (pulsando F1), guardar el contenido de la pantalla en un fichero de texto (con F2) o recuperarlo (con F3).
Ejercicio propuesto 12.2.5: Crea una versión mejorada del programa 12.1.2 (mostrar el reloj actualizado en pantalla, que lo dibuje siempre en la esquina superior derecha de la pantalla).