C语言好看的流星雨笔记

我学习的这种流星雨是通过VS2013和easyx图形库相结合而产生的exe文件
我先讲一下实现效果:
我这个流星雨的实现效果为,背景为星星,从左上角向右下角飘流星,很适合程序员的浪漫的!!
如图:为程序实现后的效果!
应该是流动性的,这里贴的是静图
程序

思路是:
分模块编写,并实现的叭
星星:建立星星属性类(之后方便调用)------>星星初始化属性------>画星星在控制台上
流星:建立流星属性类(之后方便调用)------>流星初始化属性------>贴流星图在控制台上
主函数:在主函数中初始化并调用这些函数,这样的话,可以让美丽漂亮的星星以及流星在屏幕上

接下来是程序编写环节:

#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+5;//[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);//创建图形窗口
	loadimage(&img1,"1.jpg",50,50);//加载图片
	loadimage(&img2,"2.jpg",30,30);//加载图片
	int i=0;
	for(i=0;i<1000;i++)
	{
		initStar(i);//画1000个星星
	}
	for(i=0;i<520;i++)
	{
		initMeteor(i);//初始化所有星星
	}
	while(1)
	{
		BeginBatchDraw();//防止闪屏,和EndBatchDraw()搭配使用
		cleardevice();//刷新
		for(i=0;i<1000;i++)//画1000个星星
		{
			drawStar(i);
		}
		drawMeteor(i);//调用函数
		moveMeteor(i);
		Sleep(50);//加延时
		EndBatchDraw();
	}
	system("pause");
	return 0;
}

流星素材
在这里插入图片描述
在这里插入图片描述
欢迎交流指正~~~

猜你喜欢

转载自blog.csdn.net/weixin_41946168/article/details/105658840