Création de la pluie de code dans le terminal avec C et Ncurses

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce projet, vous allez apprendre à créer une pluie de caractères simple en utilisant la bibliothèque ncurses en langage C. Ncurses est une bibliothèque qui facilite l'utilisation d'interfaces utilisateur basées sur le texte dans le terminal. Ce projet vous guidera tout au long du montage du projet, de l'initialisation des composants nécessaires et de la mise en œuvre de la pluie de caractères.

👀 Aperçu

Code Rain

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment installer la bibliothèque ncurses
  • Comment définir des constantes et des structures pour les gouttes de pluie
  • Comment initialiser les couleurs pour l'animation
  • Comment créer une boucle d'animation pour afficher les gouttes de pluie tombant
  • Comment lire l'entrée de l'utilisateur pour quitter l'animation

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Utiliser la bibliothèque ncurses en C
  • Implémenter des structures en C
  • Créer des animations dans le terminal

Créer les fichiers du projet

Tout d'abord, assurez-vous d'avoir la bibliothèque ncurses installée sur votre système. Si ce n'est pas le cas, vous pouvez utiliser la commande suivante pour l'installer :

sudo apt update
sudo apt-get install libncurses5-dev

Ensuite, créez un nouveau fichier nommé code_rain.c et ouvrez-le dans votre éditeur de code préféré.

cd ~/project
touch code_rain.c
✨ Vérifier la solution et pratiquer

Définir les constantes

Maintenant, créez les fichiers d'en-tête nécessaires, y compris Ncurses, la bibliothèque standard et le temps. Définissez le nombre maximum de gouttes de pluie et créez une structure pour les gouttes de pluie avec leurs propriétés.

#include <ncurses.h>
#include <stdlib.h>
#include <time.h>

#define MAX_RAIN 200

typedef struct {
    int x, y;
    char ch;
    int color;
    int speed;
} Raindrop;
✨ Vérifier la solution et pratiquer

Initialiser les couleurs

Créez une fonction pour initialiser les couleurs qui seront utilisées dans l'animation. Cette fonction utilisera les fonctions start_color et init_pair fournies par ncurses pour configurer les paires de couleurs.

void init_colors() {
    start_color();
    init_pair(1, COLOR_GREEN, COLOR_BLACK);
    init_pair(2, COLOR_CYAN, COLOR_BLACK);
    init_pair(3, COLOR_MAGENTA, COLOR_BLACK);
    init_pair(4, COLOR_YELLOW, COLOR_BLACK);
}

La fonction start_color() est la fonction qui active la fonction de couleur de ncurses. Cette fonction doit être appelée avant d'utiliser toute autre fonction de manipulation de couleur.

La fonction init_pair(1, COLOR_GREEN, COLOR_BLACK) est ensuite utilisée pour modifier la définition de la paire de couleurs. Elle accepte trois paramètres : le numéro de la paire de couleurs, le numéro de la couleur du premier plan et le numéro de la couleur d'arrière-plan. Ici, la fonction init_pair est utilisée pour définir quatre paires de couleurs avec une couleur du premier plan de vert, cyan, magenta et jaune, et une couleur d'arrière-plan de noir.

✨ Vérifier la solution et pratiquer

Implémenter la fonction principale

Dans la fonction main, configurez l'environnement ncurses, y compris la désactivation du buffering de ligne et de l'affichage des caractères saisis. Activez le pavé numérique pour les touches spéciales et configurez l'entrée non bloquante. Obtenez les dimensions maximales de l'écran et initialisez les couleurs à l'aide de la fonction définie précédemment.

int main() {
    initscr();
    cbreak();
    noecho();
    curs_set(0);
    keypad(stdscr, TRUE);
    nodelay(stdscr, TRUE);

    int max_x, max_y;
    getmaxyx(stdscr, max_y, max_x);
    init_colors();

    Raindrop rain[MAX_RAIN];

    srand(time(NULL));

    //... (le reste du code sera couvert dans les étapes suivantes)
}
✨ Vérifier la solution et pratiquer

Initialiser les paramètres des gouttes de pluie

Initialisez les propriétés de chaque goutte de pluie à l'aide d'une boucle. Fixez leurs positions initiales, les caractères, les couleurs et les vitesses de chute.

for (int i = 0; i < MAX_RAIN; i++) {
    rain[i].x = rand() % max_x;
    rain[i].y = rand() % max_y;
    rain[i].ch = rand() % 94 + 33;
    rain[i].color = rand() % 4 + 1;
    rain[i].speed = rand() % 3 + 1;
}
✨ Vérifier la solution et pratiquer

Implémenter la boucle d'animation

Configurez une boucle pour mettre à jour continuellement les positions des gouttes de pluie et les afficher sur l'écran. Vérifiez les entrées de l'utilisateur pour sortir de la boucle d'animation.

while (1) {
    int ch = getch();

    if (ch == 'q') {
        break;
    }

    for (int i = 0; i < MAX_RAIN; i++) {
        attron(COLOR_PAIR(rain[i].color));
        mvaddch(rain[i].y, rain[i].x, ' ');
        rain[i].y += rain[i].speed;
        if (rain[i].y >= max_y) {
            rain[i].y = 0;
            rain[i].x = rand() % max_x;
        }
        mvaddch(rain[i].y, rain[i].x, rain[i].ch);
        attroff(COLOR_PAIR(rain[i].color));
    }

    refresh();
    napms(50);
}

Utilisez la fonction getch() pour obtenir les caractères d'entrée de l'utilisateur et les stocker dans la variable entière ch.

La boucle for est utilisée pour simuler l'effet des gouttes de pluie. Elle parcourt un tableau appelé rain, qui contient des informations sur plusieurs gouttes de pluie. Chaque goutte de pluie est composée des propriétés suivantes : couleur, coordonnées de position (x et y), vitesse de chute (speed) et caractère (ch).

Cette boucle continuera jusqu'à ce que vous appuyiez sur la touche q, auquel moment le programme passera la déclaration break; et sortira de la boucle, mettant ainsi fin au programme.

Après la fin de la boucle d'animation, nettoyez l'environnement ncurses et quittez le programme.

endwin();
return 0;
✨ Vérifier la solution et pratiquer

Compilation et exécution

La commande de compilation est légèrement différente de la normale. Elle nécessite d'ajouter l'option -l à gcc pour inclure la bibliothèque ncurses :

cd ~/project
gcc -o code_rain code_rain.c -l ncurses
./code_rain
Code Rain
✨ Vérifier la solution et pratiquer

Résumé

Dans ce projet, vous avez appris à créer une simple animation de gouttes de pluie à l'aide de la bibliothèque ncurses en langage C. Vous avez configuré le projet, initialisé les composants nécessaires, implémenté la boucle d'animation et géré les entrées de l'utilisateur pour quitter le programme. Ncurses fournit un ensemble d'outils puissants pour créer des interfaces utilisateur basées sur le texte, et vous pouvez l'utiliser pour créer divers types d'applications basées sur le terminal.