用C/C++写烟花代码制作新年祝福

龙年到了,用C语言给朋友们整个活吧。

新年祝福2.0 2024-02-08 18-49-18

 创作准备

写代码之前要安装easyx图形库,没有用过的小伙伴可以搜索下载一下。

那么让我们开始正文吧!

作者也是第一次写,顺序不太好,可能有的地方解释的不好,大家可以先翻到最后先理解main函数再从头看

先点击上面栏目中的项目   属性     高级   字符集  调为使用多字节字符集   确定    否则会报错

 代码讲解与展示

所需要的头文件

#include<stdio.h>
#include<easyx.h>//图形库头文件
#include<time.h>
#include<conio.h>
#include<mmsystem.h>
#include<windows.h>//开一个窗口
#include<graphics.h>
#pragma comment(lib,"winmm.lib")//可以添加音乐

接下来是对所需要图片的一个声明(图片有点多,但整体效果不错的)

IMAGE fire[6];//6种颜色的烟火
IMAGE flower[11][7];//11中不同形态的烟花,为了有绽放效果,每个烟花都有7种大小,从小到大展示
IMAGE l[6];
IMAGE hl[6];
IMAGE ll[6];
IMAGE bl[6];
IMAGE zl[6];//这几个带l的是龙的照片,表现龙的动图
IMAGE lt1[15];
IMAGE lt2[15];//这两个是15张祝福图片和表情包龙图

定义鼠标点击位置,增加互动性

MOUSEMSG m;

烟火上升和烟花绽放的结构体


struct Fire
{
	int x, y, hy,i;
	unsigned t1, t2, dt;
	bool istop;
};//烟火

struct Work
{
	int r,i;
	unsigned t1, t2,dt;
	bool isboom;
};//烟花

烟火飞天的函数


void fly(struct Fire* a)
{
	a->x = rand() % 780;//烟火在水平方向随机产生
	a->y = 450;
	a->hy = (rand() % 150)+50;//烟火最高位置随机
	a->istop = false;
	a->t1 = GetTickCount();
	a->dt = 10;
	a->i = (rand() % 5)+1;
	while (a->istop == false)
	{
		mciSendString("play two", 0, 0, 0);
		a->t2 = GetTickCount();
		if (a->t2 - a->t1 >= a->dt)
		{
			a->y -= 5;
			cleardevice();
			outtextxy(275, 200, "新年快乐");//中间一直显示新年快乐
		}
		if (a->y <= a->hy)//当道顶端
		{
			a->istop = true;
		}
		a->t1 = a->t2;
		putimage(a->x, a->y, &fire[a->i-1]);//放置烟火图片,y在减少,营造出烟火上升的感觉
	}
	mciSendString("stop two", 0, 0, 0);//定义的烟花上升时的声音写到后面会有这个定义
}

烟花爆炸函数

void boom(struct Fire* a, struct Work* b)
{
	fly(a);//引用烟花上升函数,上升到最高点就爆炸
	b->r = 0;
	b->isboom = false;
	b->t1 = GetTickCount();//获取时间
	int i=1;
	b->dt =150;
	b->i = (rand() % 11)+1;//产生随机数,选择不同烟花
	int j = 0;
	mciSendString("play three repeat", 0, 0, 0);
	while (b->isboom == false)
	{
		for (i = 1; i < 8; i++)
		{
			b->dt = 80*i;
			while (b->r != i)
			{
				b->t2 = GetTickCount();
				if (b->t2 - b->t1 >= b->dt)
				{
					cleardevice();
					outtextxy(275,200, "新年快乐");//一直显示新年快乐的字
					switch (b->i)//选择烟花种类
					{
					case 1: loadimage(&flower[0][i - 1], "flower.png", 26 * i * (j+1), (j+1)* 26 * i);//下载图片大小不同,出现绽放效果
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[0][i - 1]); break;//展示效果
					case 2:loadimage(&flower[1][i - 1], "flower1.png", 26 * i * (j+1), (j+1)* 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[1][i - 1]); break;
					case 3:loadimage(&flower[2][i - 1], "flower2.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - i * 13 * (j+1), &flower[2][i - 1]); break;
					case 4:loadimage(&flower[3][i - 1], "flower3.png", 26 * i * (j+1), (j + 1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[3][i - 1]); break;
					case 5:loadimage(&flower[4][i - 1], "flower4.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[4][i - 1]); break;
					case 6:loadimage(&flower[5][i - 1], "flower5.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[5][i - 1]); break;
					case 7:loadimage(&flower[6][i - 1], "flower6.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[6][i - 1]); break;
					case 8:loadimage(&flower[7][i - 1], "flower7.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[7][i - 1]); break;
					case 9:loadimage(&flower[8][i - 1], "flower8.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[8][i - 1]); break;
					case 10:loadimage(&flower[9][i - 1], "flower9.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[9][i - 1]); break;
					case 11:loadimage(&flower[10][i - 1], "flower10.png", 26 * i * (j+1), (j+1) * 26 * i);
						putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[10][i - 1]); break;
					}
					outtextxy(275,200, "新年快乐");//依旧显示着新年快乐
					Sleep(20);
					b->r = i;
				}
			}
			b->t2 = b->t1;
		}
		if (b->r == i - 1)
		{
			b->isboom = true;//烟花绽放完,结束
			Sleep(30);
			cleardevice();//清屏
			outtextxy(275,200, "新年快乐");
		}
	}
}

下面是烟花结束后的祝福语

void word(int a)
{
	cleardevice();
	settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));//产生随机颜色
	settextstyle(40, 0, "华文琥珀");
	outtextxy(60, 150, "在这辞旧迎新的美好时刻");//展示文字,可以改成大家想要的其他祝福
	settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
	outtextxy(60, 220, "我向大家致以最诚挚的新年祝福");
	settextcolor(YELLOW);
	settextstyle(25, 0, "华文彩云");
	outtextxy(500, 450, "点击此处,产生随机祝福");
	settextstyle(60, 0, "楷体");
	switch (a)//依次显示祝大家新年快乐
	{
	case 8:;
	case 7:outtextxy(500, 300, "乐");
	case 6:outtextxy(440, 300, "快");
	case 5:outtextxy(380, 300, "年");
	case 4:outtextxy(320, 300, "新");
	case 3:outtextxy(260, 300, "家");
	case 2:outtextxy(200, 300, "大");
	case 1:outtextxy(140, 300, "祝");
	}
}

下面是随机祝福产生的函数


void zhufu(int a)
{
	settextstyle(30, 0, "华文琥珀");//字体是华文琥珀大家可以改成自己喜欢的
	settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));//随机颜色
	switch (a)//随机选择一条祝福
	{
	case 1:outtextxy(30, 200, "旧岁已展千重锦,新年再进百尺竿"); break;
	case 2:outtextxy(30, 200, "愿新年胜旧年,欢愉且胜意,万事尽可期"); break;
	case 3:outtextxy(30, 200, "辞别玉兔迎金龙,新年气象乐融融"); break;
	case 4:outtextxy(30, 200, "新年的钟声即将敲响,我的祝福如约而至"); break;
	case 5:outtextxy(30, 200, "愿所有鸡毛蒜皮,换作风和日丽"); break;
	case 6:outtextxy(30, 200, "新的一年,愿山河无恙,人间皆安"); break;
	case 7:outtextxy(30, 200, "烟火向星辰,所愿皆成真"); break;
	case 8:outtextxy(30, 200, "龙年好运,福寿双全"); break;
	case 9: outtextxy(30, 200, "金龙翱翔,好运连连"); break;
	case 10:outtextxy(30, 200, "龙年大运,财运亨通"); break;
	case 11:outtextxy(30, 200, "潜龙腾跃而起,便是人间春色万里"); break;
	case 12:outtextxy(30, 200, "年年景不改,岁岁人常在"); break;
	case 13:outtextxy(30, 200, "前方万丈荣光,身后温暖一方"); break;
	}
}

产生动态龙的函数(就是6张不同姿态的龙循环播放几遍)

void Long(IMAGE* a)
{
	int i,j=0;
	for (i = 0; i < 6; i++)
	{
		putimage(450, 300, a+i);
		j++;
		Sleep(200);
		if (i ==5&&j<=20)
		{
			i = 0;
		}
	}
}

图片有点多,我给它写成函数,这样就可以收起来

void tupian()
{
	loadimage(&fire[0], "fire.png", 20, 50);
	loadimage(&fire[1], "fire1.png", 20, 50);
	loadimage(&fire[2], "fire2.png", 20, 50);
	loadimage(&fire[3], "fire3.png", 20, 50);
	loadimage(&fire[4], "fire4.png", 20, 50);
	loadimage(&fire[5], "fire5.png", 20, 50);
	loadimage(&l[0], "l6.jpg", 300, 100);
	loadimage(&l[1], "l5.jpg", 300, 100);
	loadimage(&l[2], "l4.jpg", 300, 100);
	loadimage(&l[3], "l3.jpg", 300, 100);
	loadimage(&l[4], "l2.jpg", 300, 100);
	loadimage(&l[5], "l1.jpg", 300, 100);
	loadimage(&hl[0], "hl6.jpg", 300, 100);
	loadimage(&hl[1], "hl5.jpg", 300, 100);
	loadimage(&hl[2], "hl4.jpg", 300, 100);
	loadimage(&hl[3], "hl3.jpg", 300, 100);
	loadimage(&hl[4], "hl2.jpg", 300, 100);
	loadimage(&hl[5], "hl1.jpg", 300, 100);
	loadimage(&ll[0], "ll6.jpg", 300, 100);
	loadimage(&ll[1], "ll5.jpg", 300, 100);
	loadimage(&ll[2], "ll4.jpg", 300, 100);
	loadimage(&ll[3], "ll3.jpg", 300, 100);
	loadimage(&ll[4], "ll2.jpg", 300, 100);
	loadimage(&ll[5], "ll1.jpg", 300, 100);
	loadimage(&bl[0], "bl6.jpg", 300, 100);
	loadimage(&bl[1], "bl5.jpg", 300, 100);
	loadimage(&bl[2], "bl4.jpg", 300, 100);
	loadimage(&bl[3], "bl3.jpg", 300, 100);
	loadimage(&bl[4], "bl2.jpg", 300, 100);
	loadimage(&bl[5], "bl1.jpg", 300, 100);
	loadimage(&zl[0], "zl6.jpg", 300, 100);
	loadimage(&zl[1], "zl5.jpg", 300, 100);
	loadimage(&zl[2], "zl4.jpg", 300, 100);
	loadimage(&zl[3], "zl3.jpg", 300, 100);
	loadimage(&zl[4], "zl2.jpg", 300, 100);
	loadimage(&zl[5], "zl1.jpg", 300, 100);
	loadimage(&lt1[0], "lt11.jpg", 300, 600);
	loadimage(&lt1[1], "lt12.jpg", 300, 600);
	loadimage(&lt1[2], "lt13.jpg", 300, 600);
	loadimage(&lt1[3], "lt14.jpg", 300, 600);
	loadimage(&lt1[4], "lt15.jpg", 300, 600);
	loadimage(&lt1[5], "lt16.jpg", 300, 600);
	loadimage(&lt1[6], "lt17.jpg", 300, 600);
	loadimage(&lt1[7], "lt18.jpg", 300, 600);
	loadimage(&lt1[8], "lt19.jpg", 300, 600);
	loadimage(&lt1[9], "lt110.jpg", 300, 600);
	loadimage(&lt1[10], "lt111.jpg", 300, 600);
	loadimage(&lt1[11], "lt112.jpg", 300, 600);
	loadimage(&lt1[12], "lt113.jpg", 300, 600);
	loadimage(&lt1[13], "lt114.jpg", 300, 600);
	loadimage(&lt1[14], "lt115.jpg", 300, 600);
	loadimage(&lt2[0], "lt21.jpg", 300, 600);
	loadimage(&lt2[1], "lt22.jpg", 300, 600);
	loadimage(&lt2[2], "lt23.jpg", 300, 600);
	loadimage(&lt2[3], "lt24.jpg", 300, 600);
	loadimage(&lt2[4], "lt25.jpg", 300, 600);
	loadimage(&lt2[5], "lt26.jpg", 300, 600);
	loadimage(&lt2[6], "lt27.jpg", 300, 600);
	loadimage(&lt2[7], "lt28.jpg", 300, 600);
	loadimage(&lt2[8], "lt29.jpg", 300, 600);
	loadimage(&lt2[9], "lt210.jpg", 300, 600);
	loadimage(&lt2[10], "lt211.jpg", 300, 600);
	loadimage(&lt2[11], "lt212.jpg", 300, 600);
	loadimage(&lt2[12], "lt213.jpg", 300, 600);
	loadimage(&lt2[13], "lt214.jpg", 300, 600);
	loadimage(&lt2[14], "lt215.jpg", 300, 600);
}

最后就是main函数啦

int main()
{
	initgraph(800,500);
	struct Fire red;
	struct Work work ;
	settextstyle(50, 0, "楷体");
	settextcolor(YELLOW);
	int i = 1;
	tupian();//加载图片
	while (i<=18)//这个是烟花,18是放18个烟花
	{
		mciSendString("open fly123.mp3 alias two", NULL, 0, NULL);//烟花的声音
		mciSendString("open boom123.mp3 alias three", NULL, 0, NULL);
		boom(&red,&work);
		Sleep(500);
		mciSendString("stop three", 0, 0, 0);
		mciSendString("seek two to start", 0, 0, 0);
		mciSendString("seek three to start", 0, 0, 0);
		i++;
	}
	cleardevice();//烟花部分结束
	mciSendString("open new_year.mp3 alias one", NULL, 0, NULL);//开始歌曲,文字图片祝福开始
	mciSendString("play one repeat", NULL, 0, NULL);
	i = 1;
	while (i<=8) {
		word(i);
		i++;
		Sleep(800);
	}//产生“祝大家新年快乐”
	while (1)
	{
		m = GetMouseMsg();
		if (m.uMsg == 513)//如果鼠标点击
		{
			if (m.x >= 500 && m.x <= 800 && m.y >= 450 && m.y <= 500)如果鼠标点击的地方是这个范围
			{
				cleardevice();
				int w = rand() % 13, L = rand() % 5;//产生两个随机数
				zhufu(w+1);
				switch (L)//随机出现个龙
				{
				case 0:Long(l); break;
				case 1:Long(hl); break;
				case 2:Long(zl); break;
				case 3:Long(ll); break;
				case 4:Long(bl); break;
				}
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(500, 450, "点击此处,再换一句祝福");
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(50, 400, "龙年要发祝福");
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(50, 450, "龙年要发龙图");
			}
			if (m.x >= 30 && m.x <= 225 && m.y >= 400 && m.y <= 430)
			{
				cleardevice();
				int t1 = rand() % 15;
				putimage(200, -60, &lt1[t1]);//随机出现图片
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(500, 450, "点击此处,获得随机祝福");
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(50, 400, "龙年要发祝福");
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(50, 450, "龙年要发龙图");
			}
			if (m.x >= 30 && m.x <= 225 && m.y >= 450 && m.y <= 480)
			{
				cleardevice();
				int t2 = rand() % 15;
				putimage(200, -60, &lt2[t2]);
				settextcolor(YELLOW);
				settextstyle(25, 0, "华文彩云");
				outtextxy(500, 450, "点击此处,获得随机祝福");
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(50, 400, "龙年要发祝福");
				settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
				settextstyle(25, 0, "华文彩云");
				outtextxy(50, 450, "龙年要发龙图");
			}
		}
	}
}

 所用图片与音频

 以下是所用图片,有点多,音频有三个不知道怎么添加,大家自己找一下吧,找一个烟花上升的声音命名为fly123一个烟花爆炸的声音命名为boom123一个喜庆的背景音new_year

 小结

最后,祝大家龙年快乐!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值