上一篇: C语言画圣诞树源码(树界降临)


文章目录

  • 前言
  • 一、烟花是什么?
  • 二、前提准备
    • 1、EasyX绘图库下载
    • 2、EasyX 是什么
  • 三、代码示例
  • 总结
  • 新壁纸

前言

光阴似箭,岁月如梭,新的一年即将到来,意味着到了辞旧迎新,在此本期将写一个跨年烟花代码;

本代码采用EasyX绘图开源库来制作的,需先安装此绘图库,本文有详细EasyX绘图库介绍,可供参考;该绘图库功能强大,后续也可拿来实现一些游戏或者其他项目


一、烟花是什么?

烟花又称花炮、烟火、焰火、炮仗,根据《中国烟花爆竹标准—安全与质量》对烟花爆竹的定义为:以烟火药为原料,用于产生声光色的娱乐用品。中国劳动人民较早发明,常用于盛大的典礼或表演中。

也称“烟花”,我国是烟花爆竹的故乡。在黑火药问世的隋、唐时期,有人把黑火药装入竹筒,利用火线点然使之爆炸,这就是早期的竹筒爆竹。人们在燃放爆竹时,常发现爆竹顶部有喷火现象,受此启发,制造出了喷花,即早期的烟花。到了宋代,我国烟花爆竹产品的品种繁多,并且具有烟、火、光、声等不同的效果。南宋时期国内已开始举办多种大型烟花晚会,当时的许多烟花爆竹制作技术一直沿用。

二、前提准备

1、EasyX绘图库下载

下载官网: lhttps://easyx.cn/

2、EasyX 是什么

EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。

EasyX 含有一些简单的函数集合,几乎不用学习,直接翻看参考手册就可以直接使用。在线参考手册地址 https://docs.easyx.cn

正因为 EasyX 足够简单,在进行 C/C++、图形学、图像学、分形学等课程实验时,可以专注在课程知识上,不被绘图部分牵扯太多精力。以下是 EasyX 的使用演示:

在 VC6 的控制台程序中使用 EasyX,请参考 https://easyx.cn/used-in-vc6-console
在 VC6 的窗口程序中使用 EasyX,请参考 https://easyx.cn/used-in-vc6-win32
在 VC2010 的控制台程序中使用 EasyX,请参考 https://easyx.cn/used-in-vc2010-console
在 VC2010 的窗口程序中使用 EasyX,请参考 https://easyx.cn/used-in-vc2010-win32
在其它各版本 VC 中使用 EasyX,和 VC2010 区别不大,不再演示。

三、代码示例

/*-----------------------------------【程序说明】----------------------------
*            项目命题:   跨年烟花--烟花易冷(C语言)
*            代码所属:   枫之剑客
*                作者:   阿甘
*            开发时间:   2021/12/26
*           IDE 版 本:   Visual Studio 2015
*            项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/原文链接:https://blog.csdn.net/gzplyx/article/details/128219212#pragma once
#include<stdio.h>
#include<graphics.h>  //图形界面库头文件
#include<math.h>    //计算圆形的轨迹坐标
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//#include 包含头文件
//#pragma comment(lib."文件名称") 包含库文件constexpr auto WND_WIDTH = 1000;
constexpr auto WND_HEIGHT = 600;
constexpr auto PI = 3.141592653589793238;
constexpr auto NUM = 14;/***********结构****************/
struct JET //烟花弹
{int x, y;   //发射点坐标int hx, hy;  //最高点坐标 爆炸坐标int height;  //高度 最高点y 发射点y的差值bool isshoot; //是否发射状态DWORD t1, t2, dt;  //保存时间 时间可以用来描述发射速度IMAGE img[2];    //保存烟花一明一暗的图片byte n : 1;     //保存烟花弹的明暗状态 位段//字节为单位 int 4 char 1 n一个位 0-1
}jet[NUM];  //结构体数组13 img这个数组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];void welcome();
void init(int i);
void loadimages();
void choice(DWORD& t1);
void shoot();
void Show(DWORD* pMem);
void clss(int a);
void delay(int a);
void detabase(int a);
int main()
{//res 1.wavPlaySound(L"sound.dll", NULL, SND_LOOP | SND_FILENAME | SND_ASYNC);//mp3播放//mciSendString(L"open 1.mp3 alias bkmusic", NULL, 0, NULL);//mciSendString(L"play bkmusic repeat", NULL, 0, NULL);int a;for (a = 0; a < 5; a++){detabase(a);delay(100000);clss(1);}delay(500000);initgraph(WND_WIDTH, WND_HEIGHT);    //init初始化 graph图形界面 窗口srand((unsigned int)time(NULL));DWORD t1 = timeGetTime();DWORD* pMem = GetImageBuffer();//第一个界面welcome();//初始化for (int i = 0; i < NUM; i++){init(i);}loadimages();BeginBatchDraw();while (!_kbhit()){//Sleep(10);for (int i = 0; i < 1000; i++){for (int j = 0; j < 3; j++){int px1 = rand() % 1000;int py1 = rand() % 600;if (py1 < 599){pMem[py1 * 1000 + px1] = pMem[py1 * 1000 + px1 + 1] = BLACK;}}}choice(t1);shoot();Show(pMem);EndBatchDraw();}return 0;
}void welcome()
{settextcolor(YELLOW);for (int i = 0; i < 50; i++){//圆心(500,300) 半径150 60个均匀点的x,yint x = 500 + int(150 * sin(PI * 2 * i / 60));int y = 300 + int(150 * cos(PI * 2 * i / 60));cleardevice();settextstyle(i, 0, L"微软雅黑");outtextxy(x - 100, y - 150, L"测试使用1234567890");   //在指定的位置去输出字符outtextxy(x, y - 100, L"测试1234567890");Sleep(25);}//_getch();  //接收字符 不回显 直接接收Sleep(2000);cleardevice();settextstyle(25, 0, L"宋体");outtextxy(400, 150, L"1,");outtextxy(400, 200, L"2");outtextxy(400, 250, L"3,");outtextxy(400, 300, L"4,");outtextxy(400, 350, L"5");outtextxy(560, 400, L"---6");Sleep(3000);//_getch();
}void init(int i)
{int r[14] = { 120,120,155,123,130,147,138,138,130,135,140,132,155,160 };int x[14] = { 120,120,110,117,110,93,102,102,110,105,100,108,110,132 };int y[14] = { 120,120,85,118,120,105,103,110,110,120,1201,04,85,145 };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].show = 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 = timeGetTime();  //获取系统时间jet[i].dt = rand() % 10;  //0-9的随机时间jet[i].n = 0;jet[i].isshoot = false;
}void loadimages()
{IMAGE fm, gm;loadimage(&fm, L"flower.dll", 3120, 240);for (int i = 0; i < NUM; i++){SetWorkingImage(&fm);getimage(&gm, i * 240, 0, 240, 240);SetWorkingImage(&gm);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, L"shoot.dll", 200, 50);//set设置 working正在工作的 image图片SetWorkingImage(&jetimg);for (int i = 0; i < NUM; i++){int n = rand() % 5;  //0-4的随机数getimage(&jet[i].img[0], n * 20, 0, 20, 50);getimage(&jet[i].img[1], (n + 5) * 20, 0, 20, 50);}SetWorkingImage(NULL);
}void choice(DWORD& t1)
{DWORD t2 = timeGetTime();if (t2 - t1 > 2)  //2ms产生一个烟花弹{int n = rand() % 200;   //0-199if (n < NUM && jet[n].isshoot == false && fire[n].show == false){//重置烟花弹jet[n].x = rand() % (WND_WIDTH - 20);jet[n].y = rand() % 100 + 400;  //450-549jet[n].hx = jet[n].x;jet[n].hy = rand() % 400;    //0-399jet[n].height = jet[n].y - jet[n].hy;jet[n].isshoot = true;//nputimage(jet[n].x, jet[n].y, &jet[n].img[jet[n].n]);}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].isshoot == true){putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);if (jet[i].hy < jet[i].y){jet[i].n++; //0-1 明暗交替jet[i].y -= 5;}putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);if (jet[i].y <= jet[i].hy){fire[i].y = jet[i].hy;fire[i].x = jet[i].hx;fire[i].show = true;jet[i].isshoot = false;}jet[i].t1 = jet[i].t2;}}
}void Show(DWORD* pMem)
{int drt[16] = { 5,5,5,5,5,6,25,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].show == true){if (fire[i].r < fire[i].max_r){fire[i].r++;fire[i].dt = drt[fire[i].r / 10];fire[i].draw = 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 < fire[i].width && y1>0 && y1 < fire[i].height){int b = fire[i].xy[x1][y1] & 0xff;int g = (fire[i].xy[x1][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 < 1000 && yy < 600 && yy>0){pMem[yy * 1000 + xx] = BGR(fire[i].xy[x1][y1]);}}}fire[i].draw = true;}}}
void clss(int a)
{system("cls");
}
void delay(int a)
{while (a){a--;}
}
void detabase(int a)
{switch (a){case 1:{//printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("      ■■              ■■ \n");printf("      ■■       ■■■■■■■■■■\n");printf("      ■■■      ■■■■■■■■  \n");printf(" ■■■■■■■■■■■■  ■■        \n");printf(" ■■■■■■■■■■■■  ■■        \n");printf("         ■     ■■        \n");printf("   ■■    ■■    ■■        \n");printf("   ■■    ■■    ■■        \n");printf("   ■■   ■■     ■■        \n");printf("■■■■■■■■■■■■■  ■■■■■■■■■■\n");printf("■■■■■■■■■■■■■■ ■■■■■■■■■■\n");printf("      ■■       ■■    ■■  \n");printf("      ■■       ■■    ■■  \n");printf(" ■■■■■■■■■■■■  ■■    ■■  \n");printf(" ■■■■■■■■■■■■  ■■    ■■  \n");printf("      ■■       ■■    ■■  \n");printf("   ■  ■■  ■    ■■    ■■  \n");printf("  ■■■ ■■ ■■   ■■     ■■  \n");printf("  ■■  ■■  ■■  ■■     ■■  \n");printf(" ■■   ■■  ■■■ ■■     ■■  \n");printf("■■■   ■■   ■  ■■     ■■  \n");printf("■■    ■■     ■■      ■■  \n");printf("    ■■■■    ■■■      ■■  \n");printf("    ■■■■     ■       ■■  \n");}break;case 2:{//printf("■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("      ■■■               \n");printf("      ■■■               \n");printf("      ■■                \n");printf("     ■■■                \n");printf("    ■■■■■■■■■■■■■■■■■■■ \n");printf("    ■■■     ■■■       ■ \n");printf("   ■■■       ■■         \n");printf("  ■■■        ■■         \n");printf(" ■■■■        ■■         \n");printf("■■■■         ■■         \n");printf(" ■■  ■■■■■■■■■■■■■■■■■  \n");printf("     ■■■■■■■■■■■■■■■■■  \n");printf("     ■■      ■■         \n");printf("     ■■      ■■         \n");printf("     ■■      ■■         \n");printf("     ■■      ■■         \n");printf("     ■■      ■■         \n");printf("■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("             ■■         \n");printf("             ■■         \n");printf("             ■■         \n");printf("             ■■         \n");printf("             ■■         \n");printf("             ■■         \n");printf("             ■■         \n");}break;case 3:{//printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("    ■■         ■■        \n");printf("    ■■         ■■        \n");printf("    ■■         ■■        \n");printf("    ■■         ■■        \n");printf("    ■■     ■■■■■■■■■■■   \n");printf("    ■■     ■■■■■■■■■■■■  \n");printf(" ■■ ■■ ■■      ■■   ■■   \n");printf(" ■■ ■■  ■■     ■■   ■■   \n");printf("■■  ■■  ■■     ■■   ■■   \n");printf("■■  ■■  ■■■    ■■   ■■   \n");printf("■■  ■■         ■■   ■■   \n");printf("■■  ■■         ■■   ■■   \n");printf("■■  ■■         ■■   ■■■  \n");printf("    ■■   ■■■■■■■■■■■■■■■■\n");printf("    ■■   ■■■■■■■■■    ■■■\n");printf("    ■■         ■■■       \n");printf("    ■■        ■■■■       \n");printf("    ■■        ■■ ■■      \n");printf("    ■■       ■■  ■■      \n");printf("    ■■       ■■   ■■     \n");printf("    ■■      ■■    ■■■    \n");printf("    ■■     ■■■     ■■■   \n");printf("    ■■    ■■■       ■■■■ \n");printf("    ■■   ■■■■        ■■■■\n");printf("    ■■   ■■■          ■■ \n");printf("    ■■    ■              \n");}break;case 4:{//No                  //printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");printf("                  ■■     \n");printf("    ■■ ■■■■■■■■■■■■■■    \n");printf("   ■■■■■■■■■■■■■■■■■■■   \n");printf("   ■■■                   \n");printf("   ■■                    \n");printf("   ■■       ■■           \n");printf("   ■■       ■■           \n");printf("   ■■       ■■           \n");printf("   ■■       ■■           \n");printf("  ■■■       ■■           \n");printf("  ■■■       ■■           \n");printf("  ■■■■■■■■■■■■■■■■■■■■■  \n");printf("  ■■■■      ■■■       ■  \n");printf("            ■■           \n");printf("            ■■           \n");printf("      ■     ■■           \n");printf("     ■■■■   ■■   ■■■     \n");printf("     ■■■    ■■   ■■■■    \n");printf("    ■■■     ■■    ■■■■   \n");printf("   ■■■      ■■     ■■■■  \n");printf("  ■■■       ■■      ■■■■ \n");printf(" ■■■        ■■           \n");printf(" ■■■        ■■           \n");printf("         ■■■■■           \n");printf("          ■■■■           \n");printf("          ■■             \n");}break;case 5:{printf("happy new year!");}break;}
}

总结

本期实现了一个跨年烟花案例,最值得关注的是EasyX绘图开源库,博主使用该库做过一些小游戏,感觉非常有趣,有利于提高编程的乐趣,小伙伴们也可以进行尝试,今天就到这里了,喜欢的小伙伴们帮忙点个赞和关注,谢谢!。

新壁纸

C语言实现跨年烟花(烟花易冷)相关推荐

  1. C语言/C++基础之跨年烟花程序代码(附源码)

    C语言/C++基础之跨年烟花程序代码 程序之美 前言 主体 运行效果 代码实例 结束语 程序之美 前言 元旦将至,新年将至.转眼间2022年即将过去,崭新的一年正向我们缓缓走来.风花雪夜新年临近:入冬 ...

  2. [论文浅析]ICLR2017 跨语言,跨任务,跨领域序列标注

    公众号关注 "忆语臻言" 设为 "星标",一起学习进步! 本文介绍ICLR2017的一篇文章,题目为"transfer learning for se ...

  3. C语言用循环写出新年祝福语图案,非常漂亮的新年祝福!C语言实现漂亮的烟花效果...

    本文实例为大家分享了C语言实现漂亮的烟花效果展示的具体代码,供大家参考,具体内容如下 程序名称:祝福烟花,祝福朋友 编译环境:VC++6.0 && easyx(立冬版) #includ ...

  4. 除夕跨年烟花特效[原创]

    除夕跨年烟花特效[原创] 这是一个纯javascript除夕跨年烟花特效 体验入口:除夕跨年烟花 开源地址: https://gitee.com/Hauiteut/Spanning2022 烨拓科讯技 ...

  5. 2022跨年烟花代码

    演示 2022跨年烟花演示 基于b站的视频修改了一点点,演示:抖音演示 我的b站:川川菜鸟 部署网站链接:跨年烟花 部分代码 <!DOCTYPE html PUBLIC "-//W3C ...

  6. 2023跨年烟花(浪漫烟花+美妙音乐+雪花飘飘)含前端源码直接下载---系列最终篇

    2023年快要到来啦,很高兴这次我们又能一起度过~ 特辑最终篇!!!  视觉中国 目录 一.前言 二.跨年烟花 三.效果展示 四.详细介绍 五.编码实现 index.html js 六.获取代码 需要 ...

  7. 2022跨年烟花代码|用Python送你一场跨年烟花秀

    2021 已经接近尾声了,2022 即将到来,本文我们用 Python 送你一场跨年烟花秀. 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模 ...

  8. 2022跨年烟花代码、用Python送你一场跨年烟花秀

    2021 已经接近尾声了,2022 即将到来,本文我们用 Python 送你一场跨年烟花秀. 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模 ...

  9. 2023跨年烟花代码HTML5夜景放烟花绽放动画效果

    2023跨年烟花代码HTML5夜景放烟花绽放动画效果 HTML5夜景放烟花绽放动画效果 html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

最新文章

  1. git查看各个branch之间的关系图
  2. 腾讯、网易邮箱设置POP3客户端代理
  3. flutter 版本控制fvm
  4. linux中cd命令及范例,15个Linux中的“cd”命令的实际示例
  5. VUE 入坑系列 一 双向绑定
  6. 序号47指标横向展示.xlsx_电力监控系统安全防护规定Akey310参数指标
  7. 使用Git bash软件计算文件MD5值
  8. 调用微博API获取微博内容
  9. Axure各种版本注册码 | 最新Axure RP 8.1.0.3377的授权码
  10. 神州计算机u盘启动,神舟台式电脑怎么bios设置u盘启动教程
  11. Flutter 未检测到iOS模拟器以及Android Studio无法获取iOS模拟器的问题
  12. 看_那人好像一个产品狗_对_这就是产品狗
  13. 如何在iOS手机上进行自动化测试
  14. 应用内悬浮窗适配方案实战
  15. kubernetes 亲和、反亲和、污点、容忍
  16. pandas强大的Python数据分析工具
  17. 怎么用计算机按反三角函数的导数,反三角函数求导过程
  18. AutoCAD按坐标打印图纸
  19. 视频点播服务器性能,基于排队论的视频点播系统性能分析
  20. AirFlow调度执行Talend ETL任务

热门文章

  1. Android开发之语音朗读
  2. kaili不能输入中文怎么办???
  3. PL/SQL Developer 下载
  4. 基于机器视觉的工业机器人定位系统
  5. MongoDB数据库常用操作命令
  6. 医学图像分割 基于深度学习的肝脏肿瘤分割 实战(一)
  7. C语言中字符串拼接之#,##的妙用
  8. 2021年R2移动式压力容器充装证考试题库及压力容器作业R2移动式压力容器充装试题解析
  9. 中国计算机函授学院历任校长是谁,中国计算机函授学院  全国十佳教学站校长会议在学院总部召开...
  10. Deep visual domain adaptation: A survey