C语言烟花代码—兔年顶呱呱

article/2025/10/23 23:19:48

        废话不多说,直接上码

代码,歌曲,烟花图片都在压缩包里
链接: https://pan.baidu.com/s/1_459s0fFCAX1DcQa_BnHMQ?pwd=qw12 
提取码: qw12

要看效果的也可以看我抖音:

1210246294

#include<stdio.h>
#include<easyx.h>
#include<time.h>
#include<stdlib.h>
#include <Windows.h>
#include<math.h>
#include <conio.h>  
#pragma comment(lib,"winmm.lib")
#include<mmsystem.h>
IMAGE img;
IMAGE img1;
IMAGE img2;
IMAGE img3;
#define num 10
#define PI 3.14
struct Fire  //创建烟花弹结构体类型
{int x, y;//初始坐标int max_x, max_y;//烟花最大高度IMAGE Img[2];//保存图片bool boom;//是否要爆开
};
struct Fire fire[num];struct Show
{int x, y;//绽放的位置int cx, cy;//烟花中心点坐标int r;//当前的半径int max_r;//最大半径int pixel[200][200];//图片像素数组bool isshow;   // 是否绽放bool isdraw;	 // 开始输出像素点DWORD t1, t2, dt;int width, height;
};
struct Show show[num];void initshow(int i)//初始化烟花
{show[i].cx = 100;show[i].cy = 100;show[i].r = 0;show[i].max_r = 100;show[i].width = 200;show[i].height = 200;show[i].isshow = false;show[i].dt = 5;show[i].t1 = timeGetTime();//时间获取速度
}void initfire(int i)//初始化烟花弹
{fire[i].x = rand() % 700 + 100;//烟花弹坐标初始化x=100-800;y=100-400;fire[i].y = 600;fire[i].max_x = fire[i].x;fire[i].max_y = rand() % 300 + 100;fire[i].boom = false;loadimage(&fire[i].Img[0], "烟花弹.png", 20, 60);
}void load()//加载烟花图片
{for (int k = 0; k < num; k++){	int a = rand() % 3 + 1;loadimage(&img1, "烟花1.png", 200, 200);//三种不同的烟花loadimage(&img2, "烟花2.png", 200, 200);loadimage(&img3, "烟花3.png", 200, 200);if(a==1)SetWorkingImage(&img1);elseif(a==2)SetWorkingImage(&img2);elseSetWorkingImage(&img3);for (int i = 0; i < 200; i++){for (int j = 0; j < 200; j++){show[k].pixel[i][j] = getpixel(i, j);//把图片像素点放到数组中}}}SetWorkingImage(NULL);
}void Draw(int i, DWORD* pMem)//绘制一圈像素点
{if (show[i].isdraw){for (double a = 0; a <= 2*PI; a += 0.01)   //一圈628个像素点{//(x1,y1)是相对于烟花小图片的 像素 坐标点int x1 = (int)(show[i].cx + show[i].r * cos(a));int y1 = (int)(show[i].cy + show[i].r * sin(a));if (x1 > 0 && x1 < show[i].width && y1>0 && y1 < show[i].height){int b = show[i].pixel[x1][y1] & 0xff;   //blueint g = (show[i].pixel[x1][y1] >> 8) & 0xff;   //greenint r = show[i].pixel[x1][y1] >> 16;   //red//(xx,yy)是相对于窗口的 像素 坐标点int xx = (int)(show[i].x + show[i].r * cos(a));int yy = (int)(show[i].y + show[i].r * sin(a));if (r > 0x20 && g > 0x20 && b > 0x20 && xx < 1000 && xx>0 && yy > 0 && yy < 600){//把(x1,y1)坐标上的像素点 赋值 给(xx,yy)坐标点pMem[yy * 1000 + xx] = BGR(show[i].pixel[x1][y1]);}}}show[i].isdraw = false;}
}void fire_boom(DWORD* pMem)//烟花绽放
{int  drt[16] = { 5, 5, 5, 5, 15, 15, 25, 25, 35, 35, 55, 55, 65, 65, 75, 75 };for (int i = 0; i < num; i++){show[i].t2 = timeGetTime();if (show[i].t2 - show[i].t1 > show[i].dt && show[i].isshow == true){if (show[i].r < show[i].max_r){show[i].r++;show[i].dt = drt[show[i].r / 10];  //每十个烟花像素点改变一下烟花绽放的速度show[i].isdraw = true;}if (show[i].r >= show[i].max_r - 1){show[i].isdraw = false;initshow(i);initfire(i);}//更新时间show[i].t1 = show[i].t2;//可以绽放的状态Draw(i,pMem);}}
}void fire_up()//烟花弹上升
{for (int i = 0; i < num; i++){putimage(fire[i].x, fire[i].y, &fire[i].Img[0], SRCINVERT);//消除残影if (fire[i].y > fire[i].max_y){fire[i].y -= 10;//向上移动}else {	//已到达最高点,准备绽放show[i].x = fire[i].x+10;show[i].y = fire[i].y;fire[i].boom = true;show[i].isshow = true;}putimage(fire[i].x, fire[i].y, &fire[i].Img[0], SRCINVERT);}
}void word()//文字提醒-“请按任意键...”
{settextcolor(RED);settextstyle(25, 0, "宋体");outtextxy(400, 550, "请");Sleep(500);outtextxy(425, 550, "按");Sleep(500);outtextxy(450, 550, "任");Sleep(500);outtextxy(475, 550, "意");Sleep(500);outtextxy(500, 550, "键");Sleep(500);outtextxy(525, 550, ".");Sleep(500);outtextxy(550, 550, ".");Sleep(500);outtextxy(575, 550, ".");
}int main()
{int i = 0;srand((unsigned int)time(NULL));initgraph(1000, 600);//初始化图形界面loadimage(&img, "2023.png", 1000, 600);putimage(0,0,&img,SRCINVERT);//背景图mciSendString("open 打上花火.mp3",0,0,0);//播放—“打上花火”mciSendString("play 打上花火.mp3", 0, 0, 0);Sleep(1000);word();//文字提醒-“请按任意键...”_getch();//输入任意键继续DWORD* pMem = GetImageBuffer();for (int i = 0; i < num; i++)//初始化烟花弹和烟花{initfire(i);initshow(i);}load();//加载烟花图片while (1){for (int i = 0; i < 3000; i++){int px1 = rand() % 1000; // 0..1199int py1 = rand() % 600;  // 0.799pMem[py1 * 1000 + px1] = BLACK;pMem[py1 * 1000 + px1 + 1] = BLACK;	// 对显存赋值擦出像素点		}fire_up();//发射烟花弹fire_boom(pMem);//烟花绽放Sleep(50);}return 0;
}

   运行效果如下:

5a662066fbf2479a8abf2adc16b4f20b.png


http://chatgpt.dhexx.cn/article/5l4Fpy1I.shtml

相关文章

爱心c语言简单代码

前言&#xff1a;对于c语言&#xff0c;在我看来十分重要&#xff0c;是所有语言编程语言的鼻祖。 今天先跟大家分享一个编程c语言的软件&#xff0c;visual studio 2019 在这里选择你想要的版本。 安装密匙 这是一些&#xff0c;希望可以帮助到大家。 安装以后我们打开vs201…

经典C语言从入门到入坑必学最简单的代码

解锁IT男超哥电脑中沉睡已久的C语言代码 当IT男超哥再看到这一串串代码&#xff0c;其实IT男超哥很久没有写C语言代码了&#xff0c;然后根据以前的片段开始用旧代码写的新代码&#xff0c;这让我想起&#xff0c;我的大学老师有一节课让我回答问题&#xff0c;老师说C语言代码…

C语言初学者必学必会的C语言必背100代码

对于C语言这门计算机语言&#xff0c;算是老生常谈了&#xff0c;现在就由我来给大家分享几个关于C语言的几个代码吧&#xff01;(如果有错的地方还望见谅) 1.入门级别hello&#xff0c;world #include<stdio.h> int main() { printf("Hello,world!\n"); …

【Latex】表格样例大全

1 % 所需包 \usepackage{type1cm} \begin{table*}[t]\caption{Performance of MeFA (Adult). }\label{tab_1

LaTeX表格行高、列间距设置

一、前言 对于如下 LaTeX 代码生成的表格&#xff1a; \begin{table}[!htbp]\centering\begin{tabular}{|l|l|l|l|}\hline~ & col1 & col2 & col3 \\ \hlinerow1 & 1 & 2 & 3 \\ \hlinerow2 & 4 & 5 & 6 \\ \hline\end{tabular} \end{ta…

LaTeX 表格

本系列文章由 @YhL_Leo 出品,转载请注明出处。 文章链接: http://blog.csdn.net/yhl_leo/article/details/50066137 一些LaTeX中表格的使用方法如下: 1.table \documentclass{article}\begin{document}\begin{table}[h]\centering\begin{tabular}{|l|c|c|}\hlineSetting…

【LaTeX教程】六.LaTeX中的表格

欢迎订阅本专栏&#xff1a;《LaTeX教程》 专栏介绍&#xff1a; 博主是一名重度LaTeX使用人员&#xff0c;想借此专栏跟大家分享LaTeX的使用心得&#xff0c;同时为LaTeX初学者们提供一些入门经验。欢迎正在使用或者即将使用LaTeX的小伙们一键三连&#xff08;收藏❤️、点赞…

Latex 表格技巧 - 合并单元格

简介 Latex的表格功能非常强大&#xff0c;但是在初学的过程中可能遇到很多棘手的问题&#xff0c;这里给出了如何合并单元格的几种做法&#xff0c;重点是合并多行多列的做法 合并一行多列单元格 合并1行多列可以使用\multicolumn{cols}{pos}{text}来实现 \documentclass[…

4. LaTeX 表格样式与常用表格类型

LaTeX 表格格式与常用表格类型 在论文写作过程中&#xff0c;经常需要通过表格化的方式呈现一些数据&#xff0c;LaTeX 所有的宏包文件都要写在 \documentclass 命令之后和 \begin{document} 之前。在本文中&#xff0c;会用到与 LaTeX 表格相关的宏包如下&#xff1a; \docum…

【LaTeX】复杂表格的制作:Excel2LaTeX及细节调整

刚开始用LaTeX写论文&#xff0c;遇到的第一道坎就是绘制表格&#xff0c;较小的普通表格可以通过简单的语法实现&#xff0c;但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具&#xff1a;Excel2LaTeX插件&#xff0c;下载地址&#…

Latex 定制合并表格

Latex 表格定制 Latex 表格位置参数说明表格例子合并行合并列合并行与列 Table说明 Latex 表格位置参数说明 参数位置c将文本置于中间l将文本左对齐r将文本右对齐p{宽度}文本对齐单元格顶部m{宽度}文本对齐单元格中间b{宽度}文本对齐单元格底部 更多的选项&#xff1a; 选项…

LATEX关于表格的一些处理

文章目录 1、表格初步1.1 导言区11.2 导言区21.3 其他指令 2、单元格的合并2.1 按照列合并2.2 按照行合并2.3 多行列合并 3 列的设置技巧3.1 固定列宽设置(水平对齐)3.2 固定列宽设置(垂直左中右对齐)3.3 列设置(设置输出为手写体数字) 4 行的设置4.1 添加行间距方法一4.2 调整…

Latex: 表格内换行

遇到表格内容太长&#xff0c;需要换行。需要用到 makecell 指令就可以轻松实现。 首先&#xff0c;需要宏包&#xff1a; \usepackage{makecell} 然后&#xff0c;主要要在 tabular 里面使用。 其次&#xff0c;用法是&#xff1a; \makecell[居中情况]{第1行内容 \\ 第2行内…

LaTeX各种表格

彩色表格 [plain] view plain copy \begin{table} \centering \caption{彩色的表格} \begin{tabular} {>{\columncolor{blue}}rccccc} \toprule[1pt] \rowcolor[gray]{0.9} &1 &2 &3 &4 &5\\ \midrule A &\multicolumn{1}{>{\…

LaTeX中常用表格制作方法总结

文章目录 前言最基本的无线表格: tabbing基本语法 一般表格: tabular/array基本语法基本调整命令 科研论文: 三线表(toprule)基本语法 广泛应用: 定宽表(tabularx)简单介绍基本语法 跨页长表格(longtable)MISC参考 前言 很多 LaTeX \LaTeX LATE​X初学者对于表格的制作都比较抵…

Latex 表格问题

在用latex做图片的时候发现问题没有很多&#xff0c;但是做表格的问题就非常多了&#xff0c;因此记录一下 首先导包需要 \usepackage{array} \usepackage{booktabs} \usepackage{caption} % 可有可无 然后制作简单表格参考该处&#xff1a; Latex基本表格绘制_爱摸鱼的派…

LaTeX表格制作

一些LaTeX中表格的使用方法如下&#xff1a; 1.table \documentclass{article}\begin{document}\begin{table}[h]\centering\begin{tabular}{|l|c|c|}\hlineSetting&\multicolumn{2}{c|}{A4 size paper}\\\hline&mm&inches\\Top&25&1.0\\Bottom&25&a…

LaTex中表格常用设置

推荐一个在线生成各种表格命令的工具&#xff1a;https://tablesgenerator.com/。 1.表格参数 table 后面加*表示双栏表格&#xff0c;如\begin{table*}...\end{table*}。 表格中常用选项[htbp]是浮动格式&#xff1a; h当前位置。将图形放置在正文文本中给出该图形环境的地…

Latex中的表格(2)

Latex中的表格 一、一个加脚注的三线表的例子二、一个表格中加注释的例子三、两个并排的两个表格的例子3.1 使用小页环境并排表格3.2 使用子表格并排表格 四、一个格式复杂的表格的例子五、一个长表格的例子 这篇文章主要罗列一些特殊的表格例子。内容来自&#xff1a;一篇北师…

【教程】在线生成LaTeX中的表格

【教程】在线生成LaTeX中的表格 当我们写论文时不可避免要用表格总结自己的实验结果。但是LaTeX中的表格操作实在是太麻烦了&#xff0c;所以有一个在线生成LaTex中的表格能大大提高生产力 本教程展示从Excel表格到LaTeX表格的整个过程&#xff0c;简单易用&#xff0c;不用自己…