cmatrix(字符矩阵雨)是一个经典的 Linux 终端程序,用 C 语言编写,主要用到 ncurses 库来操作终端界面。下面我分步骤教你如何从零编写一个简化版 cmatrix。
# Debian / Ubuntu
sudo apt install libncurses5-dev libncursesw5-dev
# CentOS / RHEL
sudo yum install ncurses-devel
核心思想:
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#define DELAY 50000
int main() {
int x, y;
int max_x, max_y;
srand(time(NULL));
initscr();
noecho();
curs_set(0);
timeout(0);
getmaxyx(stdscr, max_y, max_x);
// 每一列的下落位置
int *cols = calloc(max_x, sizeof(int));
while (1) {
clear();
for (x = 0; x < max_x; x++) {
if (cols[x] == 0)
cols[x] = rand() % max_y;
y = cols[x];
// 随机字符
char c = rand() % 2 ? '0' : '1';
mvaddch(y, x, c | A_BOLD);
cols[x]++;
if (cols[x] > max_y)
cols[x] = 0;
}
refresh();
usleep(DELAY);
if (getch() == 'q')
break;
}
free(cols);
endwin();
return 0;
}
gcc matrix.c -o matrix -lncurses
./matrix
按 q 退出
你可以逐步加入:
char chars[] = "アイウエオカキクケコ0123456789";
start_color();
init_pair(1, COLOR_GREEN, COLOR_BLACK);
attron(COLOR_PAIR(1));
如果你研究官方 cmatrix:
cmatrix/
├── cmatrix.c
├── matrix.c
├── display.c
├── Makefile
└── config.h
关键点:
matrix 数据结构display 负责渲染ncurses + signal 信号处理✅ 先写“单色 + 单字符”版本
✅ 再实现拖尾和颜色
✅ 最后研究开源 cmatrix 源码
如果你愿意,我可以:
你想继续哪一步?