使用C++在Ubuntu系统中模拟数字雨效果

简介: 别忘了,这可是一场没有结尾的雨,按下'q'键退出哦。现在,你已经可以在自己的Ubuntu系统上享受这场视觉盛宴了,享受编程的乐趣,让创造力和代码带给你无尽的可能。

模拟数字雨(Matrix Rain)效果,好像直接走进了电影《黑客帝国》的数字荒原。想实现这个酷炫的效果?让我们在Ubuntu系统上,使用C++,以及ncurses库来点亮你的终端屏幕。

首先,你得有g++编译器和ncurses库。不用担心,Ubuntu通通有提供。打开终端,轻松安装:

sudo apt-get install g++ libncurses5-dev libncursesw5-dev
​

噼里啪啦,一堆代码就安装好了。接着,就是编写C++代码。我们需要做的事情是:

  1. 初始化ncurses,准备美丽的终端界面。
  2. 创建一把钥匙,那就是矩阵式的字符数组。
  3. 编排每一列字符,让它们像倾盆大雨一样下落。
  4. 让每个字符有随机的延迟效果,就像每滴雨落下的速度不同。

下面是创建你自己的数字雨的具体步骤:

#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctime>

// 设置数字雨中一些基本的参数
const int width = 70;   // 设置屏幕宽度
const int length = 200; // 设置字符下落的长度,也就是下落速度和屏幕的「深度」

// 神秘的数字雨字符集合
const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#$%^&*()_+[]{}|;:',.<>/?"

// 给我们的雨设置一个初始位置。
int startPosition[width];

// 这是行进速度的调节器。
int getRandSpeed() {
    return rand() % 5 + 1; // 随机速度
}

// 初始化开始位置
void initRain() {
    for (int i = 0; i < width; ++i) {
        // 设定每滴数字雨的起始高度为随机值
        startPosition[i] = -1 * (rand() % length);
    }
}

// 制造一滴滴数字雨
void makeItRain() {
    int printHeight;
    for (int i = 0; i < width; ++i) {
        if(startPosition[i] >= length)
            startPosition[i] = 0;
        else
            startPosition[i] += getRandSpeed();
        printHeight = startPosition[i];

        for (int j = 0; j < printHeight; j++) {
            if(j < printHeight - 2) {
                // 这里让字符随机显示
                mvaddch(j, i, charset[rand() % (sizeof(charset) - 1)]);
            } else {
                // 这里是落地的字符,我们给他个白色高亮
                attron(A_REVERSE);
                mvaddch(j, i, charset[rand() % (sizeof(charset) - 1)]);
                attroff(A_REVERSE);
            }
        }
    }
}

int main() {
    srand(time(NULL)); // 随机种子
    initscr();         // 初始化 ncurses
    cbreak();          // 禁止行缓冲,使得字符立即可用
    noecho();          // 关闭回显
    curs_set(0);       // 隐藏光标
    nodelay(stdscr, TRUE); // 设置 getch()为非阻塞模式
    initRain();        // 初始化雨滴的起始位置

    // 死循环,至直到按下'q'
    while(getch() != 'q') {
        makeItRain();
        refresh();      // 刷新屏幕以显示字符
        usleep(30000);  // 设置延迟,这影响了雨滴下落的速度
    }
    endwin(); // 结束 curses 模式

    return 0;
}
​

编写完上述代码后,保存为 matrix_rain.cpp,然后编译它:

g++ matrix_rain.cpp -o matrix_rain -lncurses
​

然后,只需运行编译出来的程序,你的终端就会有了炫酷的数字雨效果:

./matrix_rain
​

这堆代码就像魔法一样,在你的屏幕上召唤出流动的数字雨,不久你就会发现自己深深地被吸引,沉浸在这个神奇的数字世界中。

别忘了,这可是一场没有结尾的雨,按下'q'键退出哦。现在,你已经可以在自己的Ubuntu系统上享受这场视觉盛宴了,享受编程的乐趣,让创造力和代码带给你无尽的可能。

目录
相关文章
|
26天前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
51 16
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
Deep Search 如何理解业务仓库代码?
本文系统地介绍了 Deep Search 和 Deep Research 的概念、与传统 RAG 的区别、当前主流的商业产品与开源方案、在代码领域的应用(如 Deep Search for 仓库问答)以及未来的发展规划。
219 21
Deep Search 如何理解业务仓库代码?
|
12天前
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
89 56
|
25天前
|
Ubuntu Linux 数据安全/隐私保护
修复Ubuntu 18.04终端无法启动的问题
经过这一系列动作,如果终端还是藏匿不出,那它可能被数字世界的某个角落困住了。但概率比较小。大多数情况下,按照上面的修复步骤,你的 Ubuntu 18.04 终端应该能恢复健康。当然,这些攻略仅相当于一把解开问题的钥匙,并非覆盖所有情况。如果还有坎儿,可能需要深入探查,或者寻求社区的力量。别忘了,团结就是力量,绝大多数问题都不是单枪匹马能解决的。
98 27
|
25天前
|
Ubuntu Linux UED
Ubuntu和Debian系统与Hat Linux系列的使用比较
所以,如果你想搞一个家用服务器,或者是个人使用,喜欢新鲜事物,那Ubuntu可能是你的最好选择。如果你需要一个在商业环境中经受住考验的系统,那Fedora或CentOS可能更符合你的口味。不过记住,CentOS现在是CentOS Stream,中途换马了,所以如果你是稳定性的极端追求者,可能得考虑一下这一变化。而Debian,则适合那些对稳定性需求极高,不太追求软件版本新旧的用户。
54 26
|
25天前
|
Java API Nacos
OpenFeign与Nacos结合使用时获取服务提供者的真实IP地址的方法
最终,当服务调用一次次执行,数据一次次精准传递时,这个寻找真实IP地址的宝藏狩猎,就顺利完成了。这不单单是原创性的解决方案,更是创意性地结合了现代微服务技术,和你一起编织了这场寻宝之旅的冒险故事。
95 25
|
26天前
|
安全 Linux Shell
CentOS恢复或重置遗忘的root用户密码的方法
至此,整个手术过程完成。没有繁复的迷魂阵,也无需烧香拜佛,就这样直截了当,你已经成功将被遗忘的密码变成了新的秘密。就像你的影子随形,但却更加隐秘安全。这不仅限于CentOS,其实许多Linux系统对于这样的技巧也会乖乖听话。这样的流程就像变魔术一样,让你重新掌握了“开关命运”的钥匙。
137 12
|
12天前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
60 21
|
12天前
|
Prometheus Kubernetes 监控
Kubernetes技巧:使用Prometheus监控Pod性能指标。
记住,监控和可视化是维持健康集群的必备工具,而Prometheus加上Grafana就是这个任务上的黄金搭档。安装这两位侦探后,你的Kubernetes集群将会像一个经过精心维护的庞大机器一样,高效、有序地运转。
87 21
|
25天前
|
Ubuntu 数据库
解决Ubuntu系统获取锁失败的问题
不过记住,这种方式有如凤凰涅槃,万不得已时才使用。这样,繁琐的锁定问题就被巧妙解决了。从此,当你再次面对这类状况时,就能秉持锁匠之智,轻松应对。
69 23