c语言表白浪漫烟花效果代码,烟花绽放C语言,非常漂亮的新年祝福!C语言实现漂亮的烟花效果

c语言表白浪漫烟花效果代码,烟花绽放C语言,非常漂亮的新年祝福!C语言实现漂亮的烟花效果

非常美丽的新年祝福!本文主要介绍了用C语言实现美丽的焰火效果。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

本文分享了C语言实现绚丽烟花展示的具体代码,供大家参考。具体内容如下

节目名称:祝福烟花,祝福朋友

编译环境:VC 6.0 easyx(立冬版)

#包含图形. h

#包含conio.h

#包含iostream.h

#包含数学. h

#包含时间. h

#包含stdio.h

# includes mmsystem . h//使用此计时器时必须包含的文件

#pragma注释(lib,' Winmm.lib ')

/* * * * * *宏定义区域* * * * */

#define NUM 13 //烟花类别和数量的宏定义

/* * * * * *结构定义区* * * * * * * */

//烟花结构

结构火灾

{

int r;//当前爆炸半径

int max _ r;//爆炸中心距离边缘的最大半径

int x,y;//窗口中爆炸中心的坐标

int cen_x,cen _ y;//爆炸中心相对于图片左上角的坐标

int宽度,高度;//图片的宽度和高度

int xy[240][240];//存储图片像素

布尔秀;//开花还是不开花?

布尔平局;//开始输出像素。

DWORD t1,t2,dt;//开花速度

} Fire[NUM];

//烟火炸弹结构

结构喷射

{

int x,y;//注入点的坐标

int hx,hy;//最高点的坐标-将被赋给x,y在火

int高度;//烟花高度

布尔射;//能传播吗?

DWORD t1,t2,dt;//启动速度

图像img[2];//保存一张花弹的明暗图。

字节n:1;//图像下标

} Jet[NUM];

//生日快乐艺术字结构

Struct HAPPY //保存生日快乐艺术字图片

{

int x,y;//每个单词的图片左上角的坐标

图像img//保存单字图片

静态整数;//字母顺序号

}快乐[NUM];

int HAPPY:num=0;

//针对. 2012结构的死亡少女

Struct WISH //滚动祝福的画面结构

{

int x,y;//图片左上角的坐标

DWORD t1,t2,dt;//图片移动时间间隔

图像img//保存图片

int dxy//每次的移动量

字节目录:1;//限制两个滚动方向

}愿望;

/* * * *函数声明区* * */

void Init(int);//初始化fireworks

空载荷();//加载烟花图片

void shot();//发射烟花

void choosed(DWORD);//放映烟花

虚空许愿();//滚动祝福

void样式(DWORD);//发射样式

void显示(DWORD *);//烟花绽放

//主函数

void main()

{

initgraph( 1200,800);

srand(time(0));

//播放背景音乐

mciSendString( 'open。/fire/bk.mp3别名bk ',0,0,0);

mciSendString('播放bk重复',0,0,0);

setfillstyle(0);

Setfont (36,0,'斜体');

setcolor(黄色);

Outtextxy (370,100,' yy _ _出厂._');

DWORD t1=time gettime();//过滤焰火计时

DWORD st1=time gettime();//播放模式计时

DWORD * pMem=GetImageBuffer();//获取窗口内存指针

for(int I=0;i NUMI) //初始化fireworks

{

init(I);

}

load();//将烟花图片信息加载到相应的结构中

BeginBatchDraw();//开始批量绘图

而(!kbhit())

{

睡眠(10);

//随机选择4000个像素擦除

for(int clr=0;clr 1000clr)

{

for(int j=0;J2;j)

{

int px1=rand()% 1200;

int py1=rand()% 800;

If (py1 799) //阻止跨越边界

pMem[py1 * 1200 px1]=pMem[py1 * 1200 px1 1]=黑色;//通过给视频内存赋值来擦除像素。

}

}

选择了(t1);//放映烟花

shoot();//发射烟花

显示(pMem);//烟花绽放

许愿();//滚动字符

风格(st1);//模式启动

FlushBatchDraw();//显示所有以前的绘图操作

}

}

//初始化fireworks参数

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 };

/* * * *初始化fireworks * * * */

火[我]。x=0;//烟花中心坐标

火[我]。y=0;

火[我]。宽度=240;//图片宽

火[我]。身高=240;//图片高

火[我]。max _ r=r[I];//最大半径

火[我]。cen _ x=x[I];//中心距左上角距离

火[我]。cen _ y=y[I];

火[我]。show=false//是否绽放

火[我]。dt=5;//绽放时间间隔

火[我]。t1=time gettime();

火[我]。r=0;//从0 开始绽放

/**** 初始化烟花弹*****/

喷气机[i].x=-240;//烟花弹左上角坐标

喷气机[i].y=-240;

喷气机[i].hx=-240;//烟花弹发射最高点坐标

喷气机[i].hy=-240;

喷气机[i].高度=0;//发射高度

jet[I]。t1=time gettime();

喷气机[i].dt=rand()% 10;//发射速度时间间隔

喷气机[i].n=0;//烟花弹闪烁图片下标

喷气机[i].射=假;//是否发射

}

//加载图片

无效载荷()

{

/**** 储存烟花的像素点颜色****/

图像fm,GM;

loadimage( fm ./fire/flower.jpg ',3120,240);

for(int I=0;i 13我)

{

SetWorkingImage(FM);

getimage( gm,i * 240,0,240,240);

SetWorkingImage(GM);

for(int a=0;一个240;答

for(int b=0;b 240b)

火[我]。xy[a][b]=getpixel( a,b);

}

/**** 加载烟花弹************/

形象sm;

loadimage( sm,' 1 ./fire/shoot.jpg ',200,50);

for(I=0;i 13我)

{

SetWorkingImage(sm);

int n=rand()% 5;

getimage( Jet[i].img[0],n * 20,0,20,50);//暗

getimage( Jet[i].img[1],(^北部5)* 20,0,20,50);//亮

}

/***** 加载生日快乐图片********/

图像hm;

loadimage(嗯./fire/happy.jpg ',689,115);

SetWorkingImage(hm);

for(I=0;i 13我)

{

快乐[我]。x=i * 90

快乐[我]。y=rand()% 100 500;

getimage( Happy[i].img,i * 53,0,53,115);

}

/***** 加载For.2012夭女图片*********/

愿望。x=0;

Wish.y=100

愿望。t1=time gettime();

Wish.dt=46

愿望。dir=0;

愿望。dxy=rand()% 8 1;

loadimage( Wish.img,' 0 ./fire/yaojing.jpg ',490,100);

putimage( Wish.x,Wish.y,Wish.img,src invert);

SetWorkingImage();//设置回绘图窗口

}

//在一定范围内筛选可发射的烟花,并初始化发射参数,输出烟花弹到屏幕,播放声音

无效选择(双字t1)

{

T2=time gettime();

中频(t2 - t1 100)

{

int n=rand()% 20;

if ( n 13 Jet[n].射击==假火. show==false)

{

/**** 重置烟花弹,预备发射*****/

喷气机,喷气机x=rand()% 1200;

喷气机,喷气机y=rand()% 100 600;

喷气机,喷气机hx=Jet[n]。x;

喷气机,喷气机100 . hy=rand()% 400;

喷气机,喷气机。高度=喷射[n]的缩写.y型喷气发动机. hy;

喷气机,喷气机。射=真;

putimage( Jet[n].x,Jet[n].y,Jet[n].喷射,喷射n],SRCINVERT);

/**** 播放每个烟花弹的声音*****/

char c1[50],c2[30],C3[30];

sprintf( c1,打开. fire/shoot.mp3别名s%d ',n);

sprintf( c2,播放s%d ',n);

sprintf( c3,' close n%d ',n);

mciSendString( c3,0,0,0);

mciSendString( c1,0,0,0);

mciSendString( c2,0,0,0);

}

t1=t2

}

}

//扫描烟花弹并发射

无效拍摄()

{

for(int I=0;i 13我)

{

jet[I]。T2=time gettime();

if ( Jet[i].t2 - Jet[i].t1 Jet[i].dt喷气机[i].拍==真)

{

/**** 烟花弹的上升*****/

putimage( Jet[i].x,Jet[i].y,Jet[i].喷气发动机,喷气发动机.n],SRCINVERT);

if ( Jet[i].y Jet[i].hy)

{

喷气机[i].n;

喷气机[i].y-=5;

}

putimage( Jet[i].x,Jet[i].y,Jet[i].喷气发动机,喷气发动机.n],SRCINVERT);

/**** 上升到高度的3/4,减速*****/

如果((Jet[i])。y - Jet[i].hy) * 4 Jet[i].高度)

喷气机[i].dt=rand()% 4 10;

/**** 上升到最大高度*****/

if ( Jet[i].y=Jet[i].hy)

{

//播放爆炸声

char c1[50],c2[30],C3[30];

sprintf( c1,打开火/炸弹别名n%d ',I);

sprintf( c2,播放n%d ',I);

sprintf( 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].喷气发动机,喷气发动机.n],SRCINVERT);//擦掉烟花弹

火[我]。x=Jet[i].hx 10//在烟花弹中间爆炸

火[我]。y=Jet[i].hy;//在最高点绽放

火[我]。show=true//开始绽放

喷气机[i].射=假;//停止发射

//显示对应字母

putimage( Happy[HAPPY:num].x,快乐[开心:num].y,快乐[HAPPY:num].img,src invert);

开心*数量

if ( HAPPY:num 12)

HAPPY:num=0;

}

Jet[I]。t1=Jet[I]。T2;

}

}

}

//制作水平、竖直移动的图片

虚空许愿()

{

愿望。T2=time gettime();

if ( Wish.t2 - Wish.t1 Wish.dt)

{

/**** 图片的移动*****/

putimage( Wish.x,Wish.y,Wish.img,src invert);

if ( Wish.dir==0)

愿望。x=愿望。dxy

其他

愿望。y-=愿望。dxy

putimage( Wish.x,Wish.y,Wish.img,src invert);

/**** 图片出界后*****/

if ( Wish.x 1200 || Wish.y 0)

{

愿望。dir=rand()% 2;//获取随机方向

if ( Wish.dir==0 ) //如果左右运动

{

愿望。y=rand()% 700;//初始位置

愿望。x=-490;

愿望。dxy=rand()% 7 1;//随机运动分量

}

else //上下运动

{

愿望。dxy=rand()% 7 1;

愿望。x=rand()% 700;

Wish.y=800

}

}

愿望。t1=愿望。T2;

}

}

//显示花样

空心样式(双字st1)

{

DWORD st2=time gettime();

if ( st2 - st1 266000 ) //一首歌的时间

{

//心形坐标

int x[13]={ 60,75,91,100,95,75,60,45,25,15,25,41,60 };

int y[13]={ 65,53,40,22,5,4,20,4,5,22,40,53,65 };

for(int I=0;我编号我)

{

清除设备();

/**** 规律分布烟花弹***/

喷气机[i].x=x[I]* 10;

喷气机[i].y=(y[I]75)* 10;

喷气机[i].hx=Jet[i].x;

喷气机[i].hy=y[I]* 10;

喷气机[i].高度喷气机[i].y - Jet[i].hy;

喷气机[i].射=真;

喷气机[i].dt=7;

putimage( Jet[i].x,Jet[i].y,Jet[i].喷气发动机,喷气发动机.n],SRCINVERT);//显示烟花弹

/**** 设置烟花参数***/

火[我]。x=Jet[i].x 10

火[我]。y=Jet[i].hy;

火[我]。show=false

火[我]。r=0;

/**** 播放发射声音***/

char c1[50],c2[30],C3[30];

sprintf( c1,打开. fire/shoot.mp3别名s%d ',I);

sprintf( c2,玩s%d ',I);

sprintf( c3,' close n%d ',I);

mciSendString( c3,0,0,0);

mciSendString( c1,0,0,0);

mciSendString( c2,0,0,0);

}

st1=st2

}

}

//绽放烟花

空显示(双字* pMem)

{

//烟花个阶段绽放时间间隔,制作变速绽放效果

int drt[16]={ 5,5,5,6,25,25,25,55,55,55,55,55,55,55 };

for(int I=0;我编号我)

{

火[我]。T2=time gettime();

//增加爆炸半径,绽放烟花,增加时间间隔做变速效果

如果(火[i].t2 -火[i].t1火【我】。震颤性精神错乱(Delirium Tremens的缩写)火[我]。show==true)

{

如果(火[我]。r火[我].max_r)

{

火[我]。r;

火[我]。dt=drt[Fire[i].r/10];

火[我]。draw=true

}

如果(火[我]。r=Fire[i].max_r - 1)

{

火[我]。draw=false

init(I);

}

火[我]。t1=Fire[I]。T2;

}

//如果该号炮花可爆炸,根据当前爆炸半径画烟花,颜色值接近黑色的不输出。

如果(火[我]。绘制)

{

对于(双a=0;a=6.28a=0.01)

{

int x1=(int)( Fire[i]).cen_x火[我].r * cos(a));//相对于图片左上角的坐标

int y1=(int)( Fire[i]).中心火[i].r * sin(a));

if ( x1 0 x1 Fire[i].宽度y1 0 y1火[我].高度)//只输出图片内的像素点

{

int b=Fire[i].xy[x1][y1]0x ff;

int g=( Fire[i]).xy[x1][y1]8)0x ff;

int r=( Fire[i]).xy[x1][y1]16);

//烟花像素点在窗口上的坐标

int xx=(int)( Fire[i]).x火[我]。r * cos(a));

int yy=(int)( Fire[i]).y - Fire[i].r * sin(a));

//较暗的像素点不输出、防止越界

如果(r0x 20g0x 20b0x 20 xx 0 xx 1200 YY 0 YY 800)

pMem[yy * 1200 xx]=BGR(火【我】。xy[x1][y1]);//显存操作绘制烟花

}

}

火[我]。draw=false

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: