C语言案例:黑客帝国文字瀑布

在这个寒假,我有幸教授小孩子学习 C 语言。为了让学习过程更加有趣和富有启发,我设计了一个生动的案例。在这篇博客中,我将与大家分享这个案例,希望能给其他教师或者家长带来一些启发。

项目需要用到图形库,参考: Dev C++ 中添加Easy Graphics Engine

案例效果

C语言案例:黑客帝国文字瀑布_第1张图片

程序代码

#include 
#include 
#include 
#include 

#define winWidth 640
#define winHeight 480

#define LEN(array) (sizeof(array) / sizeof(array[0]))

struct Line
{
    int x, y;
    int speed;
    int fontSize;
    color_t color;
    char letter[20];
};

// 生成随机数
void generateString(char *dest, int len)
{
    char allChar[63] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int cnt, randNo;
    // 这里不建议加时间种子,调用时间很接近,会产生大量相同的随机数
    // srand((unsigned int)time(NULL));
    for (cnt = 0; cnt <= len; cnt++)
    {
        randNo = rand() % 62;
        if (cnt % 2 == 1)
        { // 字符中间加换行符
            *dest = '\n';
        }
        else
        {
            *dest = allChar[randNo];
        }
        dest++;
    }
    *dest = '\0';
}

int main()
{
    // 初始化绘图窗口
    initgraph(winWidth, winHeight, INIT_RENDERMANUAL | INIT_NOFORCEEXIT);

    // 设置背景为黑色
    setbkcolor(BLACK);
    ege_enable_aa(true);
    // 	srand((unsigned int)time(NULL));

    // 生成100条字符加入到数组
    struct Line lines[100];
    int len = LEN(lines);
    for (int i = 0; i < len; i++)
    {
        struct Line line = {};
        line.x = rand() % winWidth;
        line.y = 0;
        line.speed = rand() % 50 + 30;
        line.fontSize = rand() % 12 + 12;
        line.color = EGEARGB(rand() % 125 + 125, rand() % 125 + 125, rand() % 125 + 125, 89);
        generateString(line.letter, rand() % 5 + 5);
        lines[i] = line;
    }

    // 主循环
    for (; is_run(); delay_fps(60))
    {
        cleardevice();

        for (int i = 0; i < len; i++)
        {
            int end = lines[i].y - lines[i].fontSize * strlen(lines[i].letter);
            if (end > winHeight * 2)
            { // 超出屏幕,重置属性
                lines[i].x = rand() % 641;
                lines[i].y = 0;
                lines[i].speed = rand() % 50 + 30;
                lines[i].fontSize = rand() % 12 + 12;
                lines[i].color = EGEARGB(rand() % 125 + 125, rand() % 125 + 125, rand() % 125 + 125, 89);
                generateString(lines[i].letter, rand() % 5 + 5);
            }
            // 移动内容
            lines[i].y += lines[i].speed;
            // 设置颜色字体
            setcolor(lines[i].color);
            setfont(lines[i].fontSize, lines[i].fontSize, "msyh");
            int height = lines[i].fontSize * strlen(lines[i].letter) / 2;
            // 写文字
            outtextrect(lines[i].x, lines[i].y - height, lines[i].fontSize, height, lines[i].letter);
        }
    }
    // 等待用户按键
    getch();
    // 关闭图形界面
    closegraph();
    return 0;
}

查看原文:C语言案例:黑客帝国文字瀑布

关注公众号 "字节航海家" 及时获取最新内容

C语言案例:黑客帝国文字瀑布_第2张图片

你可能感兴趣的:(c语言,c语言)