当前位置:   article > 正文

用C/C++写烟花代码制作新年祝福_制作元宵节快乐的程序c++

制作元宵节快乐的程序c++

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

效果展示

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

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

那么让我们开始正文吧!

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

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

所需要的头文件

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

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

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

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

MOUSEMSG m;

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

  1. struct Fire
  2. {
  3. int x, y, hy,i;
  4. unsigned t1, t2, dt;
  5. bool istop;
  6. };//烟火
  7. struct Work
  8. {
  9. int r,i;
  10. unsigned t1, t2,dt;
  11. bool isboom;
  12. };//烟花

烟火飞天的函数

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

烟花爆炸函数

  1. void boom(struct Fire* a, struct Work* b)
  2. {
  3. fly(a);//引用烟花上升函数,上升到最高点就爆炸
  4. b->r = 0;
  5. b->isboom = false;
  6. b->t1 = GetTickCount();//获取时间
  7. int i=1;
  8. b->dt =150;
  9. b->i = (rand() % 11)+1;//产生随机数,选择不同烟花
  10. int j = 0;
  11. mciSendString("play three repeat", 0, 0, 0);
  12. while (b->isboom == false)
  13. {
  14. for (i = 1; i < 8; i++)
  15. {
  16. b->dt = 80*i;
  17. while (b->r != i)
  18. {
  19. b->t2 = GetTickCount();
  20. if (b->t2 - b->t1 >= b->dt)
  21. {
  22. cleardevice();
  23. outtextxy(275,200, "新年快乐");//一直显示新年快乐的字
  24. switch (b->i)//选择烟花种类
  25. {
  26. case 1: loadimage(&flower[0][i - 1], "flower.png", 26 * i * (j+1), (j+1)* 26 * i);//下载图片大小不同,出现绽放效果
  27. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[0][i - 1]); break;//展示效果
  28. case 2:loadimage(&flower[1][i - 1], "flower1.png", 26 * i * (j+1), (j+1)* 26 * i);
  29. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[1][i - 1]); break;
  30. case 3:loadimage(&flower[2][i - 1], "flower2.png", 26 * i * (j+1), (j+1) * 26 * i);
  31. putimage(a->x - 13 * i*(j+1), a->hy - i * 13 * (j+1), &flower[2][i - 1]); break;
  32. case 4:loadimage(&flower[3][i - 1], "flower3.png", 26 * i * (j+1), (j + 1) * 26 * i);
  33. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[3][i - 1]); break;
  34. case 5:loadimage(&flower[4][i - 1], "flower4.png", 26 * i * (j+1), (j+1) * 26 * i);
  35. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[4][i - 1]); break;
  36. case 6:loadimage(&flower[5][i - 1], "flower5.png", 26 * i * (j+1), (j+1) * 26 * i);
  37. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[5][i - 1]); break;
  38. case 7:loadimage(&flower[6][i - 1], "flower6.png", 26 * i * (j+1), (j+1) * 26 * i);
  39. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[6][i - 1]); break;
  40. case 8:loadimage(&flower[7][i - 1], "flower7.png", 26 * i * (j+1), (j+1) * 26 * i);
  41. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[7][i - 1]); break;
  42. case 9:loadimage(&flower[8][i - 1], "flower8.png", 26 * i * (j+1), (j+1) * 26 * i);
  43. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[8][i - 1]); break;
  44. case 10:loadimage(&flower[9][i - 1], "flower9.png", 26 * i * (j+1), (j+1) * 26 * i);
  45. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i * (j+1), &flower[9][i - 1]); break;
  46. case 11:loadimage(&flower[10][i - 1], "flower10.png", 26 * i * (j+1), (j+1) * 26 * i);
  47. putimage(a->x - 13 * i*(j+1), a->hy - 13 * i*(j+1), &flower[10][i - 1]); break;
  48. }
  49. outtextxy(275,200, "新年快乐");//依旧显示着新年快乐
  50. Sleep(20);
  51. b->r = i;
  52. }
  53. }
  54. b->t2 = b->t1;
  55. }
  56. if (b->r == i - 1)
  57. {
  58. b->isboom = true;//烟花绽放完,结束
  59. Sleep(30);
  60. cleardevice();//清屏
  61. outtextxy(275,200, "新年快乐");
  62. }
  63. }
  64. }

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

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

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

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

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

  1. void Long(IMAGE* a)
  2. {
  3. int i,j=0;
  4. for (i = 0; i < 6; i++)
  5. {
  6. putimage(450, 300, a+i);
  7. j++;
  8. Sleep(200);
  9. if (i ==5&&j<=20)
  10. {
  11. i = 0;
  12. }
  13. }
  14. }

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

  1. void tupian()
  2. {
  3. loadimage(&fire[0], "fire.png", 20, 50);
  4. loadimage(&fire[1], "fire1.png", 20, 50);
  5. loadimage(&fire[2], "fire2.png", 20, 50);
  6. loadimage(&fire[3], "fire3.png", 20, 50);
  7. loadimage(&fire[4], "fire4.png", 20, 50);
  8. loadimage(&fire[5], "fire5.png", 20, 50);
  9. loadimage(&l[0], "l6.jpg", 300, 100);
  10. loadimage(&l[1], "l5.jpg", 300, 100);
  11. loadimage(&l[2], "l4.jpg", 300, 100);
  12. loadimage(&l[3], "l3.jpg", 300, 100);
  13. loadimage(&l[4], "l2.jpg", 300, 100);
  14. loadimage(&l[5], "l1.jpg", 300, 100);
  15. loadimage(&hl[0], "hl6.jpg", 300, 100);
  16. loadimage(&hl[1], "hl5.jpg", 300, 100);
  17. loadimage(&hl[2], "hl4.jpg", 300, 100);
  18. loadimage(&hl[3], "hl3.jpg", 300, 100);
  19. loadimage(&hl[4], "hl2.jpg", 300, 100);
  20. loadimage(&hl[5], "hl1.jpg", 300, 100);
  21. loadimage(&ll[0], "ll6.jpg", 300, 100);
  22. loadimage(&ll[1], "ll5.jpg", 300, 100);
  23. loadimage(&ll[2], "ll4.jpg", 300, 100);
  24. loadimage(&ll[3], "ll3.jpg", 300, 100);
  25. loadimage(&ll[4], "ll2.jpg", 300, 100);
  26. loadimage(&ll[5], "ll1.jpg", 300, 100);
  27. loadimage(&bl[0], "bl6.jpg", 300, 100);
  28. loadimage(&bl[1], "bl5.jpg", 300, 100);
  29. loadimage(&bl[2], "bl4.jpg", 300, 100);
  30. loadimage(&bl[3], "bl3.jpg", 300, 100);
  31. loadimage(&bl[4], "bl2.jpg", 300, 100);
  32. loadimage(&bl[5], "bl1.jpg", 300, 100);
  33. loadimage(&zl[0], "zl6.jpg", 300, 100);
  34. loadimage(&zl[1], "zl5.jpg", 300, 100);
  35. loadimage(&zl[2], "zl4.jpg", 300, 100);
  36. loadimage(&zl[3], "zl3.jpg", 300, 100);
  37. loadimage(&zl[4], "zl2.jpg", 300, 100);
  38. loadimage(&zl[5], "zl1.jpg", 300, 100);
  39. loadimage(&lt1[0], "lt11.jpg", 300, 600);
  40. loadimage(&lt1[1], "lt12.jpg", 300, 600);
  41. loadimage(&lt1[2], "lt13.jpg", 300, 600);
  42. loadimage(&lt1[3], "lt14.jpg", 300, 600);
  43. loadimage(&lt1[4], "lt15.jpg", 300, 600);
  44. loadimage(&lt1[5], "lt16.jpg", 300, 600);
  45. loadimage(&lt1[6], "lt17.jpg", 300, 600);
  46. loadimage(&lt1[7], "lt18.jpg", 300, 600);
  47. loadimage(&lt1[8], "lt19.jpg", 300, 600);
  48. loadimage(&lt1[9], "lt110.jpg", 300, 600);
  49. loadimage(&lt1[10], "lt111.jpg", 300, 600);
  50. loadimage(&lt1[11], "lt112.jpg", 300, 600);
  51. loadimage(&lt1[12], "lt113.jpg", 300, 600);
  52. loadimage(&lt1[13], "lt114.jpg", 300, 600);
  53. loadimage(&lt1[14], "lt115.jpg", 300, 600);
  54. loadimage(&lt2[0], "lt21.jpg", 300, 600);
  55. loadimage(&lt2[1], "lt22.jpg", 300, 600);
  56. loadimage(&lt2[2], "lt23.jpg", 300, 600);
  57. loadimage(&lt2[3], "lt24.jpg", 300, 600);
  58. loadimage(&lt2[4], "lt25.jpg", 300, 600);
  59. loadimage(&lt2[5], "lt26.jpg", 300, 600);
  60. loadimage(&lt2[6], "lt27.jpg", 300, 600);
  61. loadimage(&lt2[7], "lt28.jpg", 300, 600);
  62. loadimage(&lt2[8], "lt29.jpg", 300, 600);
  63. loadimage(&lt2[9], "lt210.jpg", 300, 600);
  64. loadimage(&lt2[10], "lt211.jpg", 300, 600);
  65. loadimage(&lt2[11], "lt212.jpg", 300, 600);
  66. loadimage(&lt2[12], "lt213.jpg", 300, 600);
  67. loadimage(&lt2[13], "lt214.jpg", 300, 600);
  68. loadimage(&lt2[14], "lt215.jpg", 300, 600);
  69. }

最后就是main函数啦

  1. int main()
  2. {
  3. initgraph(800,500);
  4. struct Fire red;
  5. struct Work work ;
  6. settextstyle(50, 0, "楷体");
  7. settextcolor(YELLOW);
  8. int i = 1;
  9. tupian();//加载图片
  10. while (i<=18)//这个是烟花,18是放18个烟花
  11. {
  12. mciSendString("open fly123.mp3 alias two", NULL, 0, NULL);//烟花的声音
  13. mciSendString("open boom123.mp3 alias three", NULL, 0, NULL);
  14. boom(&red,&work);
  15. Sleep(500);
  16. mciSendString("stop three", 0, 0, 0);
  17. mciSendString("seek two to start", 0, 0, 0);
  18. mciSendString("seek three to start", 0, 0, 0);
  19. i++;
  20. }
  21. cleardevice();//烟花部分结束
  22. mciSendString("open new_year.mp3 alias one", NULL, 0, NULL);//开始歌曲,文字图片祝福开始
  23. mciSendString("play one repeat", NULL, 0, NULL);
  24. i = 1;
  25. while (i<=8) {
  26. word(i);
  27. i++;
  28. Sleep(800);
  29. }//产生“祝大家新年快乐”
  30. while (1)
  31. {
  32. m = GetMouseMsg();
  33. if (m.uMsg == 513)//如果鼠标点击
  34. {
  35. if (m.x >= 500 && m.x <= 800 && m.y >= 450 && m.y <= 500)如果鼠标点击的地方是这个范围
  36. {
  37. cleardevice();
  38. int w = rand() % 13, L = rand() % 5;//产生两个随机数
  39. zhufu(w+1);
  40. switch (L)//随机出现个龙
  41. {
  42. case 0:Long(l); break;
  43. case 1:Long(hl); break;
  44. case 2:Long(zl); break;
  45. case 3:Long(ll); break;
  46. case 4:Long(bl); break;
  47. }
  48. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  49. settextstyle(25, 0, "华文彩云");
  50. outtextxy(500, 450, "点击此处,再换一句祝福");
  51. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  52. settextstyle(25, 0, "华文彩云");
  53. outtextxy(50, 400, "龙年要发祝福");
  54. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  55. settextstyle(25, 0, "华文彩云");
  56. outtextxy(50, 450, "龙年要发龙图");
  57. }
  58. if (m.x >= 30 && m.x <= 225 && m.y >= 400 && m.y <= 430)
  59. {
  60. cleardevice();
  61. int t1 = rand() % 15;
  62. putimage(200, -60, &lt1[t1]);//随机出现图片
  63. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  64. settextstyle(25, 0, "华文彩云");
  65. outtextxy(500, 450, "点击此处,获得随机祝福");
  66. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  67. settextstyle(25, 0, "华文彩云");
  68. outtextxy(50, 400, "龙年要发祝福");
  69. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  70. settextstyle(25, 0, "华文彩云");
  71. outtextxy(50, 450, "龙年要发龙图");
  72. }
  73. if (m.x >= 30 && m.x <= 225 && m.y >= 450 && m.y <= 480)
  74. {
  75. cleardevice();
  76. int t2 = rand() % 15;
  77. putimage(200, -60, &lt2[t2]);
  78. settextcolor(YELLOW);
  79. settextstyle(25, 0, "华文彩云");
  80. outtextxy(500, 450, "点击此处,获得随机祝福");
  81. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  82. settextstyle(25, 0, "华文彩云");
  83. outtextxy(50, 400, "龙年要发祝福");
  84. settextcolor(RGB(rand() % 225, rand() % 225, rand() % 225));
  85. settextstyle(25, 0, "华文彩云");
  86. outtextxy(50, 450, "龙年要发龙图");
  87. }
  88. }
  89. }
  90. }

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

最后,祝大家龙年快乐!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/151840
推荐阅读
相关标签
  

闽ICP备14008679号