c++实现流星雨

// 流星雨.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<graphics.h>
#include<mmstream.h>
#include<conio.h>
#include<stdio.h>
#pragma comment(lib,"winmm.lib")
#include<Windows.h>
#include<time.h>
#define MAXSTAR1 600
#define MAXSTAR 1000

struct STAR
{
	int x,y,step,style;
}star[MAXSTAR];
struct STAR1
{
	int x,y,step,color;
	
}star1[MAXSTAR1];
IMAGE image;
/*
int main()
{
	initgraph(640,640); //创建一个窗口
	mciSendString("open 等你下课.mp3 alias music",0,0,0);//加载音乐
	mciSendString("play music repeat",0,0,0);//播放音乐
	loadimage(&image,"2.jpg",640,640);
	putimage(0,0,&image);
	
	
	while(1);//Sleep(10000);
	return 0;
}
*/
//星星模块
void initStar1(int i);
void moveStar1(int i);
//流行模块
void initstar(int i);
void moveStar();
void drawStar();
//初始化
void initData();



int main()
{
	initData();
	mciSendString("open 等你下课.mp3 alias music",0,0,0);//加载音乐
	mciSendString("play music repeat",0,0,0);//播放音乐
	while(1)
	{
		BeginBatchDraw(); 
		cleardevice();
		for(int i= 0 ;i<MAXSTAR1;i++)
		{
			 moveStar1(i);
		}
		moveStar();
		drawStar();
		Sleep(50);
		EndBatchDraw();
	}
	closegraph();
}

void moveStar1(int i)
{
	putpixel(star1[i].x,star1[i].y,0);
	star1[i].x += star1[i].step;
		if(star1[i].x >640)
			initStar1(i);
		putpixel(star1[i].x,star1[i].y,star1[i].color);
}
void initData()
{
	srand((unsigned int)time(NULL));
	initgraph(640,480);
	
	//初始化星空
	loadimage(&image,"1.jpg",50,50);
	int i = 0;
	for( i = 0; i<MAXSTAR1 ;i++)
	{
		initStar1(i);
		star1[i].x  = rand()%640;
	}
		
	//初始化流量
	for(i = 0;i<MAXSTAR ; i++)
	{
		initstar(i);
	}
}
void initStar1(int i)
{
	star1[i].x = 0;
	star1[i].y = rand() % 480;
	star1[i].step = rand()%5;
	star1[i].color = RGB(star1[i].step*51,star1[i].step*51,star1[i].step*51);
}
//流行实现

void initstar(int i)
{
	star[i].x = rand()%1280 -640 ;  //-640 --640
	star[i].y = -144;
	do
	{
		star[i].step = rand()%30 +1;
	}while(star[i].step<5);
	star[i].style = rand()%3+1;
}
void moveStar()
{
	for(int i=0 ; i<MAXSTAR;i++)
	{
		star[i].x += star[i].step;
		star[i].y += star[i].step*0.8;
	}
}
void drawStar()
{
	for(int i= 0 ;i<MAXSTAR ;i++)
	{
		switch(star[i].style)
		{
		case 1:
			putimage(star[i].x,star[i].y,&image,SRCPAINT);
			break;
		}
	}
}
素材下载:链接:https://pan.baidu.com/s/11hLMs_1bGeeQO9JtWH0F9w 密码:g6ny

猜你喜欢

转载自blog.csdn.net/zzb2019/article/details/80188100