• 20 hours
  • Easy

Free online content available in this course.

Paperback available in this course

course.header.alt.is_certifying

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 11/28/19

Une console ++

Log in or subscribe for free to enjoy all this course has to offer!

Vous êtes arrivés au bout du cours, bravo ! Je vous propose de finir avec quelques astuces pour égayer un peu votre console :). 

Nous avons appris à écrire sur l'écran, avec la méthode Console.WriteLine (ou encore Console.Write). Nous avons également appris à lire une saisie utilisateur, notamment avec la méthode Console.ReadLine(). Mais nous pouvons faire bien plus ! C'est ce que nous allons voir maintenant.

Écrivez en couleur dans la console

Une des premières choses faciles à faire avec la console est de changer la couleur avec laquelle nous écrivons, de quoi égayer un peu cette console si austère. Bon, pas de quoi faire un tableau à la Picasso car nous avons seulement 16 couleurs à notre disposition, mais cela peut-être suffisant pour voir la vie en rose :).

Les couleurs, c'est l'affaire de l'énumération ConsoleColor. Vous avez à votre disposition les couleurs suivantes : 

Couleur

Traduction

Black

Noir

Blue

Bleu

Cyan

Cyan (bleu-vert)

DarkBlue

Bleu foncé

DarkCyan

Cyan foncé (bleu-vert foncé)

DarkGray

Gris foncé

DarkGreen

Vert foncé

DarkMagenta

Magenta foncé (rouge foncé violacé)

DarkRed

Rouge foncé

DarkYellow

Jaune foncé (ocre)

Gray

Gris

Green

Vert

Magenta

Magenta (rouge violacé)

Red

Rouge

White

Blanc

Yellow

Jaune

Ce sont des couleurs que vous pouvez utiliser soit pour écrire, soit en arrière-plan. Et pour cela nous utiliserons les propriétés ForegroundColor et BackgroundColor .

Rien de tel qu'une petite démo pour bien comprendre :

Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.BackgroundColor = ConsoleColor.Yellow;
Console.Write("Hello ");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.Red;
Console.Write("les couleurs");
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.White;
Console.Write(" dans la console\n");

Ce qui nous donne :

De la couleur dans la console
De la couleur dans la console

Vous pouvez également réinitialiser les couleurs sélectionnées grâce à la méthode :

Console.ResetColor();

Effacez l’écran

Pour effacer l'écran, rien de plus simple. Il suffit d'appeler la méthode Console.Clear().

Dans l'exemple qui suit, tous les 10 affichages on attend une saisie qui permet d'effacer l'écran :

for( int i = 1; i <= 40; i++ )
{
    Console.WriteLine("Ligne numéro " + i);
	if( i % 10 == 0 )
	{
		Console.ReadKey();
		Console.Clear();
	}
}

Pas grand chose à dire de plus ... ça efface l'écran quoi !

Positionnez votre texte

Vous pouvez également afficher votre texte à n'importe quel emplacement dans la console. Fini l'affichage qui démarre en haut à gauche, avec la méthode Console.SetCursorPosition vous allez pouvoir positionner votre texte où vous le souhaitez. Cette méthode prend deux paramètres :

  • Le premier est un entier qui correspond au nombre de colonnes de décalage par rapport au coin supérieur gauche ;

  • Le second correspond au nombre de lignes de décalage, toujours par rapport au coin supérieur gauche.

Voici un exemple de code pour écrire à différentes positions dans la console :

Console.WriteLine("Hello world");
Console.SetCursorPosition(25, 7);
Console.WriteLine("Hello world aussi");
Console.WriteLine("Encore Hello world");

Ce qui donne :

Ecrire à différents endroits dans la console
Ecrire à différents endroits dans la console

À noter qu'il est possible de savoir à quel emplacement se trouve le curseur, grâce aux propriétés Console.CursorLeft et Console.CursorTop . Modifions l'exemple précédent :

Console.WriteLine("Hello world");
int x = Console.CursorLeft;
int y = Console.CursorTop;
Console.SetCursorPosition(25, 7);
Console.WriteLine("Hello world aussi");
Console.SetCursorPosition(x, y);
Console.WriteLine("En dessous du premier");

et nous obtiendrons :

Sauvegarder la position du curseur
Sauvegarder la position du curseur

Enfin, vous trouverez ci-dessous une petite méthode pour centrer du texte dans la console :

static void Main(string[] args)
{
    CentrerLeTexte("Hello world");
	CentrerLeTexte("Je suis un texte plus long");
}

private static void CentrerLeTexte(string texte)
{
	int nbEspaces = (Console.WindowWidth - texte.Length) / 2;
	Console.SetCursorPosition(nbEspaces, Console.CursorTop);
	Console.WriteLine(texte);
}

ce qui donne :

Centrer du texte sur la console
Centrer du texte sur la console

Vous aurez deviné que la propriété Console.WindowWidth renvoie la largeur de la console, en nombre de colonnes.

Déplacez du texte

Il est possible de déplacer du texte écrit sur la console grâce à la méthode Console.MoveBufferArea. Elle prend en paramètres la colonne la plus à gauche de l'élément à déplacer, la colonne la plus en haut, ainsi que le nombre de colonnes et le nombre de lignes à déplacer. Elle prend ensuite la colonne de destination ainsi que la ligne de destination.

Par exemple, si on fait l’appel suivant :

Console.MoveBufferArea(5, 6, 7, 8, 9, 10);

le texte présent dans la zone ((5,6),(12,14)) se déplacera à la position (9,10).

Plutôt qu'un long discours, observez et exécutez le code suivant :

private static void Main(string[] args)
{
    int i = 0;
	int j = 0;
	int largeur = 21;
	int hauteur = 4;
	Console.WriteLine(@"      .--------.");
	Console.WriteLine(@" ____/_____|___ \___");
	Console.WriteLine(@"O    _   - |   _   ,*");
	Console.WriteLine(@" '--(_)-------(_)--'");
	while (true)
	{
		ConsoleKeyInfo info = Console.ReadKey(true);
		switch (info.Key)
		{
			case ConsoleKey.LeftArrow:
				if( i > 0 )
				{
					Console.MoveBufferArea(i, j, largeur, hauteur, i - 1, j);
					i--;
				}
				break;						 
			case ConsoleKey.RightArrow:
			    if (i < Console.WindowWidth - largeur)
			    {
				    Console.MoveBufferArea(i, j, largeur, hauteur, i + 1, j);
				    i++;						 
			    }
				break;						 
			case ConsoleKey.UpArrow:
				if( j > 0 )
				{
					Console.MoveBufferArea(i, j, largeur, hauteur, i, j - 1);
					j--;
				}
				break;						 
			case ConsoleKey.DownArrow:
				Console.MoveBufferArea(i, j, largeur, hauteur, i, j + 1);
				j++;
				break;
		}
		if (info.Key == ConsoleKey.Q)
			break;
	}
}

Il permet d'afficher une petite voiture en ascii art sur la console et de la déplacer avec les flèches de directions.
Alors, c'est pas la future killer app ça :p ?

Dessinez avec des caractères spéciaux

En mode console, il est également possible de faire des petits graphismes. Alors ok, on est loin de moteurs 3D qui tirent partie du GPU de votre carte vidéo, mais cela pourrait être la base d'un petit jeu en mode console ou d'une petite animation.
Pour cela, vous pouvez détourner l'utilisation de caractères spéciaux, par exemple ceux de la page de code 850.
Combinés à des couleurs, vous pouvez réaliser des petits trucs chouettes, sans prétentions.

Regardez par exemple le code suivant :

public static void Main()
{
    char cLight = Encoding.GetEncoding(850).GetChars(new byte[] { 176 })[0];
    char cDark = Encoding.GetEncoding(850).GetChars(new byte[] { 177 })[0];
    char cDarkLight = Encoding.GetEncoding(850).GetChars(new byte[] { 178 })[0];

    DessinerHerbe(cLight);
    DessinerMaison(cDark);
    DessinerToit(cDark);
    DessinerPorte(cDarkLight);

    Console.ResetColor();
    Console.SetCursorPosition(0, 20);
    Console.CursorVisible = false;
    Console.ReadKey(true);
}

private static void DessinerPorte(char cDarkLight)
{
    Console.BackgroundColor = ConsoleColor.Red;
    for (int j = 0; j < 3; j++)
    {
        Console.SetCursorPosition(33, 11 + j);
        for (int i = 0; i < 4; i++)
        {
            Console.Write(cDarkLight);
        }
    }
}

private static void DessinerToit(char cDark)
{
    Console.BackgroundColor = ConsoleColor.DarkRed;
    for (int i = 0; i < 6; i++)
    {
        Console.SetCursorPosition(35 + i, i + 2);
        Console.Write(cDark);
        Console.SetCursorPosition(35 - i, i + 2);
        Console.Write(cDark);
    }
}

private static void DessinerMaison(char cDark)
{
    Console.BackgroundColor = ConsoleColor.DarkMagenta;
    for (int j = 0; j < 7; j++)
    {
        Console.SetCursorPosition(30, 7 + j);
        for (int i = 0; i < 11; i++)
        {
            Console.Write(cDark);
        }
    }
}

private static void DessinerHerbe(char cLight)
{
    Console.SetCursorPosition(0, 10);
    Console.BackgroundColor = ConsoleColor.Green;
    for (int j = 0; j < 10; j++)
    {
        for (int i = 0; i < Console.WindowWidth; i++)
        {
            Console.Write(cLight);
        }
    }
}

Bon, je suis loin d'avoir des talents de graphiste, mais voilà ce que ça donne :

Dessiner dans la console
Dessiner dans la console

Sympa non ?

Jouez un son basique

La méthode Console.Beep est capable de jouer un petit son via le haut parleur interne de l'ordinateur. On peut l'utiliser en lui fournissant la fréquence d'un son ainsi que le temps (en milisecondes) que doit durer le son.
J'en m'en sers dans cet exemple pour jouer les premières notes d'Au clair de la lune :

int noteDo = 262;
int noteRe = 294;
int noteMi = 330;
int noire = 400;
int blanche = 800;

Console.Beep(noteDo, noire);
Console.Beep(noteDo, noire);
Console.Beep(noteDo, noire);
Console.Beep(noteRe, noire);
Console.Beep(noteMi, blanche);
Console.Beep(noteRe, blanche);
Console.Beep(noteDo, noire);
Console.Beep(noteMi, noire);
Console.Beep(noteRe, noire);
Console.Beep(noteRe, noire);
Console.Beep(noteDo, noire);

Je suis sûr que vous m'enviez mon talent de musicien ;) !

Bien sûr, pas de carte son ici, juste le haut parleur dont la qualité laisse à désirer... mais pour un petit bruitage, c'est plutôt simple à faire non ?

En résumé

  • La console peut-être enrichie grâce à d'autres méthodes de la Console.

  • Il est possible de mettre un texte en couleur ou bien son arrière-plan.

  • On peut effacer l'écran grâce à Console.Clear().

  • On peut déplacer du texte avec Console.MoveBufferArea().

  • On peut positionner le curseur grâce à Console.SetCursorPosition().

  • On peut jouer un son grâce à Console.Beep().

Et voilà, vous êtes arrivés à bout de ce cours ! Vous connaissez maintenant les bases du langage C# et pouvez dès à présent créer de petites applications interactives depuis votre console... mais C# a encore plein de richesses à offrir. Pour les découvrir, rendez-vous dans mon cours Programmez en orienté objet en C# !

Example of certificate of achievement
Example of certificate of achievement