【c++】新年烟花完整代码
分享一下我的烟花代码,图片可以去百度自己搜索,如想要可以私信找我取
(图片来源网络,侵删)
#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 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 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这是一个烟花连续放的程序,如果要更多的烟花道理相同,如果不想自己写可以私信我哦。
(图片来源网络,侵删)(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...