视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
带继字的男孩名字 带治字的男孩名字 带民字的男孩名字 带旭字的男孩名字 带婷字的女孩名字 带娴字的女孩名字 好听的女孩名字唯美 带欣字的女孩名字 带希字的男孩名字 带伯字的男孩名字 带涵字的女孩名字 男生好听的名字现代的 女生好听名字大全 五行带水的女孩名字 带水的男孩名字 世上最好听的女孩名字 带乙字的男孩名字 带祺字的男孩名字 带承字的女孩名字 带昌字的男孩名字 带涛字的女孩名字 男孩大气响亮的名字 带芊字的女孩名字 100个好听的女孩名字 女孩好听的名字有气质 带扬字的男孩名字 带千字的女孩名字 带鸿字的男孩名字 带洛字的女孩名字 男生好听的名字2个字 带镜字的男孩名字 带林字的女孩名字 带煦字的男孩名字 带敏字的女孩名字 带弘字的男孩名字 女生名字大全有寓意的 女生好听的名字两个字 带琨字的男孩名字 带瑾字的男孩名字 带轩字的男孩名字
c++表白代码烟花
2022-01-12 11:09:01 责编:李赢赢
文档

c++表白代码烟花是什么呢?不知道的小伙伴来看看小编今天的分享吧!

烟花源代码:

#include <graphics.h>

#include <conio.h>

#include <math.h>

#include <time.h>

#include <stdio.h>

#include <Mmsystem.h>

#pragma comment ( lib, "Winmm.lib" )

/***** 宏定义区 ******/

#define NUM13// 烟花种类数量宏定义

#define PI 3.1415926548

/***** 结构定义区 **********/

// 烟花结构

struct FIRE

{

int r;// 当前爆炸半径

int max_r;// 爆炸中心距离边缘最大半径

int x, y;// 爆炸中心在窗口的坐标

int cen_x, cen_y;// 爆炸中心相对图片左上角的坐标

int width, height;// 图片的宽高

int xy[240][240];// 储存图片像素点

bool show;// 是否绽放

bool draw;// 开始输出像素点

DWORD t1, t2, dt;// 绽放速度

}Fire[NUM];

// 烟花弹结构

struct JET

{

int x, y;// 喷射点坐标

int hx, hy;// 最高点坐标------将赋值给 FIRE 里面的 x, y

int height;// 烟花高度

bool shoot;// 是否可以发射

DWORD t1, t2, dt;// 发射速度

IMAGE img[2];// 储存花弹一亮一暗图片

byte n : 1;// 图片下标

}Jet[NUM];

/**** 函数申明区 ****/

void welcome();

void Init(int);// 初始化烟花

void Load();// 加载烟花图片

void Shoot();// 发射烟花

void Chose(DWORD&);// 筛选烟花

void Style(DWORD&);// 发射样式

void Show(DWORD*);// 绽放烟花

// 主函数

void main()

{

initgraph(1200, 800);

srand(time(0));

// 播放背景音乐

mciSendString("open ./fire/bk.mp3 alias bk", 0, 0, 0);

mciSendString("play bk repeat", 0, 0, 0);

welcome();

DWORD t1 = timeGetTime();// 筛选烟花计时

DWORD st1 = timeGetTime();// 播放花样计时

DWORD* pMem = GetImageBuffer();// 获取窗口显存指针

for (int i = 0; i < NUM; i++)// 初始化烟花

{

Init(i);

}

Load();// 将烟花图片信息加载进相应结构中

BeginBatchDraw();// 开始批量绘图

while (!kbhit())

{

Sleep(10);

// 随机选择 4000 个像素点擦除

for (int clr = 0; clr < 1000; clr++)

{

for (int j = 0; j < 2; j++)

{

int px1 = rand() % 1200;

int py1 = rand() % 800;

if (py1 < 799)// 防止越界

pMem[py1 * 1200 + px1] = pMem[py1 * 1200 + px1 + 1] = BLACK;// 对显存赋值擦出像素点

}

}

Chose(t1);// 筛选烟花

Shoot();// 发射烟花

Show(pMem);// 绽放烟花

Style(st1);// 花样发射

FlushBatchDraw();// 显示前面的所有绘图操作

}

}

void welcome()

{

//setfillstyle(0);

setcolor(YELLOW);

for (int i = 0; i < 50; i++)

{

int x = 600 + int(180 * sin(PI * 2 * i / 60));

int y = 200 + int(180 * cos(PI * 2 * i / 60));

cleardevice();

settextstyle(i, 0, "楷体");

outtextxy(x, y, "烟花");

outtextxy(x, y-50, "制作人:小魔王");

outtextxy(x - 130, y + 100, "用代码将梦想照进现实!");

Sleep(25);

}

getchar();

cleardevice();

settextstyle(25, 0, "楷体");

outtextxy(400, 150, "什么都没有总比现在的好");

outtextxy(400, 200, "有一点点希望");

outtextxy(400, 250, "就得有多少的期望?");

outtextxy(400, 300, "又他妈的换来多少失望?");

outtextxy(400, 350, "烟花再美又怎么样?");

outtextxy(400, 400, "女孩自己要懂得自己挣钱");

outtextxy(400, 450, "会开车会打扮");

outtextxy(400, 500, "车子有油");

outtextxy(400, 550, "手机有电");

outtextxy(400, 600, "钱包有钱");

outtextxy(400, 650, "再光鲜亮丽的副驾驶也不及自己握方向盘");

getchar();

}

// 初始化烟花参数

void Init(int i)

{

// 分别为:烟花中心到图片边缘的最远距离、烟花中心到图片左上角的距离 (x、y) 两个分量

int r[13] = { 120, 120, 155, 123, 130, 147, 138, 138, 130, 135, 140, 132, 155 };

int x[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 };

/**** 初始化烟花 *****/

Fire[i].x = 0;// 烟花中心坐标

Fire[i].y = 0;

Fire[i].width = 240;// 图片宽

Fire[i].height = 240;// 图片高

Fire[i].max_r = r[i];// 最大半径

Fire[i].cen_x = x[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].x = -240;// 烟花弹左上角坐标

Jet[i].y = -240;

Jet[i].hx = -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;// 是否发射

}

// 加载图片

void Load()

{

/**** 储存烟花的像素点颜色 ****/

IMAGE fm, gm;

loadimage(&fm, "./fire/flower.jpg", 3120, 240);

for (int i = 0; i < 13; 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].xy[a][b] = getpixel(a, b);

}

/**** 加载烟花弹 ************/

IMAGE sm;

loadimage(&sm, "./fire/shoot.jpg", 200, 50);

for (int i = 0; i < 13; i++)

{

SetWorkingImage(&sm);

int n = rand() % 5;

getimage(&Jet[i].img[0], n * 20, 0, 20, 50);// 暗

getimage(&Jet[i].img[1], (n + 5) * 20, 0, 20, 50);// 亮

}

SetWorkingImage();// 设置回绘图窗口

}

// 在一定范围内筛选可发射的烟花,并初始化发射参数,输出烟花弹到屏幕,播放声音

void Chose(DWORD& t1)

{

DWORD t2 = timeGetTime();

if (t2 - t1 > 100)

{

int n = rand() % 20;

if (n < 13 && Jet[n].shoot == false && Fire[n].show == false)

{

/**** 重置烟花弹,预备发射 *****/

Jet[n].x = rand() % 1200;

Jet[n].y = rand() % 100 + 600;

Jet[n].hx = Jet[n].x;

Jet[n].hy = rand() % 400;

Jet[n].height = Jet[n].y - Jet[n].hy;

Jet[n].shoot = true;

putimage(Jet[n].x, Jet[n].y, &Jet[n].img[Jet[n].n], SRCINVERT);

/**** 播放每个烟花弹的声音 *****/

char c1[50], c2[30], c3[30];

sprintf(c1, "open ./fire/shoot.mp3 alias s%d", n);

sprintf(c2, "play s%d", n);

sprintf(c3, "close n%d", n);

mciSendString(c3, 0, 0, 0);

mciSendString(c1, 0, 0, 0);

mciSendString(c2, 0, 0, 0);

}

t1 = t2;

}

}

// 扫描烟花弹并发射

void Shoot()

{

for (int i = 0; i < 13; i++)

{

Jet[i].t2 = timeGetTime();

if (Jet[i].t2 - Jet[i].t1 > Jet[i].dt && Jet[i].shoot == true)

{

/**** 烟花弹的上升 *****/

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT);

if (Jet[i].y > Jet[i].hy)

{

Jet[i].n++;

Jet[i].y -= 5;

}

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT);

/**** 上升到高度的 3 / 4,减速 *****/

if ((Jet[i].y - Jet[i].hy) * 4 < Jet[i].height)

Jet[i].dt = rand() % 4 + 10;

/**** 上升到最大高度 *****/

if (Jet[i].y <= Jet[i].hy)

{

// 播放爆炸声

char c1[50], c2[30], c3[30];

sprintf(c1, "open ./fire/bomb.wav alias n%d", i);

sprintf(c2, "play n%d", i);

sprintf(c3, "close s%d", i);

mciSendString(c3, 0, 0, 0);

mciSendString(c1, 0, 0, 0);

mciSendString(c2, 0, 0, 0);

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT);// 擦掉烟花弹

Fire[i].x = Jet[i].hx + 10;// 在烟花弹中间爆炸

Fire[i].y = Jet[i].hy;// 在最高点绽放

Fire[i].show = true;// 开始绽放

Jet[i].shoot = false;// 停止发射

}

Jet[i].t1 = Jet[i].t2;

}

}

}

// 显示花样

void Style(DWORD& st1)

{

DWORD st2 = timeGetTime();

if (st2 - st1 >20000)// 一首歌的时间

{

// 心形坐标

int x[13] = { 60, 75, 91, 100, 95, 75, 60, 45, 25, 15, 25, 41, 60 };

int y[13] = { 65, 53, 40, 22, 5, 4, 20, 4, 5, 22, 40, 53, 65 };

for (int i = 0; i < NUM; i++)

{

//cleardevice();

/**** 规律分布烟花弹 ***/

Jet[i].x = x[i] * 10;

Jet[i].y = (y[i] + 75) * 10;

Jet[i].hx = Jet[i].x;

Jet[i].hy = y[i] * 10;

Jet[i].height = Jet[i].y - Jet[i].hy;

Jet[i].shoot = true;

Jet[i].dt = 7;

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT);// 显示烟花弹

/**** 设置烟花参数 ***/

Fire[i].x = Jet[i].x + 10;

Fire[i].y = Jet[i].hy;

Fire[i].show = false;

Fire[i].r = 0;

/**** 播放发射声音 ***/

char c1[50], c2[30], c3[30];

sprintf(c1, "open ./fire/shoot.mp3 alias s%d", i);

sprintf(c2, "play s%d", i);

sprintf(c3, "close n%d", i);

mciSendString(c3, 0, 0, 0);

mciSendString(c1, 0, 0, 0);

mciSendString(c2, 0, 0, 0);

}

st1 = st2;

}

}

// 绽放烟花

void 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 < NUM; i++)

{

Fire[i].t2 = timeGetTime();

// 增加爆炸半径,绽放烟花,增加时间间隔做变速效果

if (Fire[i].t2 - Fire[i].t1 > Fire[i].dt && Fire[i].show == true)

{

if (Fire[i].r < Fire[i].max_r)

{

Fire[i].r++;

Fire[i].dt = drt[Fire[i].r / 10];

Fire[i].draw = true;

}

if (Fire[i].r >= Fire[i].max_r - 1)

{

Fire[i].draw = false;

Init(i);

}

Fire[i].t1 = Fire[i].t2;

}

// 如果该号炮花可爆炸,根据当前爆炸半径画烟花,颜色值接近黑色的不输出。

if (Fire[i].draw)

{

for (double a = 0; a <= 6.28; a += 0.01)

{

int x1 = (int)(Fire[i].cen_x + Fire[i].r * cos(a));// 相对于图片左上角的坐标

int y1 = (int)(Fire[i].cen_y - Fire[i].r * sin(a));

if (x1 > 0 && x1 < Fire[i].width && y1 > 0 && y1 < Fire[i].height)// 只输出图片内的像素点

{

int b = Fire[i].xy[x1][y1] & 0xff;

int g = (Fire[i].xy[x1][y1] >> 8) & 0xff;

int r = (Fire[i].xy[x1][y1] >> 16);

// 烟花像素点在窗口上的坐标

int xx = (int)(Fire[i].x + Fire[i].r * cos(a));

int yy = (int)(Fire[i].y - Fire[i].r * sin(a));

// 较暗的像素点不输出、防止越界

if (r > 0x20 && g > 0x20 && b > 0x20 && xx > 0 && xx < 1200 && yy > 0 && yy < 800)

pMem[yy * 1200 + xx] = BGR(Fire[i].xy[x1][y1]);// 显存操作绘制烟花

}

}

Fire[i].draw = false;

}

}

}

以上就是小编今天的分享了,希望可以帮助到大家。

下载本文
显示全文
专题带继字的男孩名字带继字的男孩名字专题带治字的男孩名字带治字的男孩名字专题带民字的男孩名字带民字的男孩名字专题带旭字的男孩名字带旭字的男孩名字专题带婷字的女孩名字带婷字的女孩名字专题带娴字的女孩名字带娴字的女孩名字专题好听的女孩名字唯美好听的女孩名字唯美专题带欣字的女孩名字带欣字的女孩名字专题带希字的男孩名字带希字的男孩名字专题带伯字的男孩名字带伯字的男孩名字专题带涵字的女孩名字带涵字的女孩名字专题男生好听的名字现代的男生好听的名字现代的专题女生好听名字大全女生好听名字大全专题五行带水的女孩名字五行带水的女孩名字专题带水的男孩名字带水的男孩名字专题世上最好听的女孩名字世上最好听的女孩名字专题带乙字的男孩名字带乙字的男孩名字专题带祺字的男孩名字带祺字的男孩名字专题带承字的女孩名字带承字的女孩名字专题带昌字的男孩名字带昌字的男孩名字专题带吉字的男孩名字带吉字的男孩名字专题带宜字的女孩名字带宜字的女孩名字专题带知字的男孩名字带知字的男孩名字专题带海字的女孩名字带海字的女孩名字专题带火的字女孩名带火的字女孩名专题女孩起什么名字好听又气质女孩起什么名字好听又气质专题带逸字的女孩名字带逸字的女孩名字专题带雄字的男孩名字带雄字的男孩名字专题带园字的女孩名字带园字的女孩名字专题带芝字的女孩名字带芝字的女孩名字专题树脂瓦配件翘角专题徕卡专卖店北京专题树脂粘土手工作品专题弯管器如何把握尺寸视频专题微信运动和手机步数专题树种介绍牌专题树脂瓦颜色会脱色吗专题手游变态西游下载专题手机怎么录音手机里的内容专题树脂瓦含石棉吗专题微信怎么才能用钱专题定力洗车机专题公司电子章申请专题树莓派基础专题每天喝白粥减肥吗专题今天是正常上班吗专题2022年吉祥数字是多少专题舒适达牙膏的正确用法专题树种在院子哪里好专题每天肚子饿就是不想吃饭专题