当前位置: 首页 > article >正文

Ubuntu 下C++数字雨

以前写过一个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


http://www.kler.cn/news/136913.html

相关文章:

  • Unity之如何在物体空间中制作马赛克
  • ECharts饼图-饼图纹理,附视频讲解与代码下载
  • 3.STM32之蜂鸣器
  • C语言程序设计:现代设计方法习题笔记《chapter3》
  • TCL中环开工率下滑,员工集体要求解约赔偿
  • wait和sleep的区别
  • linux中实现自己的bash
  • linux内核管理
  • Redis篇---第十二篇
  • OpenAI政变背后是科学家创始人的悲歌
  • 一阶低通滤波器(一阶巴特沃斯滤波器)
  • ⑩⑦【MySQL】锁:全局锁、表级锁、行级锁
  • 「Verilog学习笔记」实现3-8译码器①
  • 亚马逊车灯外贸出口CE认证标准办理解析
  • vite vue3配置axios
  • DefaultMQPushConsumer的整体流程
  • windows11系统如何设置锁屏壁纸
  • 中石油勘探院张弢:从业务到架构全面探讨中国石油的数字化转型之路
  • 认识.NET Aspire:高效构建云原生应用的利器
  • Java-类和类的关系
  • 如何用html css js 画出曲线 或者斜线;
  • Flink(六)【DataFrame 转换算子(下)】
  • 一篇文章让你彻底了解Java算法「十大经典排序算法」
  • 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
  • fast lio 2 保存每一帧的点云PCD和里程计矩阵 Odom 在txt文件
  • 深入探索 PaddlePaddle 中的计算图