iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现动态烟花代码
  • 791
分享到

C++实现动态烟花代码

C++ 动态烟花C++ 烟花 2023-01-28 06:01:47 791人浏览 独家记忆
摘要

目录写在前面代码思路开始编写1 烟花结构体2 初始化烟花3 烟花上升4 烟花爆炸5 绘制烟花效果展示完整代码写在前面 首先,祝大家新年快乐! 即将迎来新的一年—&mdas

写在前面

首先,祝大家新年快乐!

即将迎来新的一年——癸卯兔年,祝大家成绩、事业“兔”飞猛进,必定红红火火!

在这篇文章中,将用烟花致以大家最好的祝福!

烟花代码将会用到 Easyx 图形库,可以去官网下载:easyx.cn

代码思路

1 烟花结构体

2 初始化烟花

3 烟花上升

4 烟花爆炸

5 绘制烟花

不需要任何图片、音效(本来想加的,你要加自己加吧)

开始编写

提前声明:代码纯原创

需要用到的头文件以及宏:

#include <graphics.h>
#include <math.h>
#include <time.h>
#include <stdio.h>
#define MAXNUM 15
#define WIDTH 640
#define HEIGHT 480
#define PI 3.1415926

graphics.h Easyx图形库

math.h 计算烟花位置

time.h 选取随机种子

stdio.h 标准输入输出头文件

MAXNUM 烟花数量

WIDTH , HEIGHT 窗口的宽、高

PI 圆周率常量,结合数学库计算烟花位置

1 烟花结构体

定义的参数如下:

nowx , nowy 现在坐标

endy 爆炸高度

radio 爆炸半径

explode 爆炸进度

rgb[3] 烟花颜色rgb值

color 烟花颜色

struct Fire
{
	int nowx;
	int nowy;
	int endy;
	int radio;
	int explode;
	int rgb[3];
	COLORREF color;
}fire[MAXNUM];

2 初始化烟花

nowx , nowy 窗口外的随机位置

endy 随即高度

radio 随即半径

explode 一开始设为0

rgb[3] 一些特定的颜色随机取

color 按照rgb值

void Init()
{
	for (int i = 0; i < MAXNUM; i++)
	{
		fire[i].nowx = rand() % WIDTH;
		fire[i].nowy = HEIGHT + rand() % 250 + 50;
		fire[i].endy = rand() % 100 + 10;
		fire[i].radio = rand() % 50 + 120;
		fire[i].explode = 0;
		int c[][3] = { {255, 0, 0}, {210, 190, 255}, {255, 120, 0}, {255, 0, 150}, {255, 240, 100}, {10, 255, 255}, {160, 10, 255}, {255, 200, 60} };
		int n = rand() % 8;
		fire[i].color = RGB(c[n][0], c[n][1], c[n][2]);
		fire[i].rgb[0] = c[n][0];
		fire[i].rgb[1] = c[n][1];
		fire[i].rgb[2] = c[n][2];
	}
}

3 烟花上升

y坐标 还没到达爆炸高度时一直上升

for (int i = 0; i < MAXNUM; i++)
{
	if (fire[i].nowy > fire[i].endy)
	{
		fire[i].nowy -= 3;
	}
}

4 烟花爆炸

爆炸进度 explode 不断增加,如果到达爆炸半径,就重新初始化。(接上面的if语句)

else
{
	if (fire[i].explode >= fire[i].radio)
	{
		fire[i].nowx = rand() % WIDTH;
		fire[i].nowy = HEIGHT + rand() % 250 + 50;
		fire[i].endy = rand() % 100 + 10;
		fire[i].radio = rand() % 50 + 120;
		fire[i].explode = 0;
		int c[][3] = { {255, 0, 0}, {210, 190, 255}, {255, 120, 0}, {255, 0, 150}, {255, 240, 100}, {10, 255, 255}, {160, 10, 255}, {255, 200, 60} };
		int n = rand() % 8;
		fire[i].color = RGB(c[n][0], c[n][1], c[n][2]);
		fire[i].rgb[0] = c[n][0];
		fire[i].rgb[1] = c[n][1];
		fire[i].rgb[2] = c[n][2];
	}
	else fire[i].explode++;
}

5 绘制烟花

上升

绘制5个圆,大小从大到小,颜色从深到浅(增加rgb值)

for (int i = 0; i < MAXNUM; i++)
{
	if (fire[i].nowy > fire[i].endy)
	{
		for (int size = 5; size > 0; size--)
		{
			int temp[] = { fire[i].rgb[0], fire[i].rgb[1], fire[i].rgb[2] };
			for (int k = 0; k < 3; k++)
			{
				temp[k] += 50 * (5 - size);
				if (temp[k] > 255) temp[k] = 255;
			}
			setfillcolor(RGB(temp[0], temp[1], temp[2]));
			solidcircle(fire[i].nowx, fire[i].nowy + 15*(10 - size), size);
		}
	}
}

爆炸

重头戏!重头戏!重头戏!需要一些简(fù)单(zá)的数(gāo)学(děng)常(shù)识(xúe)!

颜色渐变的实现方式跟前面一样,只不过这里要用三角函数计算坐标,再用万有引力、抛物线等改变 y坐标,让它看得更真实!(牛顿:算你小子识相)

具体如何计算坐标,看我的文章,里面有说如何计算

然后是万有引力,大概需要高度乘以 0.98 ,这里就相当于减去 0.1

由于 easyx 坐标上方为 y = 0,所以,应该是:

y + (HEIGHT - y) * 0.1

再根据抛物线:y = x^2 ,修改一下就行了

else
{
	for (int a = 0; a < 360; a += 30)
	{
		for (int size = 5; size > 0; size--)
		{
			int x = cos(a * PI / 180.0) * (fire[i].explode + size * 10) + fire[i].nowx;
			int y = sin(a * PI / 180.0) * (fire[i].explode + size * 10) + fire[i].nowy + fire[i].radio / 2;
			int temp[] = { fire[i].rgb[0], fire[i].rgb[1], fire[i].rgb[2] };
			for (int k = 0; k < 3; k++)
			{
				temp[k] += 50 * (5 - size);
				if (temp[k] > 255) temp[k] = 255;
			}
			setfillcolor(RGB(temp[0], temp[1], temp[2]));
			solidcircle(x, y + (HEIGHT - y) * 0.1 + size * (size - 2), size);
		}
	}
}

效果展示

还挺好看的,不是吗?

完整代码

最后,把函数封装一下,main 函数写出来(有手就行!):


#include <graphics.h>
#include <math.h>
#include <time.h>
#include <stdio.h>
#define MAXNUM 15
#define WIDTH 640
#define HEIGHT 480
#define PI 3.1415926
struct Fire
{
	int nowx;
	int nowy;
	int endy;
	int radio;
	int explode;
	int rgb[3];
	COLORREF color;
}fire[MAXNUM];
void Init()
{
	for (int i = 0; i < MAXNUM; i++)
	{
		fire[i].nowx = rand() % WIDTH;
		fire[i].nowy = HEIGHT + rand() % 250 + 50;
		fire[i].endy = rand() % 100 + 10;
		fire[i].radio = rand() % 50 + 120;
		fire[i].explode = 0;
		int c[][3] = { {255, 0, 0}, {210, 190, 255}, {255, 120, 0}, {255, 0, 150}, {255, 240, 100}, {10, 255, 255}, {160, 10, 255}, {255, 200, 60} };
		int n = rand() % 8;
		fire[i].color = RGB(c[n][0], c[n][1], c[n][2]);
		fire[i].rgb[0] = c[n][0];
		fire[i].rgb[1] = c[n][1];
		fire[i].rgb[2] = c[n][2];
	}
}
void Draw()
{
	for (int i = 0; i < MAXNUM; i++)
	{
		if (fire[i].nowy > fire[i].endy)
		{
			for (int size = 5; size > 0; size--)
			{
				int temp[] = { fire[i].rgb[0], fire[i].rgb[1], fire[i].rgb[2] };
				for (int k = 0; k < 3; k++)
				{
					temp[k] += 50 * (5 - size);
					if (temp[k] > 255) temp[k] = 255;
				}
				setfillcolor(RGB(temp[0], temp[1], temp[2]));
				solidcircle(fire[i].nowx, fire[i].nowy + 15*(10 - size), size);
			}
		}
		else
		{
			for (int a = 0; a < 360; a += 30)
			{
				for (int size = 5; size > 0; size--)
				{
					int x = cos(a * PI / 180.0) * (fire[i].explode + size * 10) + fire[i].nowx;
					int y = sin(a * PI / 180.0) * (fire[i].explode + size * 10) + fire[i].nowy + fire[i].radio / 2;
					int temp[] = { fire[i].rgb[0], fire[i].rgb[1], fire[i].rgb[2] };
					for (int k = 0; k < 3; k++)
					{
						temp[k] += 50 * (5 - size);
						if (temp[k] > 255) temp[k] = 255;
					}
					setfillcolor(RGB(temp[0], temp[1], temp[2]));
					solidcircle(x, y + (HEIGHT - y) * 0.1 + size * (size - 2), size);
				}
			}
		}
	}
}
void Move()
{
	for (int i = 0; i < MAXNUM; i++)
	{
		if (fire[i].nowy > fire[i].endy)
		{
			fire[i].nowy -= 3;
		}
		else
		{
			if (fire[i].explode >= fire[i].radio)
			{
				fire[i].nowx = rand() % WIDTH;
				fire[i].nowy = HEIGHT + rand() % 250 + 50;
				fire[i].endy = rand() % 100 + 10;
				fire[i].radio = rand() % 50 + 120;
				fire[i].explode = 0;
				int c[][3] = { {255, 0, 0}, {210, 190, 255}, {255, 120, 0}, {255, 0, 150}, {255, 240, 100}, {10, 255, 255}, {160, 10, 255}, {255, 200, 60} };
				int n = rand() % 8;
				fire[i].color = RGB(c[n][0], c[n][1], c[n][2]);
				fire[i].rgb[0] = c[n][0];
				fire[i].rgb[1] = c[n][1];
				fire[i].rgb[2] = c[n][2];
			}
			else fire[i].explode++;
		}
	}
}
int main()
{
	srand(time(NULL));
	initgraph(640, 480);
	Init();
	BeginBatchDraw();
	while (true)
	{
		cleardevice();
		Draw();
		Move();
		FlushBatchDraw();
		Sleep(2);
	}
	EndBatchDraw();
	closegraph();
	return 0;
}

到此这篇关于c++实现动态烟花代码的文章就介绍到这了,更多相关C++烟花内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现动态烟花代码

本文链接: https://www.lsjlt.com/news/178420.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现动态烟花代码
    目录写在前面代码思路开始编写1 烟花结构体2 初始化烟花3 烟花上升4 烟花爆炸5 绘制烟花效果展示完整代码写在前面 首先,祝大家新年快乐! 即将迎来新的一年—&mdas...
    99+
    2023-01-28
    C++ 动态烟花 C++ 烟花
  • C++实现动态烟花效果
    目录一、前言二、代码fire.hmain.cppfire.cpp三、实现效果一、前言 C++实现的放烟花程序 用到了EGE图形库,没有的需要自行安装 可调项:背景图和背景音乐、粒子模...
    99+
    2024-04-02
  • python代码实现烟花实例
    实现代码如下: # -*- coding: utf-8 -*- import math, random,time import threading import tkinter ...
    99+
    2024-04-02
  • C语言实现烟花表白程序代码
    目录效果图烟花爆炸效果思路代码素材总结效果图 烟花爆炸效果思路 不能直接把烟花图片贴到窗口中,需要把烟花的像素点保存到二维数组中,以相同的半径大小把烟花输出到窗口中爆炸的位置,r...
    99+
    2024-04-02
  • Python粒子烟花动态效果实现
    目录效果展示实现代码剩下代码跨年倒计时还有18天?我已经开始整烟花了,虽然不是很好看吧,但是也能将就看看 这个的背景图,音乐,还有文字都是可以自己修改的哦 效果展示 依次导入本次...
    99+
    2023-01-03
    Python粒子烟花 Python动态烟花 Python烟花
  • python实现跨年烟花动态效果
    目录Pygame 绘制烟花的基本原理用Python和Tkinter设计烟花将烟花绽放转译成代码使用Tkinter模拟朋友们,有多久没放烟花了?今年你所在的地方允许放烟花么?既然我们不...
    99+
    2023-01-03
    python实现跨年烟花 python实现烟花效果 python烟花
  • Python 浪漫烟花实现代码全解
    1 旖旎风景 马上虎年了,也是我的生肖年,很激动!(不小心暴露了年龄,哈哈哈......),这里先给大家拜年啦,祝大家虎年快乐,虎年爆富!  首先一首原创诗分享给大家,...
    99+
    2024-04-02
  • python实现烟花的实例代码怎么编写
    本篇文章给大家分享的是有关python实现烟花的实例代码怎么编写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现代码如下:# -*- coding:&nb...
    99+
    2023-06-22
  • Python烟花代码,用Python制作一个烟花特效
    Python实现浪漫的烟花特效 现在很多地方都不能放烟花了,既然看不到, 那作为程序猿的我们还不能自己用代码做一个吗? 今天就带大家用代码做一个烟花特效吧。 pygame介绍 关于Pygam...
    99+
    2023-09-25
    python pygame 开发语言
  • 怎么用Python代码实现最炫的烟花
    这篇文章主要介绍“怎么用Python代码实现最炫的烟花”,在日常操作中,相信很多人在怎么用Python代码实现最炫的烟花问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python代码实现最炫的烟花”的疑...
    99+
    2023-06-29
  • c语言简单烟花代码怎么写
    要编写一个简单的 c 语言烟花代码,需要遵循以下步骤:包含头文件和库。定义常量和宏。创建粒子数据结构。声明全局变量。在 main() 函数中初始化烟花粒子。在游戏循环中更新粒子的位置和速...
    99+
    2024-04-13
    c语言 typedef
  • Python实现新年烟花秀的代码怎么写
    今天就跟大家聊聊有关Python实现新年烟花秀的代码怎么写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 先介绍下 Pygame 绘制烟花的基本原理,烟花从发射到绽放一共分...
    99+
    2023-06-22
  • 如何用JS代码实现文字烟花特效
    如何用JS代码实现文字烟花特效,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前我出了一个如何在网页里使用原生JS开发放烟花效果的教程。i...
    99+
    2024-04-02
  • 基于Python实现烟花效果的示例代码
    python烟花代码 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tki...
    99+
    2024-04-02
  • r语言怎么画动态烟花
    在R语言中,可以使用`animation`包来画动态烟花。下面是一个简单的例子:```R# 安装和加载animation包insta...
    99+
    2023-08-18
    r语言
  • C语言实战之浪漫烟花表白程序代码
    创建win32控制台应用程序,选择空项目。 创建完毕后,右击头文件新建一个头文件(.h)。名字写main.h 然后在源文件新建一个C++文件(.cpp)。名字写main.cpp 如图...
    99+
    2024-04-02
  • 含源码,用Python实现浪漫烟花
    目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在很多地方都不能放烟花了,既然看不到, 那作为程序猿的我们还不能自己用代码做一个吗? 今天就带大家用代码做一个烟花特效吧。 环境准备 这里使用到的...
    99+
    2023-09-12
    python pandas
  • 最炫Python烟花代码全解析
    导语: 除夕除夕,就是除去烦脑,迎接新的希望!在这里小编先祝大家除夕快乐,岁岁常欢笑,事事皆如意! 正文: 创建画布 setup和draw是p5.js的两个主函数,里头的crea...
    99+
    2024-04-02
  • 【python】python新年烟花代码【附源码】
            欢迎来到英杰社区https://bbs.csdn.net/topics/617804998         新年的钟声即将敲响,为了庆祝这个喜庆的时刻,我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何...
    99+
    2024-01-21
    python pygame 开发语言 人工智能
  • Python新年炫酷烟花秀代码
     先介绍下 Pygame 绘制烟花的基本原理,烟花从发射到绽放一共分为三个阶段: 1,发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同、颜色不同的点来模拟&l...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作