c++动态爱心烟花代码

时间: 2023-11-19 11:56:44 浏览: 120
以下是使用EasyX库展现动态爱心和烟花的C++代码: ```cpp #include <graphics.h> #include <conio.h> #include <math.h> #include <time.h> #define PI 3.1415926535 // 定义一个结构体表示烟花 struct Firework { double x; // 烟花的x坐标 double y; // 烟花的y坐标 double vx; // 烟花的x方向速度 double vy; // 烟花的y方向速度 double ax; // 烟花的x方向加速度 double ay; // 烟花的y方向加速度 double r; // 烟花的半径 COLORREF color; // 烟花的颜色 bool exploded; // 烟花是否已经爆炸 }; // 定义一个结构体表示爆炸的粒子 struct Particle { double x; // 粒子的x坐标 double y; // 粒子的y坐标 double vx; // 粒子的x方向速度 double vy; // 粒子的y方向速度 double ax; // 粒子的x方向加速度 double ay; // 粒子的y方向加速度 double r; // 粒子的半径 COLORREF color; // 粒子的颜色 int life; // 粒子的寿命 }; // 定义一个函数用于绘制爱心 void DrawHeart(double x, double y, double r, COLORREF color) { double t = 0; double x1, y1, x2, y2; x1 = x + r * sin(t); y1 = y + r * cos(t); for (t = 0.01; t <= 2 * PI; t += 0.01) { x2 = x + r * sin(t); y2 = y + r * cos(t); setlinecolor(color); line(x1, y1, x2, y2); x1 = x2; y1 = y2; } x2 = x + r * sin(0); y2 = y + r * cos(0); setlinecolor(color); line(x1, y1, x2, y2); } int main() { // 初始化窗口 initgraph(800, 600); // 定义一个爱心的半径 double heart_r = 100; // 定义一个烟花数组 Firework fireworks[10]; // 初始化烟花数组 for (int i = 0; i < 10; i++) { fireworks[i].x = rand() % 800; fireworks[i].y = rand() % 600; fireworks[i].vx = 0; fireworks[i].vy = 0; fireworks[i].ax = 0; fireworks[i].ay = 0.1; fireworks[i].r = 5; fireworks[i].color = RGB(rand() % 256, rand() % 256, rand() % 256); fireworks[i].exploded = false; } // 定义一个粒子数组 Particle particles[100]; // 初始化粒子数组 for (int i = 0; i < 100; i++) { particles[i].x = 0; particles[i].y = 0; particles[i].vx = 0; particles[i].vy = 0; particles[i].ax = 0; particles[i].ay = 0.1; particles[i].r = 2; particles[i].color = RGB(rand() % 256, rand() % 256, rand() % 256); particles[i].life = 0; } // 进入主循环 while (true) { // 绘制爱心 cleardevice(); DrawHeart(400, 300, heart_r, RGB(255, 0, 0)); // 更新烟花数组 for (int i = 0; i < 10; i++) { if (!fireworks[i].exploded) { fireworks[i].vy += fireworks[i].ay; fireworks[i].x += fireworks[i].vx; fireworks[i].y += fireworks[i].vy; if (fireworks[i].y >= 600) { fireworks[i].exploded = true; for (int j = 0; j < 100; j++) { particles[j].x = fireworks[i].x; particles[j].y = fireworks[i].y; particles[j].vx = rand() % 10 - 5; particles[j].vy = rand() % 10 - 5; particles[j].ax = 0; particles[j].ay = 0.1; particles[j].r = 2; particles[j].color = fireworks[i].color; particles[j].life = rand() % 50 + 50; } } } else { for (int j = 0; j < 100; j++) { if (particles[j].life > 0) { particles[j].vx += particles[j].ax; particles[j].vy += particles[j].ay; particles[j].x += particles[j].vx; particles[j].y += particles[j].vy; particles[j].life--; setfillcolor(particles[j].color); fillcircle(particles[j].x, particles[j].y, particles[j].r); } } } } // 更新爱心的半径 heart_r += sin(clock() / 1000.0) * 2; // 刷新画面 Sleep(10); flushbatch(); } // 关闭窗口 closegraph(); return 0; } ```

相关推荐

最新推荐

recommend-type

c++读取excel的代码详解

c++如何读取excel?C++ ODBC操作excel全过程 想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动”MICROSOFT EXCEL DRIVER (*.XLS)”。然后,可根据下面步骤进行: 1. 在StdAfx.h...
recommend-type

C#访问C++动态分配的数组指针(实例讲解)

下面小编就为大家分享一篇C#访问C++动态分配的数组指针(实例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

C++递归算法实例代码

主要介绍了C++递归算法实例代码,还是比较不错的,运用了递归算法解决相关问题,这里分享给大家,需要的朋友可以参考下。
recommend-type

使用C++调用Python代码的方法详解

主要介绍了使用C++调用Python代码并给大家介绍了.py和.pyc的区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

学籍管理系统源代码 c++.docx

为了学校更加高效,快捷,方便的管理学生信息,并实现以下功能: (1)对学生信息进行录入:先输入学生的学籍,然后输入学生姓名,年龄,性别,籍贯,系别,专业,班级等,最后输入学生状态(入学)。...
recommend-type

STC89C51 简单时钟

STC89C51 简单时钟,叫你从基础开始学习单片机,
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?

![MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?](https://www.finebi.com/wp-content/uploads/2019/11/FineBI%E8%A1%8C%E4%B8%9A%E9%A9%BE%E9%A9%B6%E8%88%B1-1024x510.png) # 1. MATLAB归一化概述 归一化是一种数据预处理技术,用于将数据缩放到特定范围内,从而消除不同特征之间的尺度差异。在MATLAB中,有各种归一化方法可用于不同类型的数据和应用程序。 归一化的主要目的是: - 提高模型的训练效率和准确性,通过消除特征之间的尺度差异,使模型能够更有效地学习
recommend-type

failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar: invalid tar header

很抱歉听到这个问题。这个错误通常是由于Docker镜像损坏或Docker存储库中缺少所需的图层引起的。您可以尝试以下几种方法来解决这个问题: 1. 清理Docker镜像和容器:使用命令“docker system prune”清理不再使用的Docker对象。 2. 检查Docker存储库:确保您正在使用可靠的Docker存储库,并检查是否存在所有必需的图层。 3. 重新下载Docker镜像:如果您确定问题是由于损坏的Docker镜像引起的,则可以尝试重新下载Docker镜像。 4. 更新Docker版本:如果您使用的是旧版Docker,则可能会出现此问题。尝试更新到最新版本的Docke
recommend-type

Linux系统常用操作命令大全手册

附件是Linux系统常用操作命令大全手册,是 markdown格式,其中覆盖了Linux系统管理、文件操作、网络配置等多个方面,都是日常工作中非常常用的命令,欢迎大家下载学习使用!