#include<stdio.h>
#include<graphics.h>//之前要先安装EasyX,不然导入这个包会报错
#include<conio.h>
#include<math.h>
#include<time.h>//随机数
#include<mmsystem.h>//多媒体设备接口的头文件
#pragma comment(lib,"winmm.lib")//Media control interface
//这条指令和你在工程中添加"winmm.lib"的功能一样,告诉编译器要导入winmm库
#define NUM 13 //在整个屏幕内,最多出现13个烟雾弹
void Welcome();//进入程序运行界面
void init(int i);//初始化每个小烟花的属性值:比如x,y坐标值,是否发射等
void Load();//加载图片
void Choose(DWORD &t1);//选择要发送的烟花弹
void shoot();//发射烟花弹
void Show(DWORD*); // 绽放烟花
void Style(DWORD& st1);
void write(DWORD&);
void clear(DWORD*);
struct Jet
{
int x, y;//烟花弹的坐标
int hx, hy;//最高点的坐标
int height;//高:y-hy
bool isshot;//是否发射
DWORD t1, t2, dt;//DWORD是无符号的,相当于unsigned long ,
//用t1,t2,dt控制速度
IMAGE Img[2];//存放图片的数组
byte n : 1;//下标 位段:/:指一个位来存放n
//位段:(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间
}jet[NUM];//定义结构体数组
struct Fire
{
int r;//当前爆炸半径
int max_r;//爆炸中心距离边缘最大半径
int x, y;//爆炸中心在窗口的坐标
int cen_x,cen_y;//爆炸中心相对图片左上角的坐标
int width;//图片的宽度
int height;//图片的高度
int xy[240][240];//储存图片像素点
bool isshow;//是否显示
bool isdraw;//是否画出
DWORD t1, t2, dt;//绽放速度
}fire[NUM];
int main()
{
initgraph(1000, 600);//初始化一个窗口
srand((unsigned int)time(NULL)); //为了得到不一样的随机数
Welcome();
Load();
DWORD t1 = timeGetTime(); // 筛选烟花计时
DWORD st1 = timeGetTime(); // 播放花样计时
DWORD tm = timeGetTime(); //字体播放计时
DWORD tn;
DWORD TP;
DWORD TC;
DWORD* pMem = GetImageBuffer(); // 获取窗口显存指针,对每个像素点进行操作
for (int i = 0; i < NUM; i++)
{
init(i);//初始化每个小烟花的相关数据
}
Load(); // 将烟花图片信息加载进相应结构中
IMAGE img;
loadimage(&img, "./file/情侣图片.jpg", 150, 266);
BeginBatchDraw(); // 开始批量绘图
while (!_kbhit())
{
Sleep(10);
clear(pMem);
TC = timeGetTime();
if (TC - t1 > 0)
{
putimage(850, 334, &img);
}
Choose(t1);
shoot();
Show(pMem);
Style(st1);
FlushBatchDraw(); // 显示前面的所有绘图操作
}
getchar();
return 0;
}
void Welcome()//程序运行一开始进入的界面
{
//设置文本(文字)颜色
mciSendString("open ./file/小曲儿-小幸运.mp3 alias music ", 0, 0, 0);//alias取别名
mciSendString("play music repeat", 0, 0, 0);
mciSendString("open ./file/录音1.mp3 alias music1 ", 0, 0, 0);//alias取别名
mciSendString("play music1", 0, 0, 0);
settextcolor(YELLOW);
for (int i = 0; i < 50; i++)
{
int x = 200 + int(180 * sin(2 * 3.1415926*i / 60));
//500指圆心x坐标,180指半径
int y = 100 + int(180 * cos(2 * 3.1415926*i / 60));
//300指圆心x坐标,180指半径
cleardevice();
settextstyle(i, 0, "华文彩云");//中间为0时它的宽为自适应
outtextxy(x, y-80, "其实我的心里一直都是你");//在指定的位置输出文本
outtextxy(x+100, y+100, "我想对你说:");
Sleep(25);
}
Sleep(2000);
mciSendString("open ./file/录音2.mp3 alias music2 ", 0, 0, 0);//alias取别名
mciSendString("play music2", 0, 0, 0);
cleardevice();
settextstyle(25, 0, "楷体");
outtextxy(300, 150, "原来你是我最想留住的幸运");
Sleep(3000);
outtextxy(300, 200, "原来我们和爱情曾经靠的那么近");
Sleep(3000);
outtextxy(300, 250, "那为我对抗世界的决定");
Sleep(3000);
outtextxy(300, 300, "那陪我淋的雨");
Sleep(2000);
outtextxy(300, 350, "一幕幕都是你");
Sleep(2000);
outtextxy(300, 400, "一层不染的真心.");
Sleep(1000);
outtextxy(550, 450, "---小幸运");
}
//加载图片
void Load()
{
/****储存烟花的像素点图片****/
IMAGE fImg, gImg;
loadimage(&fImg,"./file/flower.jpg",3120,240);
for (int i = 0; i < NUM; i++)
{
SetWorkingImage(&fImg);
getimage(&gImg, i * 240, 0, 240, 240);
SetWorkingImage(&gImg);
for (int a = 0; a < 240; a++)
{
for (int b = 0; b < 240; b++)
{
fire[i].xy[a][b] = getpixel(a, b);//获取点的颜色
}
}
}
IMAGE jetImg;//存放图片
loadimage(&jetImg,"./file/shoot.jpg",200,50);//加载图片,将图片保存到jetImage对象里面去
//[2]拆分图片
for (int i = 0; i < NUM; i++)
{
SetWorkingImage(&jetImg);//设置当前的设备,当前设备设为jetImg
int n = rand() % 5;
getimage(&jet[i].Img[0],n*20,0,20,50);//得到的是暗色图片
//getimage()从当前设备获取图片
//getimage()参数1指将得到的拆分出的图片存放的位置
//参数2,3指得到的图片在原图片左上角的位置
//参数4,5指的是新的到的图片的宽和高 下面类推
getimage(&jet[i].Img[1], (n+5) * 20, 0, 20, 50);//得到的是明亮图片
}
SetWorkingImage(NULL);//重将当前设备设置为窗口
}//设置烟花小图片
//初始化,为程序做一些提前的准备
void init(int i)
{
// 分别为:烟花中心到图片边缘的最远距离、烟花中心到图片左上角的距离 (x、y) 两个分量
int r[13] = { 120,120,155,123,130,147,138,138,130,135,140,132,155 };
int x[13] = { 120,120,110,117,110,93,102,102,110,105,100,108,110 };
int y[13] = { 120,120,85,118,120,103,105,110,110,120,120,104,85 };
//从这里可以看出中心坐标相对图片相对居中
/**** 初始化烟花 *****/
fire[i].x = 0;//烟花中心的坐标
fire[i].y = 0;
fire[i].width = 240;
fire[i].height = 240;
fire[i].max_r = r[i];//最大半径
fire[i].cen_x = x[i];//爆炸中心相对图片左上角坐标
fire[i].cen_y = y[i];
fire[i].isshow = false;
fire[i].isdraw = false;
fire[i].dt = 5;//绽放时间间隔
fire[i].t1 = timeGetTime();
fire[i].r = 0;//从零开始绽放
/**** 初始化烟花弹 *****/
jet[i].x = 0;
jet[i].y = 0;
jet[i].hx = 0;
jet[i].hy = 0;
jet[i].height = 0;
jet[i].t1 = GetTickCount();//获取系统时间
jet[i].dt = rand() % 5;//发射速度时间间隔
jet[i].n = 0;
jet[i].isshot = false;
}//烟花释放效果图
void Choose(DWORD &t1)//选择烟花弹发射
{
DWORD t2 = timeGetTime();//获取系统时间;
if (t2 - t1 > 100) //每100ms产生一个烟花弹
{
int n = rand() % 20;//因为产生的随机数不同,所以只能产生唯一的烟花弹
if (n < 13 && jet[n].isshot == false&&fire[n].isshow==false)
{
/***重置烟花弹,预备发射***/
jet[n].x = rand() % 1000;
jet[n].y = rand() % 50 + 550;
jet[n].hx = jet[n].x;
jet[n].hy = rand() % 300;
jet[n].height = jet[n].y - jet[n].hy;
jet[n].isshot = true;
putimage(jet[n].x, jet[n].y, &jet[n].Img[jet[n].n], SRCINVERT);
/**** 播放每个烟花弹的声音 *****/
char c1[50], c2[30], c3[30];
sprintf_s(c1, "open ./file/shoot.mp3 alias s%d", n);
sprintf_s(c2, "play s%d", n);
sprintf_s(c3, "close n%d", n);
mciSendString(c3, 0, 0, 0);
mciSendString(c1, 0, 0, 0);
mciSendString(c2, 0, 0, 0);
}
t1 = t2;
}
}
void shoot()
{
/**** 烟花弹的上升 *****/
for (int i = 0; i < NUM; i++)
{
jet[i].t2 = timeGetTime();
if (jet[i].t2 - jet[i].t1 >= jet[i].dt&&jet[i].isshot==true)
{
putimage(jet[i].x, jet[i].y, &jet[i].Img[jet[i].n],SRCINVERT);//SRCINVERT保证图片是透明的
if (jet[i].y >= jet[i].hy)
{
jet[i].n++;
jet[i].y -= 5;
}
putimage(jet[i].x, jet[i].y, &jet[i].Img[jet[i].n], SRCINVERT);
/**** 上升到高度的 3 / 4,减速 *****/
if ((jet[i].y - jet[i].hy) * 4 < jet[i].height)
jet[i].dt = rand() % 4 + 10;
/**** 上升到最大高度 *****/
if (jet[i].y <= jet[i].hy)
{
// 播放爆炸声
char c1[50], c2[30], c3[30];
sprintf_s(c1, "open ./file/bomb.wav alias n%d", i);
sprintf_s(c2, "play n%d", i);
sprintf_s(c3, "close s%d", i);
mciSendString(c3, 0, 0, 0);
mciSendString(c1, 0, 0, 0);
mciSendString(c2, 0, 0, 0);
putimage(jet[i].x, jet[i].y, &jet[i].Img[jet[i].n], SRCINVERT); // 擦掉烟花弹
fire[i].x = jet[i].hx + 10; // 在烟花弹中间爆炸
fire[i].y = jet[i].hy; // 在最高点绽放
fire[i].isshow = true; // 开始绽放
jet[i].isshot = false; // 停止发射
}
jet[i].t1 = jet[i].t2;
//产生一个烟花弹发送一个,产生一个烟花弹发送一个
}
}
}
void Show(DWORD* pMem)
{
//烟花各阶段绽放时间间隔,制作变速绽放效果
int drt[16] = { 5, 5, 5, 5, 5, 6, 25, 25, 25, 25, 55, 55, 55, 55, 55 };
for (int i = 0; i < NUM; i++)
{
fire[i].t2 = timeGetTime();
// 增加爆炸半径,绽放烟花,增加时间间隔做变速效果
if (fire[i].t2 - fire[i].t1 > fire[i].dt && fire[i].isshow == true)
{
if (fire[i].r
没有合适的资源?快使用搜索试试~ 我知道了~
C语言烟花代码+sln.zip
共99个文件
jpg:19个
tlog:17个
mp3:17个
6 下载量 43 浏览量
2023-09-25
23:25:41
上传
评论 1
收藏 60.12MB ZIP 举报
温馨提示
c语言烟花代码 C语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.zipC语言烟花代码+sln.
资源推荐
资源详情
资源评论
收起资源包目录
C语言烟花代码+sln.zip (99个子文件)
file
情侣图片2.jpg 137KB
录音1.mp3 67KB
情侣图片.png 497KB
flower.jpg 2.14MB
bomb.wav 80KB
情侣图片3.jpg 133KB
情侣图片.jpg 168KB
shoot.jpg 17KB
小曲儿-小幸运.mp3 2.29MB
录音2.mp3 272KB
情侣图片1.jpg 63KB
shoot.mp3 87KB
情侣图片4.jpg 58KB
录音 2017年12月4号.m4a 348KB
Miss you.sln 1KB
Miss you
file
录音1.mp3 67KB
flower.jpg 2.14MB
bomb.wav 80KB
录音.mp3 338KB
情侣图片.jpg 168KB
shoot.jpg 17KB
小曲儿-小幸运.mp3 2.29MB
录音2.mp3 272KB
shoot.mp3 87KB
情侣图片4.jpg 39KB
Release
Missyou.iobj 82KB
Missyou.ipdb 24KB
main.cpp 11KB
Miss you.vcxproj 6KB
Debug
vc141.pdb 164KB
Missyou.tlog
CL.write.1.tlog 556B
Missyou.lastbuildstate 218B
CL.command.1.tlog 646B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
link.write.1.tlog 528B
CL.read.1.tlog 25KB
vc141.idb 555KB
Missyou.Build.CppClean.log 940B
Miss you.tlog
unsuccessfulbuild 0B
CL.write.1.tlog 416B
Miss you.lastbuildstate 218B
CL.command.1.tlog 646B
CL.read.1.tlog 25KB
main.obj 65KB
Miss you.log 554B
Miss you.vcxproj.user 165B
Miss you.vcxproj.filters 924B
.vs
Miss you
v15
Browse.VC.db 32.8MB
.suo 33KB
ipch
AutoPCH
8d581d7e95b77eb0
MAIN.ipch 37.94MB
v17
Browse.VC.db 30.84MB
.suo 34KB
ipch
AutoPCH
120804e0a00eadc4
MAIN.ipch 40.56MB
FileContentIndex
read.lock 0B
a7f162d0-e026-4d08-b959-60fb0a9ca752.vsidx 22KB
Release
vc141.pdb 140KB
vc143.pdb 164KB
Missyou.tlog
CL.write.1.tlog 368B
Missyou.lastbuildstate 167B
link.write.2u.tlog 362B
CL.command.1.tlog 1KB
link.command.1.tlog 2KB
link.read.1.tlog 4KB
link.write.1.tlog 986B
CL.read.1.tlog 27KB
Missyou.write.1u.tlog 416B
Missyou.iobj 63KB
file
录音1.mp3 67KB
flower.jpg 2.14MB
bomb.wav 80KB
情侣图片.jpg 168KB
shoot.jpg 17KB
小曲儿-小幸运.mp3 2.29MB
录音2.mp3 272KB
shoot.mp3 87KB
情侣图片4.jpg 58KB
录音 2017年12月4号.m4a 348KB
Missyou.exe.recipe 288B
Missyou.ipdb 20KB
Missyou.Build.CppClean.log 1KB
_IsIncrementalBuild 29B
Missyou.exe 45KB
main.obj 270KB
Miss you.log 81B
Missyou.pdb 964KB
Debug
file
录音1.mp3 67KB
flower.jpg 2.14MB
bomb.wav 80KB
情侣图片.jpg 168KB
shoot.jpg 17KB
小曲儿-小幸运.mp3 2.29MB
录音2.mp3 272KB
shoot.mp3 87KB
情侣图片4.jpg 58KB
录音 2017年12月4号.m4a 348KB
Missyou.ilk 777KB
Missyou.exe 135KB
Missyou.pdb 684KB
共 99 条
- 1
资源评论
.whl
- 粉丝: 3907
- 资源: 4858
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 人、垃圾、非垃圾检测18-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 金智维RPA server安装包
- 二维码图形检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- Matlab绘制绚丽烟花动画迎新年
- 厚壁圆筒弹性应力计算,过盈干涉量计算
- 网络实践11111111111111
- GO编写图片上传代码.txt
- LabVIEW采集摄像头数据,实现图像数据存储和浏览
- 几种不同方式生成音乐的 Python 源码示例.txt
- python红包打开后出现烟花代码.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功