来自程序猿的流星雨



原文地址:http://jingyile.gotoip2.com/%e6%9d%a5%e8%87%aa%e7%a8%8b%e5%ba%8f%e7%8c%bf%e7%9a%84%e6%b5%81%e6%98%9f%e9%9b%a8/

昨天在一个公众号上看到用C++实现的一场流星雨场景图,惊艳到了一直没怎么接触过图形库的我,于是想着自己实现一个类似的场景,不知道是codeblocks本身的原因还是我安装图形库的过程出了点问题,反正就是好多错误,于是弃用CB改用VS2013进行编程了,下面先归纳一下用到的一些东西:

图形库

头文件:grphics.h

创建图形窗口:initgraph(int width,int height);

画点:putpixel(int x,int y,color);

音乐

头文件:mmsystem.h

加载静态库:#pragma comment(lib,”winmm.lib”)

打开音乐:mciSendString(“open 音乐路径 alias music”, 0, 0, 0);
播放音乐:mciSendString(“play music repeat”, 0, 0, 0);

贴图

设置图片变量:IMAGE

加载图片:loadimage(&img, 图片路径, 长, 宽);

输出图片:putimage(0, 0, &img, SRCPAINT);

随机数

随机数种子:srand((unsigned int)time(NULL));

使用:rand()函数

———————————————————————————————————————————————————

写的真的很一般的代码:


#include<time.h>
//#include<mmsystem.h>此头文件有些问题.....
#include <graphics.h>//图形库头文件
#pragma comment(lib,"winmm.lib")
#define MAXStar 1000 //星星
#define MAXStar0 300 //流星
IMAGE img1, img2, img3, img4;
void initData();
void initStar(int i);
void initStar0(int i);
void moveStar(int i);
void moveStar0();
void drawStar0();
struct STAR//星星
{
	int x, y;
	int v;
	int color;
}star[MAXStar];

struct STAR0//流星
{
	int x, y;
	int v;
	int style;//图片样式
}star0[MAXStar0];

int main()
{
	initData();
	mciSendString("open 666.mp3 alias music", 0, 0, 0);//背景音乐
	mciSendString("play music repeat", 0, 0, 0);
	while (1)
	{
		BeginBatchDraw();
		cleardevice();
		for (int i = 0; i < MAXStar; i++)
		{
			moveStar(i);
		}
		moveStar0();
		drawStar0();
		Sleep(100);
		EndBatchDraw();
	}
	closegraph();
	return 0;
}
void  initData()
{
	srand((unsigned int)time(NULL));
    initgraph(980,720);
	//初始化数据
	loadimage(&img1, "P1.jpg", 50, 50);
	loadimage(&img2, "P2.jpg", 50, 50);
	loadimage(&img3, "P3.jpg", 50, 50);
	loadimage(&img4, "P4.jpg", 50, 50);
	//初始化星星
	int i;
	for (i = 0; i<MAXStar; i++)
	{
		initStar(i);
		star[i].x = rand() % 640;
	}
	//初始化流星
	for (i = 0; i<MAXStar0; i++)
	{
		initStar0(i);
		star0[i].x = rand() % 640;
	}

}
void initStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].v = rand() % 5;
	star[i].color = RGB(star[i].v * 51, star[i].v * 51, star[i].v * 51);//255/5=51;
}
void initStar0(int i)
{
	star0[i].x = rand() % 1280 - 2080;
	star0[i].y = -100;
	do
	{
		star0[i].v = rand() % 30 + 1;
	} while (star0[i].v<5);//避免出现速度过慢的
	star0[i].style = rand() % 4 + 1;//1-4
}
void moveStar(int i)
{
	putpixel(star[i].x, star[i].y, 0);
	star[i].x += star[i].v;
	if (star[i].x>640)
		initStar(i);
	putpixel(star[i].x, star[i].y, star[i].color);
}
void moveStar0( )
{
	for (int i = 0; i < MAXStar0; i++)
	{
		star0[i].x += star0[i].v;
		star0[i].y += star0[i].v;
	}
}
void drawStar0()
{
	for (int i = 0; i < MAXStar0; i++)
	{
		switch (star0[i].style)
		{
		case 1:
			putimage(star0[i].x, star0[i].y, &img1, SRCPAINT);
			break;
		case 2:
			putimage(star0[i].x, star0[i].y, &img2, SRCPAINT);
			break;
		case 3:
			putimage(star0[i].x, star0[i].y, &img3, SRCPAINT);
			break;
		case 4:
			putimage(star0[i].x, star0[i].y, &img4, SRCPAINT);
			break;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/JYL1159131237/article/details/80619544