c语言 烟花函数(firework 2.0)源代码
时间:2014-03-18 19:10 来源: 我爱IT技术网 作者:山风
c语言 烟花函数(firework 2.0)源代码。纠结了很久的烟花程序总算完成了...源代码写在这,供亲们参考
程序编译环境: Visual Studio 2010, EasyX 库 2013冬至版,包含graphics.h头文件
执行效果:

#include#include #include #include #include #define MAX 15 //MAX为屏幕上最大出现烟花数目 #define PI 3.1415926 //定义数值”π(PI)“, 小数点取至后4-7位 //定义储存烟花弹信息的结构体 struct firework { double x; //定义烟花弹横坐标(x) double y; //定义烟花弹纵坐标(y) double height; //定义烟花弹最大飞行高度height double Speed; //定义烟花弹飞行/烟花爆炸速度 double Radius; //当前烟花爆炸半径,初始值全部初始化为0 double MaxRadius; //烟花最大爆炸半径 int color; //烟花弹/烟花爆炸时颜色 }; firework FData[MAX]; //结构体”firework“类型的结构体数组,存放整组初始化烟花数据 //烟花数据初始化函数 void InitFirework(int i) { FData[i].y=0; //初始化烟花弹飞行纵坐标,初始值为0 FData[i].x=rand()%600; //初始化烟花弹飞行横坐标,范围0-599 FData[i].height=rand()%400+150; //初始化烟花弹飞行最大高度,范围150-550 FData[i].Speed=(rand()%4000)/1000+4; //初始化烟花弹飞行速度,范围4.000-7.999 FData[i].MaxRadius=rand()%80+100; //初始化烟花爆炸最大半径,范围100-180 FData[i].Radius=0; //初始化当前烟花爆炸半径为0 FData[i].color=RGB(rand()%255,rand()%255,rand()%255); //初始化烟花弹/爆炸颜色,RGB模式,三色随机取值,范围0-255 } void Fuzzifier(DWORD* pMem) //全屏泛光(模糊效果)处理函数 { for(int i=600;i<600*599;i++) //定义范围600-359400(600*599),防止越界 { pMem[i] = RGB( //赋值显存,颜色为周围上下左右4个加起来5点颜色平均值 (GetRValue(pMem[i]) + GetRValue(pMem[i - 600]) + GetRValue(pMem[i - 1]) + GetRValue(pMem[i + 1]) + GetRValue(pMem[i + 600])) / 5, (GetGValue(pMem[i]) + GetGValue(pMem[i - 600]) + GetGValue(pMem[i - 1]) + GetGValue(pMem[i + 1]) + GetGValue(pMem[i + 600])) / 5, (GetBValue(pMem[i]) + GetBValue(pMem[i - 600]) + GetBValue(pMem[i - 1]) + GetBValue(pMem[i + 1]) + GetBValue(pMem[i + 600])) / 5); } } void Erase(DWORD* pMem) //擦除函数,用来擦除全屏泛光(模糊)无法处理的第一和最后一行(0-599,359400-359999) { for(int i=600*599+1;i<600*600;i++) { pMem[i]=RGB(0,0,0); } for(int i=0;i<599;i++) { pMem[i]=RGB(0,0,0); } } void Blow(int i) //烟花上升函数 { setcolor(0);setfillcolor(0); //烟花弹当前位置由其速度决定 FData[i].y+=FData[i].Speed; //判断烟花是否满足达到飞行最大高度和烟花爆炸完成(dangqianbanjing>=最大半径)两个条件 if(FData[i].y>=FData[i].height&&FData[i].Radius>=FData[i].MaxRadius) InitFirework(i); //是,则重置烟花数据重新发射 if(FData[i].y>=FData[i].height&&FData[i].Radius =FData[i].height) { Explode(i); } } //全屏泛光(模糊)处理 Fuzzifier(pMem); //擦除 Erase(pMem); //显示绘图 FlushBatchDraw(); //延迟8毫秒(0.008秒) Sleep(8); } }
本文来源 我爱IT技术网 http://www.52ij.com/jishu/4170.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
