Introdução
Neste projeto, você aprenderá como criar uma simples chuva de código usando a biblioteca ncurses na linguagem de programação C. Ncurses é uma biblioteca que facilita interfaces de usuário baseadas em texto no terminal. Este projeto irá guiá-lo através da configuração do projeto, inicialização dos componentes necessários e implementação da chuva de código.
👀 Pré-visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Como instalar a biblioteca ncurses
- Como definir constantes e estruturas para as gotas de chuva
- Como inicializar cores para a animação
- Como criar um loop de animação para exibir as gotas de chuva caindo
- Como ler a entrada do usuário para sair da animação
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Usar a biblioteca ncurses em C
- Implementar estruturas em C
- Criar animações no terminal
Criar os Arquivos do Projeto
Primeiramente, certifique-se de ter a biblioteca ncurses instalada em seu sistema. Caso não tenha, você pode usar o seguinte comando para instalá-la:
sudo apt update
sudo apt-get install libncurses5-dev
Em seguida, crie um novo arquivo chamado code_rain.c e abra-o em seu editor de código preferido.
cd ~/project
touch code_rain.c
Definir Constantes
Agora, crie os arquivos de cabeçalho necessários, incluindo Ncurses, biblioteca padrão e tempo. Defina o número máximo de gotas de chuva e crie uma estrutura para as gotas de chuva com suas propriedades.
#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;
Inicializando as Cores
Crie uma função para inicializar as cores que serão usadas na animação. Esta função configurará os pares de cores usando as funções start_color e init_pair fornecidas por ncurses.
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);
}
A função start_color() é a função que habilita a funcionalidade de cores do ncurses. Esta função precisa ser chamada antes que qualquer outra função de manipulação de cores seja usada.
A função init_pair(1, COLOR_GREEN, COLOR_BLACK) é então usada para alterar a definição do par de cores. Ela aceita três parâmetros: o número do par de cores, o número da cor do primeiro plano (foreground) e o número da cor do fundo (background). Aqui, a função init_pair é usada para definir quatro pares de cores com uma cor de primeiro plano verde, ciano, magenta e amarelo, e uma cor de fundo preta.
Implementando a Função Principal
Dentro da função main, configure o ambiente ncurses, incluindo desativar o buffer de linha e o eco. Habilite o teclado para teclas especiais e defina a entrada não bloqueante. Obtenha as dimensões máximas da tela e inicialize as cores usando a função definida anteriormente.
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));
// ... (remaining code to be covered in subsequent steps)
}
Inicializando os Parâmetros da Gota de Chuva
Inicialize as propriedades para cada gota de chuva usando um loop. Defina suas posições iniciais, caracteres, cores e velocidades de queda.
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;
}
Implementando o Loop de Animação
Configure um loop para atualizar continuamente as posições das gotas de chuva e exibi-las na tela. Verifique a entrada do usuário para sair do loop de animação.
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);
}
Use a função getch() para obter os caracteres de entrada do usuário e armazená-los na variável inteira ch.
O loop for é usado para simular o efeito das gotas de chuva. Ele percorre um array chamado rain, que contém informações sobre múltiplas gotas de chuva. Cada gota de chuva consiste nas seguintes propriedades: cor, coordenadas de posição (x e y), velocidade de queda (speed) e caractere (ch).
Este loop continuará até que você pressione a tecla q, momento em que o programa executará break;. A instrução sai do loop, encerrando assim o programa.
Após o término do loop de animação, limpe o ambiente ncurses e saia do programa.
endwin();
return 0;
Compilação e Execução
O comando de compilação é ligeiramente diferente do habitual. Ele requer a adição da opção -l ao gcc para incluir a biblioteca ncurses:
cd ~/project
gcc -o code_rain code_rain.c -l ncurses
./code_rain

Resumo
Neste projeto, você aprendeu como criar uma animação simples de gotas de chuva usando a biblioteca ncurses na linguagem de programação C. Você configurou o projeto, inicializou os componentes necessários, implementou o loop de animação e tratou a entrada do usuário para sair do programa. Ncurses fornece um conjunto de ferramentas poderoso para criar interfaces de usuário baseadas em texto, e você pode usá-lo para criar vários tipos de aplicações baseadas em terminal.



