分享一下我的烟花代码,图片可以去百度自己搜索,如想要可以私信找我取
#include #include #include #include "math.h"#include "time.h"//烟花弹struct Jet {int x = 0, y = 0;int hx = 0, hy = 0;unsigned long t1 = 0, t2 = 0, dt = 0;IMAGE img;bool isshoot = 1;}jet;Jet jet1, jet2, jet3;//烟花struct Fire {int r = 0;//当前半径int maxr = 0;//最大半径int x = 0, y = 0; //中心点坐标(窗口)int cx = 0, cy = 0;//中心点坐标(图画)int xy[240][240]; //保存像素点bool isboom = 0; //是否爆炸bool isdraw = 0;//是否显示unsigned long t1 = 0, t2 = 0, dt = 0; //爆炸速度}fire;Fire fire1, fire2, fire3;void jet_init(Jet* jetn) //烟花弹的初始化{jetn->x = rand() % 1100 - 20;jetn->y = rand() % 50 + 700;jetn->hx = jetn->x;jetn->hy = rand() % 450;jetn->t1 = GetTickCount();//获取系统时间jetn->isshoot = true;jetn->dt = rand() % 10 + 1;}void fire_init(Fire* firen){firen->r = 0;firen->maxr = 120;firen->cx = 120; firen->cy = 120; //中心点的坐标(图片)firen->isboom = true; firen->isdraw = false;firen->t1 = GetTickCount();firen->dt = 5; //烟花爆炸速度IMAGE fimg;loadimage(&fimg, L"烟花4.jpg", 240, 240);SetWorkingImage(&fimg);for (int a = 0; a < 240; a++){for (int b = 0; b xy[a][b] = getpixel(a, b); //传入像素点}}SetWorkingImage();}//函数测试void fire_text(Jet* jetn, Fire* firen){DWORD* pmem = GetImageBuffer();jetn->t2 = GetTickCount();if (jetn->t2 - jetn->t1 > jetn->dt && jetn->isshoot == true){putimage(jetn->x, jetn->y, &jetn->img, SRCINVERT);if (jetn->y > jetn->hy){jetn->y -= 5;putimage(jetn->x, jetn->y, &jetn->img, SRCINVERT);}if (jetn->y hy) //烟花弹移动出界{jetn->isshoot = false;putimage(jetn->x, jetn->y, &jetn->img, SRCINVERT);fire_init(firen);//烟花的初始化firen->x = jetn->hx + 10;firen->y = jetn->hy - 20;}if (jetn->isshoot == false && firen->isboom == true && firen->isdraw == 0){jet_init(jetn);putimage(jetn->x, jetn->y, &jetn->img, SRCINVERT);}jetn->t1 = jetn->t2;//烟花int drt[13] = { 5,5,5,10,10,15,15,25,35,40,40,55,55 }; //不一样的速度firen->t2 = GetTickCount();if (firen->t2 - firen->t1 > firen->dt && firen->isboom == true){if (firen->r maxr){firen->r++;firen->dt = drt[firen->r / 10];firen->isdraw = true;}if (firen->r > firen->maxr - 1){firen->isdraw = false;firen->isboom = false;//初始化烟花firen->r = 0;firen->maxr = 120;}firen->t1 = firen->t2;if (firen->isdraw = true){for (double a = 0; a < 6.28; a += 0.01){for (int m = 0; m r; m++)//x1 y1 来自像素点的628个像素坐标{int x2 = firen->cx + m * cos(a);int y2 = firen->cy - m * sin(a);//如果数据正常,获取像素点的三原色系if (x2 > 0 && x2 0 && y2 xy[x2][y2] & 0xff;int g = (firen->xy[x2][y2] >> 8) & 0xff;int r = firen->xy[x2][y2] >> 16;//求圈上的点在窗体上的坐标int xx2 = firen->x + m * cos(a);int yy2 = firen->y - m * sin(a);if (/*b > 0x20 && g > 0x20 && r > 0x20 &&*/ xx2 0 && yy2 > 0 && yy2 xy[x2][y2]);}}}}firen->isdraw == false;}}}}int ss = 0;int Fire_Finally() //烟花主函数{initgraph(1100, 800);srand(time(0));/*-----------------------------------------图片------------------------------------*/jet_init(&jet);loadimage(&jet.img, L"烟花弹2.jpg", 20, 50);putimage(jet.x, jet.y, &jet.img, SRCINVERT);DWORD* pmem = GetImageBuffer();BeginBatchDraw();while (1){for (int clr = 0; clr < 1000; clr++){for (int j = 0; j < 2; j++){int px1 = rand() % 1200;int py1 = rand() % 650;if (py1 < 790){pmem[py1 * 1200 + px1] = pmem[py1 * 1200 + px1 + 1] = BLACK;}}}fire_text(&jet, &fire);FlushBatchDraw();}EndBatchDraw();closegraph();return 0;}int main(){Fire_Finally();system("pause");return 0;}
这是一个烟花连续放的程序,如果要更多的烟花道理相同,如果不想自己写可以私信我哦。