c++表白代碼煙花, 什么是C表白碼煙花?不知道小伙伴們今天來看看邊肖的分享吧!
Fireworks源代碼:
#include graphics.h
#include conio.h
#include math.h
#include time.h
#include stdio.h
#include Mmsystem.h
#pragma comment ( lib, Winmm.lib )
/* * * * * *宏定義區(qū)域* * * * *
#define NUM13//煙花類型和數(shù)量的宏定義
#define PI 3.1415926548
/* * * * * *結(jié)構(gòu)定義區(qū)域* * * * * * * *
//煙花結(jié)構(gòu)
struct FIRE
{
int r;//當(dāng)前爆炸半徑
int max _ r;//從爆炸中心到邊緣的最大半徑
int x,y;//窗口中爆炸中心的坐標(biāo)
int cen_x,cen _ y;//爆炸中心相對于圖片左上角的坐標(biāo)
int寬度,高度;//圖片的寬度和高度
int xy[240][240];//存儲圖片像素
布爾秀;//是否開花?
布爾平局;//開始輸出像素點。
DWORD t1,t2,dt;//開花速度
}Fire[NUM];
//煙火炸彈結(jié)構(gòu)
struct JET
{
int x,y;//注入點的坐標(biāo)
int hx,hy;//最高的坐標(biāo)-將在火中賦給x,y。
int高度;//煙花高度
布爾射;//能發(fā)射嗎?
DWORD t1,t2,dt;//啟動速度
圖像img[2];//存儲一張一明一暗的圖片。
字節(jié)n:1;//圖片下標(biāo)
}Jet[NUM];
/* * * *函數(shù)聲明區(qū)* * */
void welcome();
void Init(int);//初始化fireworks
空載荷();//加載煙花圖片
void shot();//發(fā)射煙花
void choosed(DWORD);//篩選煙花
Void style (dword); //emission pattern
Void display (dword *); //Bloom fireworks
//主函數(shù)
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=time gettime();//過濾焰火計時
DWORD st1=time gettime();//播放花樣計時
DWORD * pMem=GetImageBuffer();//獲取窗口內(nèi)存指針
for(int I=0;i NUMI )//初始化fireworks
{
Init(i);
}
load();//將fireworks圖片信息加載到相應(yīng)的結(jié)構(gòu)中。
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]=黑色;//給視頻內(nèi)存賦值,擦除像素。
}
}
選擇了(t1);//放映煙花
shoot();//發(fā)射煙花
顯示(pMem);//綻放煙花
風(fēng)格(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,沒有比現(xiàn)在更好的了);
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();
}
//初始化煙花參數(shù)
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;//煙花中心坐標(biāo)
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;//煙花彈左上角坐標(biāo)
Jet[i].y=-240;
Jet[i].hx=-240;//煙花彈發(fā)射最高點坐標(biāo)
Jet[i].hy=-240;
Jet[i].height=0;//發(fā)射高度
Jet[i].t1=timeGetTime();
Jet[i].dt=rand() % 10;//發(fā)射速度時間間隔
Jet[i].n=0;//煙花彈閃爍圖片下標(biāo)
Jet[i].shoot=false;//是否發(fā)射
}
//加載圖片
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();//設(shè)置回繪圖窗口
}
//在一定范圍內(nèi)篩選可發(fā)射的煙花,并初始化發(fā)射參數(shù),輸出煙花彈到屏幕,播放聲音
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)
{
/**** 重置煙花彈,預(yù)備發(fā)射*****/
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;
}
}
//掃描煙花彈并發(fā)射
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;//停止發(fā)射
}
Jet[i].t1=Jet[i].t2;
}
}
}
//顯示花樣
void Style(DWORD st1)
{
DWORD st2=timeGetTime();
if (st2 - st1 20000)//一首歌的時間
{
//心形坐標(biāo)
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();
/**** 規(guī)律分布煙花彈***/
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);//顯示煙花彈
/**** 設(shè)置煙花參數(shù)***/
Fire[i].x=Jet[i].x + 10;
Fire[i].y=Jet[i].hy;
Fire[i].show=false;
Fire[i].r=0;
/**** 播放發(fā)射聲音***/
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;
}
//如果該號炮花可爆炸,根據(jù)當(dāng)前爆炸半徑畫煙花,顏色值接近黑色的不輸出。
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));//相對于圖片左上角的坐標(biāo)
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)//只輸出圖片內(nèi)的像素點
{
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);
//煙花像素點在窗口上的坐標(biāo)
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;
}
}
}
c++表白代碼煙花,以上就是本文為您收集整理的c++表白代碼煙花最新內(nèi)容,希望能幫到您!更多相關(guān)內(nèi)容歡迎關(guān)注。