520到了不知道准备点啥给女朋友好,整一手流星雨,带给她不一样的浪漫。
效果如图:女朋友很是喜欢
编译环境:VS2022, 要带有Easyx库
代码:
//2022.5.20 流星雨代码
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include<conio.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
IMAGE img1, img2;
//星星属性
struct Star
{
int x, y;//坐标
int step;//速度
int color;//颜色
}star[1000];
//流星属性
struct Metor
{
int x, y;//坐标
int step;//速度
int style;//风格,即是哪一种图片
}meteor[520];
//初始化星星
void initStar(int i)
{
star[i].x = rand() % 1000;
star[i].y = rand() % 600;
star[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);//星星的颜色采用五颜六色
star[i].step = rand() % 5 + 2;
}
//初始化流星
void initMeteor(int i)
{
meteor[i].x = rand() % 2000 - 1000;//这样的话,取的值就是在[0,1999]之间
meteor[i].y = rand() % 200;//[0,199]-400;
meteor[i].step = rand() % 20 + 2;//[0,40]+5
meteor[i].style = rand() % 2;//流星有两种风格随便取
}
//画流星
void drawMeteor(int i)
{
for (i = 0; i < 520; i++)
{
if (meteor[i].style == 0)
{
putimage(meteor[i].x, meteor[i].y, &img1, SRCPAINT);//为了防止这流星图片重叠,而加的SRCPAINT
}
if (meteor[i].style == 1)
{
putimage(meteor[i].x, meteor[i].y, &img2, SRCPAINT);//贴图函数
}
}
}
//画星星
void drawStar(int i)
{
putpixel(star[i].x, star[i].y, star[i].color);
star[i].x += star[i].step;
if (star[i].x > 1000)
{
putpixel(star[i].x, star[i].y, star[i].color);
initStar(i);
}
}
//移动流星
void moveMeteor(int i)
{
for (i = 0; i < 520; i++)
{
meteor[i].x += meteor[i].step;
meteor[i].y += meteor[i].step;
if (meteor[i].x > 1000 || meteor[i].y > 600)
{
initMeteor(i);
}
}
}
int main()
{
srand((unsigned int)time(NULL));//随机种子
initgraph(1000, 600);//创建图形窗口
//注意要提前把图片拖到工程文件夹下,pic为自定义的文件名称,1.png为图片名称及格式
loadimage(&img1, _T("./pic/1.png"),30, 30);//加载图片
loadimage(&img2, _T("./pic/2.png"), 27, 27);//加载图片
int i = 0;
for (i = 0; i < 1000; i++)
{
initStar(i);//画1000个星星
}
for (i = 0; i < 520; i++)
{
initMeteor(i);//初始化所有星星
}
for (i = 0; i < 1000; i++)//画1000个星星
{
drawStar(i); Sleep(1);
}
//加延时
while (1)
{
BeginBatchDraw();//防止闪屏,和EndBatchDraw()搭配使用
cleardevice();//刷新
for (i = 0; i < 1000; i++)//画1000个星星
{
drawStar(i);
}
drawMeteor(i);//调用函数
moveMeteor(i);
Sleep(100);//加延时
EndBatchDraw();
}
system("pause");
return 0;
}
图片素材:
代码效果:
先出现黑色背景的各种五颜六色点点组成的星空,接着出现粉色与紫色的流星雨