Введение
В этом проекте вы научитесь создавать простой дождь из символов с помощью библиотеки ncurses в языке программирования C. Ncurses - это библиотека, которая облегчает создание текстовых интерфейсов пользователя в терминале. В этом проекте вас проведут по настройке проекта, инициализации необходимых компонентов и реализации дождя из символов.
👀 Предварительный просмотр

🎯 Задачи
В этом проекте вы научитесь:
- Как установить библиотеку ncurses
- Как определить константы и структуры для капель дождя
- Как инициализировать цвета для анимации
- Как создать анимационный цикл для отображения падения капель дождя
- Как считывать ввод пользователя для выхода из анимации
🏆 Достижения
После завершения этого проекта вы сможете:
- Использовать библиотеку ncurses в C
- Реализовать структуры в C
- Создавать анимации в терминале
Создайте файлы проекта
Во - первых, убедитесь, что на вашей системе установлена библиотека ncurses. Если нет, вы можете использовать следующую команду для установки:
sudo apt update
sudo apt-get install libncurses5-dev
Далее, создайте новый файл с именем code_rain.c и откройте его в предпочитаемом редакторе кода.
cd ~/project
touch code_rain.c
Определите константы
Теперь создайте необходимые заголовочные файлы, включая Ncurses, стандартную библиотеку и время. Определите максимальное количество капель дождя и создайте структуру для капель дождя с их свойствами.
#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;
Инициализация цветов
Создайте функцию для инициализации цветов, которые будут использоваться в анимации. Эта функция будет настраивать пары цветов с использованием функций start_color и init_pair, предоставляемых библиотекой 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);
}
Функция start_color() - это функция, которая включает цветовую функцию ncurses. Эта функция должна быть вызвана перед использованием любой другой функции по манипуляции с цветами.
Затем функция init_pair(1, COLOR_GREEN, COLOR_BLACK) используется для изменения определения пары цветов. Она принимает три параметра: номер пары цветов, номер цвета переднего плана и номер цвета фонового плана. Здесь функция init_pair используется для определения четырех пар цветов с цветом переднего плана зеленым, голубым, пурпурным и желтым, а цветом фонового плана черным.
Реализация главной функции
Внутри функции main настройте среду ncurses, включая отключение буферизации строк и отображение вводимых символов. Включите цифровую клавиатуру для специальных клавиш и установите неблокирующий ввод. Получите максимальные размеры экрана и инициализируйте цвета с использованием ранее определенной функции.
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));
//... (оставшаяся часть кода, которая будет рассмотрена в последующих шагах)
}
Инициализация параметров капель дождя
Инициализируйте свойства каждой капли дождя с использованием цикла. Установите их начальную позицию, символ, цвет и скорость падения.
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;
}
Реализация цикла анимации
Установите цикл для непрерывного обновления позиций капель дождя и отображения их на экране. Проверяйте ввод пользователя для выхода из анимационного цикла.
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);
}
Используйте функцию getch() для получения введенных пользователем символов и сохраните их в целочисленную переменную ch.
for-цикл используется для имитации эффекта капель дождя. Он обходит массив под названием rain, который содержит информацию о нескольких каплях дождя. Каждая капля дождя состоит из следующих свойств: цвет, координаты позиции (x и y), скорость падения (speed) и символ (ch).
Этот цикл будет продолжаться до тех пор, пока вы не нажмете клавишу q, при этом программа будет выполнять break; Строка выходит из цикла, тем самым завершая программу.
После завершения анимационного цикла очистите среду ncurses и выйдите из программы.
endwin();
return 0;
Компиляция и запуск
Команда компиляции немного отличается от обычной. Она требует добавления опции -l к gcc для включения библиотеки ncurses:
cd ~/project
gcc -o code_rain code_rain.c -l ncurses
./code_rain

Резюме
В этом проекте вы узнали, как создать простую анимацию капель дождя с использованием библиотеки ncurses в языке программирования C. Вы настроили проект, инициализировали необходимые компоненты, реализовали анимационный цикл и обработали ввод пользователя для выхода из программы. Ncurses предоставляет мощный набор инструментов для создания текстовых пользовательских интерфейсов, и вы можете использовать его для создания различных типов приложений для терминала.



