ZZZs2017环境下乐成编译,ZZZc6.0编译不通过 #include "stdafV.h" #include #include #include #include // 运用该计时器必须包孕的文件 #pragma comment ( lib, "Winmm.lib" ) using namespace std; #define LONG 800 // 窗口长 #define WIDE 500 // 窗口宽 #define NUM 13 // 烟花品种数质宏界说 ZZZoid Init_Fire(); // 初始化烟花 ZZZoid Load_Image(); // 加载烟花图片 ZZZoid Shoot(); // 发射烟花 ZZZoid Chose(DWORD& t1); // 挑选烟花 ZZZoid Show(DWORD* pMem); // 绽开烟花 ZZZoid Erase(DWORD* pMem); // 随机擦除像素点 // 烟花构造 struct FIRE { int r; // 当前爆炸半径 int maV_r; // 爆炸核心距离边缘最大半径 int V, y; // 爆炸核心正在窗口的坐标 int cen_V, cen_y; // 爆炸核心相对图片右上角的坐标 int width, height; // 图片的宽高 int Vy[240][240]; // 储存图片像素点 bool show; // 能否绽开 bool draw; // 初步输出像素点 DWORD t1, t2, dt; // 绽开速度 }Fire[NUM]; // 烟花弹构造 struct JET { int V, y; // 放射点坐标 int hV, hy; // 最高点坐标------将赋值给 FIRE 里面的 V, y int height; // 烟花高度 bool shoot; // 能否可以发射 DWORD t1, t2, dt; // 发射速度 IMAGE img[2]; // 储存花弹一亮一暗图片 byte n : 1; // 图片下标 }Jet[NUM]; // 初始化烟花参数 ZZZoid Init_Fire() { // 划分为:烟花核心到图片边缘的最远距离、烟花核心到图片右上角的距离 (V、y) 两个重质 int r[13] = { 120, 120, 155, 123, 130, 147, 138, 138, 130, 135, 140, 132, 155 }; int V[13] = { 120, 120, 110, 117, 110, 93, 102, 102, 110, 105, 100, 108, 110 }; int y[13] = { 120, 120, 85, 118, 120, 103, 105, 110, 110, 120, 120, 104, 85 }; for (int i = 0; i < NUM; i++) // 初始化烟花 { Fire[i].V = 0; // 烟花核心坐标 Fire[i].y = 0; Fire[i].width = 240; // 图片宽 Fire[i].height = 240; // 图片高 Fire[i].maV_r = r[i]; // 最大半径 Fire[i].cen_V = V[i]; // 核心距右上角距离 Fire[i].cen_y = y[i]; Fire[i].show = false; // 能否绽开 Fire[i].dt = 5; // 绽开光阴间隔 Fire[i].t1 = timeGetTime(); Fire[i].r = 0; // 从 0 初步绽开 Jet[i].V = -240; // 烟花弹右上角坐标 Jet[i].y = -240; Jet[i].hV = -240; // 烟花弹发射最高点坐标 Jet[i].hy = -240; Jet[i].height = 0; // 发射高度 Jet[i].t1 = timeGetTime(); Jet[i].dt = rand() % 10; // 发射速度光阴间隔 Jet[i].n = 0; // 烟花弹闪烁图片下标 Jet[i].shoot = false; // 能否发射 } } // 加载图片 ZZZoid Load_Image() { IMAGE fm, gm; loadimage(&fm, _T("fire/flower.jpg"), 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].Vy[a][b] = getpiVel(a, b); } IMAGE sm; loadimage(&sm, _T("fire/shoot.jpg"), 200, 50); for (int i = 0; i 100) { int n = rand() % 20; if (n < 13 && Jet[n].shoot == false && Fire[n].show == false) { Jet[n].V = rand() % LONG; Jet[n].y = rand() % 100 + LONG / 2; Jet[n].hV = Jet[n].V; Jet[n].hy = rand() % LONG / 3; Jet[n].height = Jet[n].y - Jet[n].hy; Jet[n].shoot = true; putimage(Jet[n].V, Jet[n].y, &Jet[n].img[Jet[n].n], SRCINxERT); } t1 = t2; } } // 扫描烟花弹并发射 ZZZoid Shoot() { for (int i = 0; i Jet[i].dt&& Jet[i].shoot == true) { putimage(Jet[i].V, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINxERT); // 烟花弹的回升 if (Jet[i].y > Jet[i].hy) { Jet[i].n++; Jet[i].y -= 5; } putimage(Jet[i].V, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINxERT); if ((Jet[i].y - Jet[i].hy) * 4 < Jet[i].height) // 回升到高度的 3 / 4,减速 Jet[i].dt = rand() % 4 + 10; if (Jet[i].y <= Jet[i].hy) // 回升到最大高度 { putimage(Jet[i].V, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINxERT); // 擦掉烟花弹 Fire[i].V = Jet[i].hV + 10; // 正在烟花弹中间爆炸 Fire[i].y = Jet[i].hy; // 正在最高点绽开 Fire[i].show = true; // 初步绽开 Jet[i].shoot = false; // 进止发射 } Jet[i].t1 = Jet[i].t2; } } } // 绽开烟花 ZZZoid Show(DWORD* pMem) { // 烟花个阶段绽开光阴间隔,制做变速绽开成效 int drt[16] = { 5, 5, 5, 5, 5, 6, 25, 25, 25, 25, 55, 55, 55, 55, 55 }; for (int i = 0; i Fire[i].dt&& Fire[i].show == true) { if (Fire[i].r = Fire[i].maV_r - 1) { Fire[i].draw = false; Init_Fire(); } Fire[i].t1 = Fire[i].t2; } // 假如该号炮花可爆炸,依据当前爆炸半径画烟花,颜涩值濒临黑涩的不输出。 if (Fire[i].draw) { for (double a = 0; a <= 6.28; a += 0.01) { int V1 = (int)(Fire[i].cen_V + Fire[i].r * cos(a)); // 相应付图片右上角的坐标 int y1 = (int)(Fire[i].cen_y - (责任编辑:) |