520浪漫代码流星雨

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;
}

图片素材:

 

代码效果:

先出现黑色背景的各种五颜六色点点组成的星空,接着出现粉色与紫色的流星雨

 

 

  • 8
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值