您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C语言实战之浪漫烟花表白程序
创建win32控制台应用程序,选择空项目。创建完毕后,右击头文件新建一个头文件(.h)。名字写main.h然后在源文件新建一个C++文件(.cpp)。名字写main.cpp如图:然后在main.h里面写上如下代码:#includestdio.h#includegraphics.h#includetime.h#includestdlib.h#includemath.h#includemmsystem.h#pragmacomment(lib,winmm.lib)#definePI3.1415926535#defineNUM13//烟花弹structJET{intx,y;//坐标inthx,hy;//最高点坐标boolshoot;//判断烟花弹是不是发射状态DWORDt1,t2,dt;//烟花弹发射的速度IMAGEimg[2];//图片2张一明一暗的两张byten:1;//结构体位段变量n占用内存的一个位!}jet[NUM];//烟花structFIRE{intr;//半径intmaxr;//最大半径intx,y;//相对于窗口中心点的坐标intcenx,ceny;//相对于图片本身中心点的坐标intwidth,height;intxy[240][240];//图片保存到一个像素矩阵。boolshow;//是否绽放booldraw;//是否绘制DWORDt1,t2,dt;//爆炸的速度}fire[NUM];voidInit(inti);voidLoad();voidChose(DWORD&t1);voidShoot();voidShow(DWORD*pem);在main.cpp写上如下代码:/*************************************************************************************************************************表白浪漫烟花项目开发************************************主讲人:三黑之毅****************************************最后修改:2019年3月20日*************************************************************************************************************************/#includemain.hintmain(){//打开一个窗口1200800initgraph(1200,800);srand((unsignedint)time(NULL));mciSendString(Lopen./fire/千年.mp3aliasbgm,0,0,0);mciSendString(Lplaybgmrepeat,0,0,0);DWORDt1=GetTickCount();DWORD*pem=GetImageBuffer();for(inti=0;iNUM;i++){Init(i);}Load();BeginBatchDraw();while(1){Sleep(10);for(intclr=0;clr1000;clr++){for(intj=0;j2;j++){intpx1=rand()%1200;intpy1=rand()%800;if(py1799){pem[py1*1200+px1]=pem[py1*1200+px1+1]=BLACK;}}}Chose(t1);Shoot();Show(pem);FlushBatchDraw();}return0;}//初始化13个voidInit(inti){//分别为:烟花中心到图片边缘的最远距离、烟花中心到图片左上角的距离(x、y)两个分量intr[15]={120,120,155,123,130,147,138,138,130,135,140,132,155,145,124};intx[15]={120,120,110,117,110,93,102,102,110,105,100,108,110,145,124};inty[15]={120,120,85,118,120,103,105,110,110,120,120,104,85,145,124};fire[i].width=500;fire[i].height=500;fire[i].maxr=r[i];fire[i].cenx=x[i];fire[i].ceny=y[i];fire[i].show=false;fire[i].t1=GetTickCount();fire[i].dt=5;fire[i].r=0;//初始化烟花弹的部分数据jet[i].t1=GetTickCount();//定个时间点jet[i].dt=rand()%10;//0-9msjet[i].n=0;jet[i].shoot=false;//都是没有发射的。}//加载图片voidLoad()//加载到哪里去?{IMAGEfm,gm;loadimage(&fm,L./fire/flower.jpg,3120,240);for(inti=0;iNUM;i++){SetWorkingImage(&fm);//fm去拿getimage(&gm,i*240,0,240,240);//gmSetWorkingImage(&gm);//gm去拿for(inta=0;a240;a++){for(intb=0;b240;b++){fire[i].xy[a][b]=getpixel(a,b);}}}//文件夹IMAGEsm;loadimage(&sm,L./fire/shoot.jpg,200,50);//保存在smfor(inti=0;iNUM;i++){SetWorkingImage(&sm);//sm去拿intn=rand()%5;//0-4getimage(&jet[i].img[0],n*20,0,20,50);//暗的getimage(&jet[i].img[1],(n+5)*20,0,20,50);//亮的}SetWorkingImage(NULL);//sm去拿}//选择烟花弹烟花弹产生的速度!!!voidChose(DWORD&t1){DWORDt2=GetTickCount();//13个if(t2-t11)//每隔1个ms产生一个烟花弹{intn=rand()%NUM;//0-12if(jet[n].shoot==false&&fire[n].show==false)//非发射状态{jet[n].x=rand()%1200;jet[n].y=rand()%100+600;//600-699之间jet[n].hx=jet[n].x;jet[n].hy=rand()%400;//0-399jet[n].shoot=true;//发射状态putimage(jet[n].x,jet[n].y,&jet[n].img[jet[n].n],SRCINVERT);}t1=t2;}}voidShoot(){for(inti=0;iNUM;i++){jet[i].t2=GetTickCount();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);if(jet[i].y=jet[i].hy)//到达最高点了{//擦除烟花弹putimage(jet[i].x,jet[i].y,&jet[i].img[jet[i].n],SRCINVERT);//烟花弹最高点的hxhy-----》烟花fire[i].x=jet[i].hx;fire[i].y=jet[i].hy;//改变烟花弹的状态jet[i].shoot=false;fire[i].show=true;}putimage(jet[i].x,jet[i].y,&jet[i].img[jet[i].n],SRCINVERT);jet[i].t1=jet[i].t2;}}}voidShow(DWORD*pem){intdir[16]={5,5,5,5,5,8,25,25,25,55,55,55,55,65,65,66};for(inti=0;iNUM;i++){fire[i].t2=GetTickCount();if(fire[i].t2-fire[i].t1fire[i].dt&&fire[i].show==true){if(fire[i].rfire[i].maxr){fire[i].r++;fire[i].dt=dir[fire[i].r/10];fire[i].draw=true;}if(fire[i].r=fire[i].maxr-1){fire[i].draw=false;Init(i);}fire[i].t1=fire[i].t2;}if(fire[i].draw==true){//圆PIfor(doublea=0;a=6.28;a+=0.01){intx1=(int)(fire[i].cenx+fire[i].r*cos(a));inty1=(int)(fire[i].ceny-fire[i].r*sin(a));if(x10&&x1fire[i].width&&y10&&y1fire[i].height){intb=fire[i].xy[x1][y1]&0xff;intg=(fire[i].xy[x1][y1]8)&0xff;intr=fire[i].xy[x1][y1]16;intxx=(int)(fire[i].x+fire[i].r*cos(a));intyy=(int)(fire[i].y-fire[i].r*sin(a));if(r0x20&&g0x20&&b0x20&&xx0&&xx1200&&yy0&&yy800)pem[yy*1200+xx]=BGR(fire[i].xy[x1][y1]);}}fire[i].draw=false;}}}/*注:音乐:千年.mp3,自己去网上下载,然后放到程序fire目录下。注:图片素材就是这两张:自己下载一下这两图,也放到fire目录下。学习c语言:幼儿园英语水平初中数学水平高中语文水平也就是说只要会记单词就行!!!业务逻辑写程序的顺序这是最主要的,而并不是代码会了所有代码,脑子里没有业务逻辑,还是没用,被称为“码农”还是不懂的联系q:2060164008或进q群:706625210。今天直播到此结束!!!三黑之毅!*/
本文标题:C语言实战之浪漫烟花表白程序
链接地址:https://www.777doc.com/doc-3767398 .html