zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言/C++常见习题问答集锦(七十九)唯美系列之短暂而永恒

C++C语言 系列 常见 习题 集锦 问答 永恒
2023-09-14 09:01:32 时间

C语言/C++常见习题问答集锦(七十九)唯美系列之短暂而永恒

程序之美

在这里插入图片描述
星空下的夜,是最让我回忆的夜,静静地想你的夜;星空下的夜,流星划过,是我那相思的泪;星空下的夜,曾多少次想过与你一起看流星雨,数着那仿佛在眨眼的星星,可以在流星划过的瞬间,许下爱的承诺!血仿佛流光了,也仿佛凝固了,只留下一道深深的痕迹—伤痕,如那划过的流星!
当然,作为一名码农,什么不都的实践一下不,下面我们就用代码的方法来表达我们心中的流星雨—数字流星雨。
话不多说,先看运行结果:

在这里插入图片描述

代码示例:

#include<stdio.h>

#include<stdlib.h>

#include<graphics.h>//图形界面库

#include<conio.h>

#include<time.h>

#include<mmsystem.h>

#pragma comment(lib,"winmm")



#define MAXSTAR 1000

#define MAXMETEOR 100



IMAGE img1, img2, img3;

//星星的属性

struct Star

{

	int x, y;

	int step;

	int color;

}star[MAXSTAR];

//流星的属性

struct Meteor

{

	int x, y;

	int step;

	int style;

}meteor[MAXMETEOR];



//初始化星星

void initStar(int i)

{

	star[i].x = rand() % 1000; //[0,999]

	star[i].y = rand() % 600;

	star[i].step = rand() % 6 + 3; //[0,5]

	star[i].color = RGB(rand() % 255, rand() % 255, rand() % 255);

}

//画星星和移动星星

void moveStar(int i)

{

	//画像素点

	putpixel(star[i].x, star[i].y, star[i].color);

	//移动处理

	star[i].x += star[i].step;

	//如果移动到了窗口外面

	if (star[i].x > 1920)

	{

		putpixel(star[i].x, star[i].y, star[i].color);

		initStar(i);

	}

}

//初始化流星

void initMeteor(int i)

{

	meteor[i].x = rand() % 2000 - 1000;//[-1000,999]

	meteor[i].y = -600;//[0,599]-600-->[-600,-1]

	meteor[i].step = rand() % 30 + 2;

	meteor[i].style = rand() % 3; //[0,2]-->0,1,2

}

//初始化数据

void initDate(int i)

{

	//加载图片

	loadimage(&img1, "./s1.png", 30, 30);

	loadimage(&img2, "./s2.png", 40, 40);

	loadimage(&img3, "./s1.png", 50, 50);



	for (i = 0; i < MAXSTAR; i++)

	{

		initStar(i);

	}

	for (i = 0; i < MAXMETEOR; i++)

	{

		initMeteor(i);

	}

}

//画流星:贴图

void drawMeteor(int i)

{

	for (i = 0; i < MAXMETEOR; i++)

	{

		switch (meteor[i].style)

		{

		case 0:

			putimage(meteor[i].x, meteor[i].y, &img1, SRCPAINT);

			break;

		case 1:

			putimage(meteor[i].x, meteor[i].y, &img2, SRCPAINT);

			break;

		case 2:

			putimage(meteor[i].x, meteor[i].y, &img3, SRCPAINT);

			break;

		}

	}

}

//移动流星

void moveMeteor(int i)

{

	for (i = 0; i < MAXMETEOR; i++)

	{

		meteor[i].x += meteor[i].step;

		meteor[i].y += meteor[i].step;

		//如果流星跑到窗口外面

		if (meteor[i].x > 1920 || meteor[i].y > 1080)

		{

			initMeteor(i);

		}

	}

}

//文字输出

void text()

{

	settextcolor(RGB(rand() % 255, rand() % 255, rand() % 255));

	settextstyle(30, 0, "楷体");

	const char* text[50] = { "X", "X", "X", "我", "喜", "欢", "你", "做", "我", "女", "朋", "友", "吧", "!", };

	int x = 1920, y = 1080;

	for (int i = 0; i < 14; i++)

	{

		if (i < 7)

			outtextxy(x, y + i * 50, text[i]);

		else

			outtextxy(x + 100, y + (i - 7) * 50, text[i]);

	}

}

int main()

{

	initgraph(1920, 1080);

	mciSendString("open 2.mp3", 0, 0, 0);

	mciSendString("play 2.mp3 repeat", 0, 0, 0);

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

	setbkmode(TRANSPARENT);

	int i = 0;

	initDate(i);

	while (1)

	{

		cleardevice();

		for (i = 0; i < MAXSTAR; i++)

		{

			moveStar(i);

		}

		drawMeteor(i);

		moveMeteor(i);

		text();



		Sleep(100);

	}

	_getch();

	closegraph();

	return 0;

}

所需素材:
在这里插入图片描述
在这里插入图片描述

好了,今天就说这么多了,希望小伙伴们能从这篇文章中学到东西,也真心希望能够帮助正在苦学C语言的小伙伴们,你们的成长是我最大的幸福。很感谢您能够在百忙之中浏览我的文章。