Misc. Console - skaaj/ensc-support GitHub Wiki

La console

La console n'est pas vouée à rester en noir et blanc. En fait, elle peut même être utilisée pour faire des jeu en 2D (comme ceux-ci).

La fenêtre a plusieurs propriétés modifiables :

  • Un titre
  • Une taille visible (taille de la fenêtre)
  • Une taille logique (celle de la zone tampon)
  • Un curseur

Le curseur

Le curseur est très intéressant car il permet de faire des nombreuses choses. En utilisation basique le curseur avance à chaque nouvelle entrée/sortie (Write, WriteLine, ReadLine, etc.). On dit qu'il suit le flux. En fait, il est possible de le positionner où on veut (on va le voir dans l'exemple). En plus de sa position on peut aussi modifier sa couleur de fond et de texte (comme sous un logiciel de traitement de texte). En résumé ses propriétés principales sont :

  • Sa position
  • Sa couleur de fond
  • Sa couleur de texte
  • Sa visibilité (masqué ou non)

Exemple

Voici un exemple afin de voir comment tout ce que l'on vient d'évoquer est réalisable :
(La partie (7) est un bonus)

static void Main(string[] args)
{
    // 1. Changer le titre de la fenêtre
    Console.Title = "Un titre";

    // 2. On redimensionne la fenêtre
    int width = 90; // 100 caractères par ligne 
    int height = 25; // 50 lignes

    Console.SetWindowSize(width, height);

    // Les deux lignes suivantes permettent d'enlever les scrollbars
    // -> le buffer a la même taille que la fenêtre donc il n'y a plus besoin de scroller
    // -> attention ceci limite le contenu à 'height' lignes
    //    si on veut écrire 'height'+ 2 lignes on perdra les 2 premières lignes
    Console.BufferHeight = height;
    Console.BufferWidth = width;

    // 3. Changer la couleur du fond et du texte
    Console.BackgroundColor = ConsoleColor.White;
    Console.ForegroundColor = ConsoleColor.Black;
    // Rien ne change tant qu'on ne met pas à jour la console
    Console.Clear();

    // 4. Positionner son curseur à une autre position
    // Le bord en haut à gauche équivaut à (x, y) -> (0, 0) 
    Console.SetCursorPosition(5, 1);
    Console.Write("Ce texte est écrit à partir de la position (5, 1).");
    Console.SetCursorPosition(6, 2);
    Console.Write("Celui-ci à partir de la position (6, 2).");
    Console.SetCursorPosition(0, 0);
    Console.Write("Et celui-ci est au début (0, 0). ");

    // 5. Changer la couleur du curseur
    Console.BackgroundColor = ConsoleColor.Cyan;
    Console.ForegroundColor = ConsoleColor.Black;
    Console.Write("Et ce texte est écrit en noir sur un fond cyan !");
            
    // On remet les couleurs par défaut
    Console.ResetColor();
    Console.SetCursorPosition(8, 8);
    Console.WriteLine("Maintenant les couleurs sont celles par défaut");

    // 6. Masquer le curseur
    // Parfois on ne veut pas afficher le curseur (càd le gros rectangle qui clignote)
    // On peut le masquer comme ceci :
    Console.CursorVisible = false;

    // 7. BONUS : Un peu de son :)
    double periode = 7.0;
    int amplitude = 200;
    int freq_origine = 314;
    int freq_ech = 100;

    Console.SetCursorPosition(0, height - 1);
    Console.Write("Appuyez sur une touche pour lancer le son...");
    Console.ReadLine();
    Console.WriteLine("Son en cours de lecture...");

    for (int i = 0; i < 50; i++)
        Console.Beep(freq_origine + (int)(amplitude * Math.Sin(i / periode)), freq_ech); // Console.Beep(frequence, durée)

    Console.Clear();
    Console.Write("Appuyez sur une touche pour quitter...");
    Console.ReadLine();
}

Ce code a pour résultat : Résultat