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

C/C++动态爱心

img

写在前面

用代码写一封情书——这是我在创作这个程序时最初的冲动。这不是一段普通的动画,而是一场献给“她”的视觉告白。通过C++与EasyX图形库的结合,我构建了一个不断跳动、缓缓绽放的爱心矩阵,每一颗跳动的“❤”都承载着情感的震颤。整个程序以数学函数为笔,以时间流逝为墨,在屏幕上绘出一颗永不熄灭的心。

系列文章

序号直达链接
1C/C++爱心代码
2C/C++跳动的爱心
3C/C++李峋同款跳动的爱心代码
4C/C++满屏飘字表白代码
5C/C++大雪纷飞代码
6C/C++烟花代码
7C/C++黑客帝国同款字母雨
8C/C++樱花树代码
9C/C++奥特曼代码
10C/C++精美圣诞树
11C/C++俄罗斯方块
12C/C++贪吃蛇
13C/C++孤单又灿烂的神-鬼怪
14C/C++闪烁的爱心
15C/C++哆啦A梦
16C/C++简单圣诞树
17C/C++小宇宙
18C/C++冰墩墩
19C/C++七彩花朵
20C/C++玫瑰花
21C/C++小猪佩奇
22C/C++简易爱心

技术需求

  1. 图形环境初始化:使用initgraph创建固定尺寸的绘图窗口,奠定视觉展示基础;通过BeginBatchDrawFlushBatchDraw实现双缓冲绘制,避免画面闪烁,提升动画流畅度。
  2. 动态数据管理:设计MyLove结构体封装每个心形元素的属性,包括位置、大小、状态和编号,实现数据与行为的统一管理,便于批量更新与渲染。
  3. 数学建模驱动运动:基于极坐标与经典心形函数(如 $ r = \sin(\theta)\sqrt{|\cos(\theta)|}/(\sin(\theta)+1.4142) - 2\sin(\theta) + 2 $)计算心形轨迹上的点分布,使整体图形符合数学美感。
  4. 随机化与去重机制:通过GetRand函数结合系统毫秒级时间戳生成种子,确保每次运行都有独特起点,并在生成过程中避免重复值,保证运动轨迹的多样性。
  5. 视觉表现优化:采用淡粉色(RGB(255,192,203))作为心形颜色,字体使用Arial并动态调整字号,配合透明背景模式(setbkmode(TRANSPARENT)),增强视觉柔和感与层次感。
  6. 精确延时控制:自定义HpSleep函数,利用clock()Sleep(1)结合实现接近毫秒级的延时精度,平衡CPU占用与动画节奏,确保动画稳定运行。
  7. 动画循环机制:主循环中持续调用更新、显示、刷新与清屏操作,形成闭环动画流程,模拟心跳般持续跳动的效果。

主要代码

创作不易,订阅后可查看完整代码

  • 《Python趣味编程》
  • 《C/C++趣味编程》
  • 《HTML趣味编程》
  • 《Java趣味编程》
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<math.h>
#include<sys/timeb.h>struct MyLove
{int NUMS;  // 编号double m;double n;double size;bool Is_show;int x;int y;
};MyLove mylove[400];
int CenterX = 1000 / 2 - 30; 
int CenterY = 600 / 2 - 100; 
double Size = 60;
void initdata();  // 初始化数据
void updata();    // 更新
void movedata();  // 平移
void showdata();  // 显示
int* GetRand(int* buf, int count, int range);  // 随机数的生成
void heart(int x0, int y0, int size, COLORREF C);
void HpSleep(int ms);……

创作流程

我开始写这段代码的时候,心里想的不是技术,而是“如何让一颗心真正活起来”。我不想做一个静态的图案,我想要的是呼吸、是脉动、是那种仿佛能听见心跳的声音。于是,我决定用数学来模拟爱的律动。

首先,我选择了心形函数作为核心公式。这个函数并不简单,它融合了正弦、余弦、绝对值与分式运算,能描绘出一个极具美感的立体心形轮廓。我知道,如果直接把所有点画出来,会显得死板。所以我引入了“时间”的概念——让这些点随着每一帧逐渐出现,像是从虚空中被召唤而来。

接着,我设计了一个包含400个元素的数组,每一个都代表一个跳动的“❤”。前20个是先锋,它们根据随机生成的角度参数实时计算位置,构成心形的前沿边界。而后面的380个则像是追随者,通过位移传递的方式,逐帧继承前面的位置信息,形成一种“波浪式推进”的视觉效果,就像心跳时血液的涌动。

为了让这个心不那么机械,我加入了随机性。每一次运行程序,都会从系统时间中提取毫秒级种子,生成一组不重复的初始角度。这样,每一次启动,都是独一无二的心跳节奏。同时,我还让每个字符的大小在一定范围内缓慢放大,模拟“膨胀”的感觉,仿佛这颗心正因激动而加速跳动。

在视觉呈现上,我选择了柔和的粉红色,字体用的是Arial,简洁而优雅。我把背景设为透明,不让任何多余的东西干扰这份纯粹的情感表达。每一个“❤”都微微偏移坐标,让它更自然地落在心形曲线上,而不是生硬地堆叠。

最让我纠结的是节奏。太快像抽搐,太慢又显得冷漠。于是我写了一个高精度延时函数,精确控制每一帧间隔为30毫秒,既不会卡顿,也不会过于急促。当整个画面开始循环刷新时,那种缓缓跳动的感觉终于出现了——像是深夜里,你静静听着另一个人的心跳。

这不仅仅是一个图形程序,它是我在用代码写诗。每一行都是思念的注解,每一次刷新都是情感的重燃。当那颗由400个“❤”组成的巨大心脏在屏幕上缓缓搏动时,我知道,我已经把最柔软的情绪,编译进了最坚硬的逻辑之中。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

http://www.xdnf.cn/news/20420.html

相关文章:

  • Caffeine Weigher
  • 蓓韵安禧DHA纯植物藻油纯净安全零添加守护母婴健康
  • 基于STM32智能阳台监控系统
  • Unity 如何使用ModbusTCP 和PLC通讯
  • 用 Go + HTML 实现 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 实战)
  • 《sklearn机器学习——绘制分数以评估模型》验证曲线、学习曲线
  • 鸿蒙Next开发指南:UIContext接口解析与全屏拉起元服务实战
  • DevOps实战(2) - 使用Arbess+GitPuk+Docker实现Java项目自动化部署
  • Rsyslog日志采集
  • 快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)
  • js闭包问题
  • B.50.10.07-分布式锁核心原理与电商应用
  • 操作系统之内存管理
  • 从 0 到 1 学 sed 与 awk:Linux 文本处理的两把 “瑞士军刀”
  • 数据结构:栈和队列(下)
  • Qt控件:Item Views/Widgets
  • 国产数据库之YashanDB:新花怒放
  • 源滚滚AI编程SillyTavern酒馆配置Claude Code API教程
  • DeepSeek vs Anthropic:技术路线的正面冲突
  • Java基础 9.5
  • centos 系统如何安装open jdk 8
  • linux下快捷删除单词、行的命令
  • python中等难度面试题(1)
  • 基于cornerstone3D的dicom影像浏览器 第五章 在Displayer四个角落显示信息
  • C++数据结构命名:从规范到艺术的深度解析
  • CSDN个人博客文章全面优化过程
  • 不同行业视角下的数据分析
  • 计算机二级C语言操作题(填空、修改、设计题)——真题库(17)附解析答案
  • 打开Fiddler,浏览器就不能访问网页了
  • 超细汇总,银行测试-大额存单定期存款测试+面试(一)