easyx图形库制作新年烟花(附图片资源)

2023-11-14

目录

先看效果:

代码:


 

先看效果:

map

                看吧是不是非常好看,哈哈,接下来就直接上代码!

这个是图形库的坐标图

代码:

#include<stdio.h>
#include<graphics.h>
#include<Windows.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<math.h>
#include<mmsystem.h>
//对于静态库我是在项目属性里面导入了
//#pragma commoment(lib,"winmm.lib")

#define fire 8
#define pi 3.1415926
struct jet
{
	int x, y;
	int h;
	int step;
	bool show;
	IMAGE kk[2];
	byte n : 1;//定义一个byte类型,其字段为1,意思是这个类型只有两种要么0要么1,这里可以去实现上面两个图片的交替,实现烟花弹闪来闪去
}j[fire];//定义烟花弹的结构体与数量

struct f
{
	int x, y;
	int cenx, ceny;
	int r;
	int maxr;
	int w, h;
	DWORD pixel[240][240];
	bool show;
	bool flower;
}h[fire];定义烟花的结构体与数量

void firedata(int i)//初始化烟花的结构体内容
{
	h[i].cenx = 120;//中心点横坐标
	h[i].ceny = 120;//中心点纵坐标
	h[i].maxr = 120;//最大烟花半径
	h[i].r = 0;//初始化半径为0
	h[i].w = 240;//烟花图片的宽度
	h[i].h = 240;//烟花图片的高度
	h[i].show = false;
	h[i].flower = false;//布尔变量
}
void load()
{

	IMAGE jk,t;
	loadimage(&jk, "烟花.jpg", 3120, 240);//加载烟花图片
	for (int c = 0; c < fire; c++)
	{
		firedata(c);//每一个烟花初始化
		SetWorkingImage(&jk);//对图片进行操作
		getimage(&t, c * 240, 0, 240, 240);//获取要操作的图片到t中
		SetWorkingImage(&t);//对图片t进行操作
		for (int i = 0; i < 240;i++)
		{
			for (int j = 0; j < 240; j++)
			{
				h[c].pixel[i][j] = getpixel(i, j);//获取图片t的像素点到烟花上面
			}
		}
	}	
	IMAGE jj;
	loadimage(&jj, "all.jpg", 200, 50);
	SetWorkingImage(&jj);
	for (int i = 0; i < fire; i++)
	{
		int ra = rand() % 5;
		getimage(&j[i].kk[0], ra*20, 0, 20, 50);//获取烟花弹的图片 暗
		getimage(&j[i].kk[1], ra*20+ 100, 0, 20, 50);//获取烟花弹图片 亮
		j[i].show = false;
	}
	SetWorkingImage();//把操作界面转换到主界面去
}
void creat()//创造烟花弹
{
	int i = rand() % fire;
	if (j[i].show == false)//要进行判断,如果烟花展示为false那么就创造一个
	{
		j[i].x = rand() % (getwidth()-20);
		j[i].y = -rand() % 50+getheight();
		j[i].h = rand() %(int) (getheight() / 2);
		j[i].step = 4 + rand() % 3;
		j[i].show = true;//令其布尔变量为true
	}
}
void launch()//发射烟花弹
{
	for (int i = 0; i < fire; i++)
	{
		if (j[i].show)
		{
			putimage(j[i].x, j[i].y, &j[i].kk[j[i].n],SRCINVERT);			
			if (j[i].y > j[i].h)//如果烟花弹的纵坐标大于最大高度就进行烟花弹上升
			{
				j[i].y -=j[i].step;
				j[i].n++;
			}
			putimage(j[i].x, j[i].y, &j[i].kk[j[i].n], SRCINVERT);

			if (j[i].y <= j[i].h)
			{
				j[i].show = false;//如果烟花弹到达最高点,那么就false
				setfillcolor(BLACK);
			solidrectangle(j[i].x, j[i].y, j[i].x+20, j[i].y +44+j[i].step );
			h[i].x = j[i].x;
			h[i].y = j[i].y;
			h[i].show = true;//此时开始绘制烟花
			}		
		}
	}
}
void bloom(DWORD *p)//画烟花绽放
{
	for (int i = 0; i < fire; i++)
	{
		if (h[i].show == true)
		{
			if (h[i].r < h[i].maxr) {
				h[i].r++;//每次半径+1
				h[i].flower = true;//
			}
			if (h[i].r >= h[i].maxr)
			{
				firedata(i);//如果半径超过最大半径就把这个烟花回归到初始化,回到奇点
			}
		}
		if (h[i].flower == true)
		{
			for (double a = 0; a <= 2 * pi; a+=0.01)//画一个圆模板的像素点
			{
				int x = h[i].cenx + h[i].r * cos(a);
				int y= h[i].ceny + h[i].r * sin(a);
				if (x > 0 && x < h[i].w &&y>0 && y < h[i].h)//判断范围
				{
					int wx= h[i].x +  h[i].r * cos(a);//获取此时的界面坐标
					int wy= h[i].y  + h[i].r * sin(a);
					if (wx > 0 && wx < getwidth() && wy < getheight() && wy>0)
					{
						p[wy * getwidth() + wx] = BGR(h[i].pixel[x][y]);//以此界面坐标画出像素点
					}
				}
			}
		}

	}
}
void backgroundsound()//背景音乐
{
	mciSendString("open mm.mp3 alias music", 0, 0, 0);
	mciSendString("play music", 0, 0, 0);
}
void welcome()//开始的欢迎
{
	int x, y;
	int i = 0;
	while (i < 50) {
		BeginBatchDraw();
		x = 300 + 100*(int)cos(i*2);
		y = 300 +100*(int) sin(i*2);
		cleardevice();
		settextcolor(YELLOW);
		settextstyle(i, 0, "华文行楷");
		setbkmode(TRANSPARENT);	
		outtextxy(x, y, "新年快乐");
		i++;
		Sleep(50);
		FlushBatchDraw();
	}
	EndBatchDraw();
	Sleep(2 * 1000);
	cleardevice();
	backgroundsound();//导入背景音乐
}
int main()
{
	initgraph(1500, 700);
	srand((unsigned)time(0)+clock());//设置随机数
	welcome(); 
	load();
	DWORD* p=GetImageBuffer();//获取窗口的内存指针
	while (1)
	{
		
		for (int i = 0; i < getwidth()/5*4; i++)//这个是用来消除像素点的,就是擦去像素点变回黑色,这可以使得烟花慢慢消失
		{
			for (int k = 0; k < 6; k++) {
				int x = rand() % getwidth();
				int y = rand() % getheight();
				if (y < getheight())
				{
					p[y * getwidth() + x] =BLACK;//设置像素点为黑色
				}
			}
		}
		creat();
		launch();
		bloom(p);
		Sleep(12);//停机12毫秒,这里可以去用时间获取函数来代替,效果会比较好
	}
	system("pause");
}

图片资源: 

 

祝大家新年快乐!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

easyx图形库制作新年烟花(附图片资源) 的相关文章

随机推荐

  • 【云原生之Docker实战】使用Docker部署File Manager文件管理系统

    云原生之Docker实战 使用Docker部署File Manager文件管理系统 一 File Manager简介 1 File Manager简介 2 File Manager特点 二 检查宿主机系统版本 三 检查本地docker环境
  • 微软禁俄下载、开源投毒攻击、Rust不会重写Linux、开放原子峰会7月举办

    WeOpen Insight 是腾源会推出的 开源趋势与开源洞见 内容专栏 不定期为读者呈现开源圈内的第一手快讯 优质工具盘点等 洞察开源技术发展的风向标 预见未来趋势 1 开源社区新闻 1 Linus Torvalds 称并未用 Rust
  • java计算月份所在的季度

    java计算月份所在的季度 月份 2 3 下班的时候无意中看到同事写的根据月份计算季度的代码 获取两个时间内的季度集合 返回结果说明 quarterList1 2019 1 quarterList2 2019年1季度 param start
  • IDEA Writing classes... 比较慢

    IDEA配置修改如下 1 File gt Settings 2 Build Execution Deployment gt Compiler Build process heap size 配置为 2048 3 Build Executio
  • hex转换成C语言源程序吗,第6节:把.c源代码编译成.hex机器码的操作流程

    从业十年 教你单片机入门 第6讲 第一步 打开一个现成的工程 双击桌面 keil uVision4 的图标启动keil软件 如果发现此软件默认打开了一个之前已经存在的工程 请点击上面 Project 选项 在弹出的下拉菜单中选择 Close
  • html js实现分页代码,js前端分页实现

    最近做的一个项目 整个页面的数据更新要纯ajax实现 没办法 连分页都得由我来写了 基本思路还是像后台那样实现分页 后台实现分页其实也就是用后台的程序来处理那段分页的模版 于是我想 下面是分页的模版 1 代码 JavaScript 代码 h
  • 常见的颜色空间概念

    文章目录 1 RGB颜色空间 2 HSV颜色空间 3 YCbCr颜色空间 4 Lab颜色空间 5 YUV颜色空间 1 RGB颜色空间 是最常见的面向硬件设备的彩色模型 它是人的视觉系统密切相连的模型 根据人眼结构 所有的颜色都可以看做是3种
  • 2017年阳光私募基金一季度报告

    2017年阳光私募基金一季度报告 时间 2017 05 09 10 14 00 来源 网友评论 0 条 一 证券类私募行业大数据 一 证券类私募行业大数据 一 规模篇 1 私募基金管理规模达11 90万亿 证券类规模为2 63万亿 2 百亿
  • C语言eigen存为txt文件,如何使用线性代数的C模板库Eigen?

    我有一个矩阵的图像处理算法 我有自己的矩阵运算代码 乘法 逆 但我使用的处理器是ARM Cortex A8处理器 它有NEON协处理器进行矢量化 因为矩阵运算是SIMD操作的理想情况 我要求编译器 mfpu neon mfloat abi
  • webrtc音频引擎之audio_processing介绍

    audio processing模块为语音处理的精华 包含音频的回音处理 降噪处理 自动增益处理等音频的核心处理业务算法 静音检测在另外一个模块 不知道新版与这基本算法放到了同一个模块木有 模块结构为 1 aec和aecm 也就是回音消除
  • 【Kubernetes 008】多种类型控制器区别及实际操作详解(RS,Deployment,DaemonSet,Job,ConJob)

    Pod是k8s中的基本结构 前面我们已经创建过一个 但是生产环境中往往不需要我们自己去创建pod 而是通过创建管理pod的控制器而达到自动批量管理pod的目的 这一节我们就一起来看看k8s中有哪些控制器 以及这些控制器的一些基本操作 我是T
  • Spring配置DataSource数据源

    在Spring框架中有如下3种获得DataSource对象的方法 1 从JNDI获得DataSource 2 从第三方的连接池获得DataSource 3 使用DriverManagerDataSource获得DataSource 一 从J
  • flask笔记

    python中的web框架 a socket服务端 b 路由转发 c 模板渲染 Django 同步框架 a 用的别人的 bc自己写的 Flask 同步框架 a 用的别人的 b自己写的 c用的别人的 jinja2 Tornado 异步框架 a
  • 毕业设计 单片机LSRB算法的走迷宫小车 - 嵌入式 stm32

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 马达驱动器 L298N Mpu 6050 60 RPM 直流电机 红外传感器 Arduino Pro mini 5 软件说明 LSRB 算法 6 最后 0 前言 这两年
  • JavaSE进阶

    1 使用集成开发工具eclipse 1 1 java的集成开发工具很多 包括 eclipse Intellij IDEA netbeans eclipse IBM开发的 eclipse翻译为 日食 寓意吞并SUN公司 SUN是太阳 最终没有
  • 坐标转换、地球转火星、百度转火星(python版)

    一 坐标介绍 1 地球坐标 GPS WGS84 地理坐标系统 2 火星坐标 GCJ 02 投影坐标系统 中国自己在WGS84基础上加密而成 3 地球坐标 BD 09 投影坐标系统 百度地图使用 二 坐标转换 import math pi 3
  • 掌握MySQL分库分表(二)Mysql数据库垂直分库分表、水平分库分表

    文章目录 垂直分表 拆分方法 举例 垂直分库 水平分表 水平分库 小结 垂直角度 表结构不一样 水平角度 表结构一样 垂直分表 需求 商品表字段太多 每个字段访问频次不 样 浪费了IO资源 需要进行优化 也就是 大表拆小表 基于列字段进行的
  • Mongodb创建用户角色

    文章目录 一 Mongodb数据库用户角色 二 创建用户 其权限有哪些 1 创建用户语法格式 2 字段解析 三 创建用户实列 总结 一 Mongodb数据库用户角色 MongoDB采用基于角色的访问控制 RBAC 来确定用户的访问 授予用户
  • 博弈论——组合游戏(Bash和nim)

    博弈论1 组合游戏 特征 两个玩家 一个状态集合 游戏规则是指明玩家从一个状态可以移动到哪些状态 玩家轮流进行移动 如果当前处于的状态无法移动 则说明游戏结束 大部分时候 无论玩家如何选择 游戏会在有限步操作内结束 通常的解题步骤 首先设置
  • easyx图形库制作新年烟花(附图片资源)

    目录 先看效果 代码 先看效果 map 看吧是不是非常好看 哈哈 接下来就直接上代码 这个是图形库的坐标图 代码 include