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

2024-02-05 03:20

本文主要是介绍C语言案例:黑客帝国文字瀑布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

案例效果

程序代码

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>#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语言案例:黑客帝国文字瀑布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679624

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带