非常漂亮的新年祝福!C语言实现漂亮的烟花效果

非常漂亮的新年祝福!这篇文章主要介绍了C语言实现漂亮的烟花效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现漂亮的烟花效果展示的具体代码,供大家参考,具体内容如下

程序名称:祝福烟花,祝福朋友
编译环境:VC++6.0 && easyx(立冬版) 

 #include  #include  #include  #include  #include  #include  #include  // 使用该计时器必须包含的文件 #pragma comment ( lib, "Winmm.lib" ) /***** 宏定义区 ******/ #define NUM 13 // 烟花种类数量宏定义 /***** 结构定义区 **********/ // 烟花结构 struct FIRE { int r;  // 当前爆炸半径 int max_r; // 爆炸中心距离边缘最大半径 int x, y; // 爆炸中心在窗口的坐标 int cen_x, cen_y; // 爆炸中心相对图片左上角的坐标 int width, height; // 图片的宽高 int xy[240][240]; // 储存图片像素点 bool show; // 是否绽放 bool draw; // 开始输出像素点 DWORD t1, t2, dt; // 绽放速度 }Fire[NUM]; // 烟花弹结构 struct JET { int x, y; // 喷射点坐标 int hx, hy; // 最高点坐标------将赋值给 FIRE 里面的 x, y int height; // 烟花高度 bool shoot; // 是否可以发射 DWORD t1, t2, dt; // 发射速度 IMAGE img[2]; // 储存花弹一亮一暗图片 byte n : 1; // 图片下标 }Jet[NUM]; // happy birthday 艺术字结构 struct HAPPY // 储存 Happy Birthday 艺术字图片 { int x, y; // 每个字的图片的左上角坐标 IMAGE img; // 储存单个字图片 static int num; // 字母序号 }Happy[NUM]; int HAPPY::num = 0; // For.2012の夭女 结构 struct WISH  // 滚动祝福图片结构 { int x, y; // 图片左上角坐标 DWORD t1, t2, dt; // 图片运动时间间隔 IMAGE img; // 储存图片 int dxy; // 每次的移动量 byte dir : 1; // 限制两个滚动方向 }Wish; /**** 函数申明区 ****/ void Init ( int ); // 初始化烟花 void Load ( ); // 加载烟花图片 void Shoot ( ); // 发射烟花 void Chose ( DWORD& ); // 筛选烟花 void Wishing( ); // 滚动祝福 void Style ( DWORD& ); // 发射样式 void Show ( DWORD* ); // 绽放烟花 // 主函数 void main() { initgraph( 1200, 800 ); srand( time(0) ); // 播放背景音乐 mciSendString( "open ./fire/bk.mp3 alias bk", 0, 0, 0 ); mciSendString( "play bk repeat", 0, 0, 0 ); setfillstyle( 0 ); setfont ( 36, 0, "楷体" ); setcolor ( YELLOW ); outtextxy ( 370, 100, "yy滺滺__出厂 .... ^_^" ); DWORD t1 = timeGetTime(); // 筛选烟花计时 DWORD st1 = timeGetTime(); // 播放花样计时 DWORD* pMem = GetImageBuffer(); // 获取窗口显存指针 for ( int i = 0; i  100 ) { int n = rand() % 20; if ( n <13 && jet[n].shoot== false fire[n].show== ) {> Jet[i].dt && Jet[i].shoot == true ) { /**** 烟花弹的上升 *****/ putimage( Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], 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  12 ) HAPPY::num = 0; } Jet[i].t1 = Jet[i].t2; } } } // 制作水平、竖直移动的图片 void Wishing() { Wish.t2 = timeGetTime(); if ( Wish.t2 - Wish.t1 > Wish.dt ) { /**** 图片的移动 *****/ putimage( Wish.x, Wish.y, &Wish.img, SRCINVERT ); if ( Wish.dir == 0 ) Wish.x += Wish.dxy; else Wish.y -= Wish.dxy; putimage( Wish.x, Wish.y, &Wish.img, SRCINVERT ); /**** 图片出界后 *****/ if ( Wish.x > 1200 || Wish.y <0 ) { wish.dir=rand() % 2;> 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  Fire[i].dt && Fire[i].show == true ) { if ( Fire[i].r = Fire[i].max_r - 1 ) { Fire[i].draw = false; Init( i ); } Fire[i].t1 = Fire[i].t2; } // 如果该号炮花可爆炸,根据当前爆炸半径画烟花,颜色值接近黑色的不输出。 if ( Fire[i].draw ) { for ( double a = 0; a <= 6.28; a += 0.01 ) { int x1 = (int)( Fire[i].cen_x + Fire[i].r * cos(a) ); // 相对于图片左上角的坐标 int y1 = (int)( Fire[i].cen_y - Fire[i].r * sin(a) ); if ( x1 > 0 && x1  0 && y1 > 8 ) & 0xff; int r = ( Fire[i].xy[x1][y1] >> 16 ); // 烟花像素点在窗口上的坐标 int xx = (int)( Fire[i].x + Fire[i].r * cos(a) ); int yy = (int)( Fire[i].y - Fire[i].r * sin(a) ); // 较暗的像素点不输出、防止越界 if ( r > 0x20 && g > 0x20 && b > 0x20 && xx > 0 && xx <1200 && yy> 0 && yy <800 ) pmem[yy * 1200 + xx]=BGR( fire[i].xy[x1][y1] );>

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

以上就是非常漂亮的新年祝福!C语言实现漂亮的烟花效果的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言