Console (UNIX)

Voir le sujet précédent Voir le sujet suivant Aller en bas

Console (UNIX)

Message  Tryanel le Ven 27 Fév - 21:44

Tout les programmeurs ont un jour été débutants. Et les premiers programmes créés sont, dans la plupart des cas, des programmes en console. Or, soyons honnête, un programme en console, c'est moche. Razz
De plus, si vous avez besoin de placer un texte à un endroit précis de la console (pour faire un tableau par exemple), il vous faudra afficher un message vide (contenant une vingtaine d'espaces par exemple) pour que ce soit suffisamment discret et esthétique.
Un autre problème rencontré est le "nettoyage" de la console. Si l'on veut se retrouver avec un bel écran de console tout beau tout propre ou rien n'est écrit, une solution serait de créer une boucle suffisamment longue pour afficher des espaces sur toute la hauteur et la largeur de la console Suspect Mouais , vraiment pas pratique.

Alors , certains diront que de toute manière, la console n'est vraiment pas faite pour faire de jolis programmes, que l'essentiel c'est le texte et que si l'on veut faire dans l'esthétique, il faudra tout de suite aller voir dans les librairies externes. Mais pour les débutants, ça risque d'être laborieux pour pas grand chose au final.
Pour cela, voilà comment améliorer tous vos programmes console sous UNIX (= Linux). Si vous souhaitez faire la même chose pour Windows© , allez faire un tour du côté du tuto "Console (Windows©)", les mêmes fonctionnalités sont disponibles.


//Fin de l'introduction Wink
//Debut du tuto



I/ De la couleur


Vous connaissez sûrement déjà la fonction printf( ), qui permet d'afficher un message dans une console. Si vous ne connaissez que le fonction cout, sachez que printf( ) fait globalement la même chose, mais son utilisation est parfois plus compliquée. Dans tous les cas rassurez-vous, vous n'aurez pas besoin de savoir vous en servir, il suffira de coller une ligne qui aura à peu près cette tête:
Code:
printf("\033[%XXm");

Avec XX qui correspond à un nombre parmi la liste suivante:

- 0 => Réinitialisation: Le texte revient à son apparence initiale (blanc sur fond noir).
- 1 => Ecriture "en gras"
- 4 => Souligne le texte
- 5 => Clignotement
- 7 => Vidéo inverse (la couleur de fond devient la couleur du texte et vice/versa)

-30 => Couleur du texte : noir
-31 => Couleur du texte : rouge
-32 => Couleur du texte : vert
-33 => Couleur du texte : jaune
-34 => Couleur du texte : bleu
-35 => Couleur du texte : rose
-36 => Couleur du texte : cyan
-37 => Couleur du texte : blanc

Pour surligner votre texte:
-40 => Couleur du background : noir
-41 => Couleur du background : rouge
-42 => Couleur du background : vert
-43 => Couleur du background : jaune
-44 => Couleur du background : bleu
-45 => Couleur du background : rose
-46 => Couleur du background : cyan
-47 => Couleur du background : blanc

Il est tout à fait possible de combiner différents effets, vous n'avez qu'à mettre les instructions les unes à la suite des autres.

Exemple:
Code:
printf("\033[%30m");
printf("\033[%47m");
printf("\033[%5m");
printf("Texte qui clignote")

Ce code affichera le texte "Texte qui clignote" , noir sur blanc, en le faisant clignoter.

Bon, d'accord , c'est bien beau tout ça, mais << printf("\033[%XXm"); >> , c'est pas très simple à retenir, et au milieu d'un code, c'est peu compréhensible. Pour plus de clarté, vous pouvez créer une fonction Couleur() qui appliquera l'instruction précédente.

Par exemple:
Code:

void Couleur(int numcolor)
{
    printf("\033[%dm",numcolor);
}


Ainsi, il suffira d'écrire << Couleur(33); >> pour écrire en jaune.




II/ Bien placer son texte


Là encore, une fonction va tout faire pour nous:
Code:

void gotoxy(short x,short y)
{
printf("\x1b[%d;%dH",y,x);
}


Une fois cette fonction déclarée au bon endroit (si vous ne savez pas encore comment utiliser des fonctions, allez voir un tuto sur le sujet), vous pourrez faire apparaître à n'importe quel endroit de la console un message précis ou un caractère.


Exemple: << gotoxy(20,5); >> positionnera le curseur sur la 5ème ligne, à la 20ème colonne (1 colonne = 1 caractère (une lettre, un chiffre, un symbole, ...) )

Petits détails importants:

- Les coordonnées (0,0) correspondent au coin en haut à gauche de la console.
- Dans gotoxy(x,y), x correspond à l'abscisse (les colonnes), plus x augmente, plus on se décale vers la droite.
- Dans gotoxy(x,y), y correspond à l'ordonnée (les lignes), plus y augmente, plus on se décale vers le bas.

- La console n'est à la base pas prévue du tout pour l'esthétique graphique. Dans quasiment toutes les consoles, vous verrez que la largeur de la place réservée aux caractères n'est pas égale à la hauteur. Par exemple, si vous dessinez un rectangle de 10 étoiles de hauteur sur 10 étoiles de largeur, ce sera un ... rectangle, et pas un carré. Si vous souhaitez quelque chose de plus rigoureux, dirigez vous vers les librairies graphiques.




III/ Nettoyer la console


Vous aimez les choses bien propres et bien rangées ? Vous avez besoin de vider l'ensemble de la console rapidement et sans décaler une trenatine de lignes d'un coup ?

Code:
void clrscr()
{
   printf("\033[H\033[2J")
}


Vous n'avez plus qu'à exécuter la fonction clrscr().

Exemple: << clrscr(); >>
(ouais, je sais, j'aime bien faire des exemples vachement compliqués pour que tout le monde comprenne bien Wink )


Voilà, vous savez désormais vous débrouiller face à l'horrible créature qu'est une console.
Quelques applications simples:
dessinez un sapin (avec les couleurs) dans votre console (quelques boucles et des gotoxy suffiront);
faîtes se déplacer des objets dans une console(pas forcément guidé avec le clavier si vous ne savez pas faire, mais une boucle dans laquelle vous incrémentez x et y, puis si l'objet sors de la fenêtre , faîtes diminuer x et y )


Je pense rédiger bientôt un tutoriel pour apprendre à utiliser les flèches du clavier, ou toute autre touche utilisable. En attendant, entraînez vous déjà avec ça et bon codage Wink

_________________
Votre clavier n'est pas reconnu. Appuyez sur une touche pour continuer

Tryanel
Admin
Admin

Nombre de messages: 15
Age: 23
Localisation: Lyon
O.S.: DualBoot Linux/Windows

Voir le profil de l'utilisateur http://cppmieux.forumactif.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum