C/C++实现代码雨效果

C/C++实现代码雨效果

 

 

说明

  • 最近整理电脑资料,翻出了以前写的代码,顺便整理一下到博客上,当做一次备份记录

  • 先看看静态效果

    图片失效

  • 需要分为以下步骤实现

    • 生成代码串
    • 把代码串绘制到窗口中
    • 使用双缓冲机制避免屏幕闪烁
    • 让代码串往下移动
    • 随机选择代码串中的随机字符位置做随机修改

使用的库说明


测试代码

#include <stdio.h>
#include <time.h>
#include <Windows.h>
#include <graphics.h>

#define WIDTH 960
#define HEIGHT 640
#define STR_SIZE 20
#define STR_NUM 128
#define STR_WIDTH 15


typedef struct Rain
{
    int x;
    int y;
    int speed;
    TCHAR str[STR_SIZE];
}Rain; 
Rain rain[STR_NUM];

// 随机生成一个字符
char CreateCh()
{
    char ch = 0;
    int flag = rand() % 3; // 0~2
    if (flag == 0)
        ch = rand() % 26 + 'a'; // 产生小写字母a~z
    else if (flag == 1)
        ch = rand() % 26 + 'A'; // 产生大写字母A~Z
    else
        ch = rand() % 10 + '0'; // 产生数字0~9

    return ch;
}
// 初始化结构体成员
void InitRain()
{
    // 初始化字符的位置和速度
    for (int i = 0; i < STR_NUM; ++i)
    {
        rain[i].x = i*STR_WIDTH;
        rain[i].y = rand() % HEIGHT;
        rain[i].speed = rand() % 5 + 5;
    }
    // 获取随机字符填充进数组
    for (int i = 0; i < STR_NUM; i++)
    {
        for (int j = 0; j < STR_SIZE; j++)
        {
            rain[i].str[j] = CreateCh();
        }
    }
}
// 输出到窗口中
void DrawRain()
{
    cleardevice();
    for (int i = 0; i < STR_NUM; i++)
    {
        for (int j = 0; j < STR_SIZE; j++)
        {
            outtextxy(rain[i].x, rain[i].y-STR_WIDTH*j, rain[i].str[j]);
            settextcolor(RGB(0, 255-j*13, 0));
        }
    }
}
// 移动字符
void MoveRain()
{
    for (int i = 0; i < STR_NUM; i++)
    {
        rain[i].y += rain[i].speed;
        if (rain[i].y- STR_WIDTH*STR_SIZE > HEIGHT)
        {
            rain[i].y = 0;
        }
    }
}
// 随机改变字符
void ChangeCh()
{
    for (int i = 0; i < STR_NUM; i++)
    {
        rain[rand() % STR_NUM].str[rand() % STR_SIZE] = CreateCh();
    }
}
int main()
{
    srand((unsigned int)time(NULL)); // 初始化随机数种子
    initgraph(WIDTH, HEIGHT);
    InitRain();
    DWORD t1, t2;
    t1 = GetTickCount();
    t2 = t1;
    while (1)
    {
        BeginBatchDraw(); // 双缓冲机制
        DrawRain();
        ChangeCh();
        if (t2 - t1 > 20)
        {
            MoveRain();
            t1 = t2;
        }
        t2 = GetTickCount();
        EndBatchDraw();
    }
    getchar();
    closegraph();
    return 0;
}


效果图

图片失效

Posted By veis

原文链接: https://www.cnblogs.com/zhangtian99/p/12774474.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C/C++实现代码雨效果

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/344290

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午2:36
下一篇 2023年3月2日 上午2:37

相关推荐