满天星空的代码实现

满天星空代码实现

#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>

using namespace std;

#define RGB_AMOUNT		250      //颜色数量
#define SCREEN_WIDTH	1000      //屏幕宽度
#define SCREEN_HEIGHT	800			//屏幕高度
#define STAR_AMOUNT		400			//星星的数量
/******************
****星星的状态*****
******************/
enum class STAR_STATUS{
	STOP,
	UP,
	LEFT,
	DOWN,
	RIGHT,
	ALL_STATUS
};
/******************
星星结构体的定义
******************/
class Star {
public:
	Star(){}
public:
	int x;
	int y;
	int radius;
	int rgb;
	STAR_STATUS status;
};
Star star[STAR_AMOUNT];
/******************
功能:初始化单个星星
输入参数:
x 星星的x坐标   y 星星的y坐标
rgb 星星的颜色参数  radius 星星的半径
status 星星的状态
函数返回值:无
******************/
void initStar(Star& star, int x, int y, int rgb, int radius, STAR_STATUS status) {
	star.x = x;
	star.y = y;
	star.rgb = RGB(rgb,rgb,rgb); 
	star.radius = radius;
	star.status = status;
}
/******************
功能:初始化
输入参数:
无
函数返回值:无
******************/
void init() {
	initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);
	int x, y, radius, rgb;
	STAR_STATUS status;
	for (int i = 0;i < STAR_AMOUNT;i++){
		x = rand() % SCREEN_WIDTH;
		y = rand() % SCREEN_HEIGHT;
		rgb = RGB_AMOUNT-50*(rand() % 3);
		radius = rand() % 3;
		status = STAR_STATUS::STOP;	//所有星星默认静止,不闪烁
		initStar(star[i],x,y,rgb,radius,status);
	}
}
/******************
功能:将一颗星星放置在屏幕
输入参数:
star 一个 星型结构体的引用
函数返回值:无
******************/
void putStar(Star&star) {
		setfillcolor(star.rgb);
		solidcircle(star.x, star.y, star.radius);
}
/******************
功能:将所有星星放置在屏幕
输入参数:
无
函数返回值:无
******************/
void putAllStar() {
	for (int i = 0;i < STAR_AMOUNT;i++) {
		putStar(star[i]);
	}
}
/******************
功能:将一颗星星向屏幕上方移动
如果移动到顶部,则到底部继续向上
输入参数:
star 一个 星型结构体的引用
函数返回值:无
******************/
void starMove(Star& star) {
		setfillcolor(BLACK);
		solidcircle(star.x, star.y, star.radius);
		star.y -= 3;
		if (star.y <= 0) {
			star.y = SCREEN_HEIGHT;
		}
		setfillcolor(star.rgb);
		solidcircle(star.x, star.y, star.radius);

}
/******************
功能:将所有星星向屏幕上方移动
如果移动到顶部,则到底部继续向上
输入参数:
无
函数返回值:无
******************/
void starAllMove() {
	for (int i = 0;i < STAR_AMOUNT;i++) {
		starMove(star[i]);
	}
}
/******************
功能:将一颗星星按照星星的状态
进行闪烁
输入参数:
star 一个 星型结构体的引用
函数返回值:无
******************/
void starShining(Star& star) {
		setfillcolor(BLACK);
		solidcircle(star.x, star.y, star.radius);
		switch (star.status) {
		case STAR_STATUS::DOWN:  
			star.y += 2;
			break;
		case STAR_STATUS::UP:
			star.y -= 2;
			break;
		case STAR_STATUS::LEFT:
			star.x -= 2;
			break;
		case STAR_STATUS::RIGHT:
			star.x += 2;
			break;
		default:
			break;
		}
		setfillcolor(star.rgb);
		solidcircle(star.x, star.y, star.radius);
		star.status =(STAR_STATUS) (rand() % 5);
}
/******************
功能:将所有星星按各自照星星
的状态进行闪烁
输入参数:
star 一个 星型结构体的引用
函数返回值:无
******************/
void allStarShining() {
	for (int i = 0;i < STAR_AMOUNT;i++) {
		starShining(star[i]);
	}
}
int main() {
	init();
	putAllStar();
	while (1) {
		starAllMove();
		Sleep(100);	
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自www.cnblogs.com/Ybossy/p/12813053.html