c++动态爱心烟花代码
时间: 2023-11-19 19:56:44 浏览: 275
以下是使用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;
}
```
阅读全文