Linux Ubuntu 下C++数字雨 流星雨

32 篇文章 3 订阅

以前写过一个Window下的数字雨,像黑客帝国里那样的01数字,现在补充一版Linux下的。使用了curses库,安装方法与使用方法参照

Linux下curses函数库的详细介绍_libcurses库-CSDN博客

5-linux学习笔记之-----curses-CSDN博客

效果如下:

代码如下:


#include <time.h>
#include <curses.h>
#include <stdio.h>
#include <chrono>
#include <thread>

typedef struct		//记录雨滴的结构体
{
    int x;
    int y;
    char ch;
}RAINDROP;

const int BUFFER_SIZE = 50;    //雨线数量
int WIDTH = 80;
int HEIGHT = 30;
const int RAIN_LENGTH = 18;     //雨线长度

RAINDROP raindropLine[BUFFER_SIZE];
WINDOW *HOUT = initscr();//获得标准输出的句柄

int main()
{
    if (has_colors() == TRUE)
    {
        start_color();  //初始化颜色显示
        init_pair(1, COLOR_RED, COLOR_WHITE);   //只能是颜色库里面8中颜色的组合
        init_pair(2, COLOR_BLUE, COLOR_GREEN);
        init_pair(3, COLOR_BLACK, COLOR_GREEN);
        init_pair(4, COLOR_GREEN, COLOR_BLACK);
    }

    HEIGHT = LINES;				//根据控制台的宽高设置显示的宽高
    WIDTH = COLS;

    noecho();
    srand((unsigned int)time(NULL));
    for (int i=0; i<BUFFER_SIZE; i++)			//随机设置雨滴下落的位置
    {
        raindropLine[i].x = rand()%WIDTH;
        raindropLine[i].y = rand()%HEIGHT;
        raindropLine[i].ch = rand() %2 + 48;				//设置雨滴内容0或1
    }

    while(true)
    {
        curs_set(0);
        //GetConsoleScreenBufferInfo(HOUT, &info);	//当窗体大小变化时,重新设置宽高信息
        HEIGHT = LINES;
        WIDTH = COLS;
        for (int i=0; i<BUFFER_SIZE; ++i)
        {
            if (raindropLine[i].y <= HEIGHT)
            {
                mvaddch(raindropLine[i].y, raindropLine[i].x, raindropLine[i].ch | COLOR_PAIR(4));  //设置雨滴颜色
            }

            mvaddch(raindropLine[i].y - RAIN_LENGTH, raindropLine[i].x, ' ');
            raindropLine[i].y++;
            raindropLine[i].ch = rand() % 2 + 48;
            if (raindropLine[i].y > HEIGHT + RAIN_LENGTH)
            {
                raindropLine[i].x = rand() % WIDTH;
                raindropLine[i].y = rand() % HEIGHT;
            }
            if ( raindropLine[i].y <= HEIGHT)
            {
                mvaddch( raindropLine[i].y, raindropLine[i].x, raindropLine[i].ch | COLOR_PAIR(4) | A_BOLD);  //高亮最下方的雨滴

            }
        }
        refresh();
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
    getchar();
    return 0;
}

编译命令

gcc main.cpp -o rain -lpthread -lcurses

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Ubuntu 中使用 C 语言实现数字可以通过以下步骤实现: 1. 使用 C 语言编写一个程序,在屏幕上随机生成数字并在屏幕上显示。 2. 使用 ncurses 库来控制终端显示,实现在终端上滚动显示数字。 3. 可以使用多线程来提高程序的运行效率。 这需要一些 C 语言和终端编程的基础知识, 建议在网上寻找更多的资源和代码来帮助你完成这个项目。 ### 回答2: 数字是一种经典的视觉效果,可以使用C语言在Ubuntu系统上实现。实现数字的基本思路是在屏幕上显示一系列随机生成的数字字符,模拟滴下落的效果。下面是一个简单的实现步骤: 首先,我们使用C语言的终端编程库(如ncurses)来获取终端窗口的尺寸,并创建一个与窗口相同尺寸的字符数组,用于存储数字的效果。 然后,我们利用循环结构来不断生成随机数字符,并将字符依次添加到字符数组的最顶部。同时,我们将字符数组中每个字符向下移动一行,实现数字效果。 接着,我们需要控制字符的移动速度和频率。使用一个计时器来控制每个字符的下降速度,可以通过调整计时器的间隔来改变速度。同时,根据预设的频率,我们可以控制在每个计时器间隔中生成的字符数量。 最后,我们在循环中调用终端编程库的函数,根据字符数组中的字符信息,将数字效果显示到屏幕上。同时,我们需要不断刷新屏幕以保持数字的流动性。 在实现过程中,我们还可以添加一些细节,比如给数字添加颜色效果、改变字符下落方式等,以增强视觉效果。 总结起来,使用C语言在Ubuntu系统上实现数字效果需要借助终端编程库、循环结构、计时器等技术手段,通过生成随机字符、控制字符移动、刷新屏幕等步骤来实现。这个过程可以让我们更深入地了解C语言和终端编程的应用,也可以增加我们对计算机图形效果的理解。 ### 回答3: 数字是一种经典的计算机图形效果,通过字符在屏幕上以滴的形式垂直下落和变化,给人一种炫酷的感觉。在Ubuntu系统中,可以使用C语言实现数字效果。 首先,我们需要使用C语言来控制终端的输入输出。可以使用标准库中的ncurses库来实现这个功能。ncurses库提供了更高级的终端控制操作,可以方便地进行字符输入输出的控制。 接下来,我们需要使用C语言编写代码来实现数字的动画效果。一个简单的方法是使用循环来不断地输出字符,并控制字符的位置和颜色,实现数字的下落效果。可以使用rand函数来随机生成字符,以增加效果的随机性。 代码的基本结构如下: 1. 初始化终端和ncurses库。 2. 设置终端的输入输出模式,使得字符能够直接显示在屏幕上。 3. 进入一个循环,不断地输出字符并控制字符的位置和颜色。 4. 终止程序时,恢复终端的默认设置。 通过调整字符的输出速度、位置和颜色,可以实现不同的数字效果。可以尝试使用不同的字符集合、颜色方案和控制参数,来实现个性化的数字效果。 总的来说,使用C语言结合ncurses库,循环输出字符并控制字符的位置和颜色,可以在Ubuntu系统中实现数字效果。这样的代码实现不仅可以给用户带来视觉上的惊喜,也可以锻炼自己在C语言和终端编程方面的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值