C语言练手项目—流星雨表白—程序员的浪漫—脱单神器

穿越时间的屏障,扭曲,联结,消逝,重回。流星带来的是什么?绝望,亦或是希望。守望同一片天空的那份期望,三年前的相遇,你说出了你的名字,在比我名字更久之前的你。三年后的我,因为失去了什么而感到失落。现在我终于知道了,不要再走散了吧。醒来后还能记起来吗?你的名字是什么?

今天就为大家带来浪漫流星雨表白程序教程

先看下效果(背景照片、字体、流星雨图案这些都可依据个人喜好更换哈)

 怎么写呢,必不可少的图形库不能丢

#include

再加一个多媒体头文件

#include

设置背景图以及流星雨数量与图片

#define NUM 100	//流星雨数量

//背景图
IMAGE img_bk[2];
//流星图片
IMAGE img_meteor[2];

设置流星位置与速度

struct Meteor	//流星
{
	int x;
	int y;
	int speed;	//速度
};
struct Meteor meteor[NUM];

背景音乐

mciSendString(_T("open ./images/浪漫空气.mp3 alias bgm"), NULL, 0, NULL);

字体样式

settextstyle(40, 0, _T("华文行楷"));

字体颜色

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

背景图片

putimage(0, 0, img_bk);

主角登场,表白语句

outtextxy(450, 20, _T("德克萨斯,我喜欢你"));
		outtextxy(200, 100, _T("爱意随风起,风止意难平。"));
		outtextxy(200, 150, _T("我还是很喜欢你,像风吹过几万里"));
		outtextxy(200, 200, _T("春风十里不如你,我喜欢你"));
		outtextxy(200, 250, _T("曾经有份真挚的感情摆在我面前,我却没有珍惜"));
		outtextxy(200, 300, _T("春风十里,不及你嫣然一笑。"));
		outtextxy(200, 350, _T("天青等烟雨,而我在等你"));
		outtextxy(200, 400, _T("因为我爱你,所以纵容你"));
		outtextxy(200, 450, _T("情书是抄的,爱你是真的。"));
		outtextxy(200, 500, _T("----------------------------爱你的拉普兰德"));

气氛组少不了的礼花

for (size_t i = 0; i < 10; i++)
		{
			settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
			outtextxy(rand()%1200, rand() % 800, _T("♥"));
			outtextxy(rand() % 1200, rand() % 800, _T(""));
		}
		Sleep(1000);

一些细节


//初始化流星
void initMeteor(int i)
{
	meteor[i].x = rand() % (1200*2) - 1200;	//(0-1200,1200)
	meteor[i].y = rand() %20 - 200;		//(-78,-200)
	meteor[i].speed = rand() % 15 + 1;
}
//绘制流星
void drawMeteor()
{
	for (int i = 0; i < NUM; i++)
	{
		putimage(meteor[i].x, meteor[i].y, img_meteor + rand() % 2,SRCPAINT);
	}
}
//移动流星
void moveMeteor()
{
	//改变坐标就可以实现移动了,斜向x,y都要变化
	for (int i = 0; i < NUM; i++)
	{
		meteor[i].x += meteor[i].speed;
		meteor[i].y += meteor[i].speed;
		if (meteor[i].y > getheight() || meteor[i].x>getwidth())
		{
			initMeteor(i);
		}
	}
}

主函数

int main()
{
	//创建图形窗口
	initgraph(1200, 800,EW_SHOWCONSOLE);
	//加载图片
	loadimage(img_bk, _T("./images/welcome.png"),1200,800);
	loadimage(img_bk + 1, _T("./images/bk.png"),1200,800);
	loadimage(img_meteor, _T("./images/1.jpg"), 50, 50);
	loadimage(img_meteor+1, _T("./images/2.jpg"), 50, 50);

	welcome();

	for (size_t i = 0; i < NUM; i++)
	{
		initMeteor(i);
	}

	//防止闪屏,双缓冲
	BeginBatchDraw();	//开启双缓冲绘图
	while (true)
	{
		//控制画面的帧率 26帧 60
		int begin = clock();	//获取程序运行时间(毫秒数)

		putimage(0, 0, img_bk + 1);
		drawMeteor();
		moveMeteor();
		//Sleep(50);	//让程序休眠
		FlushBatchDraw();//刷新

		//获取程序总共的执行时间
		int timeRemaining = clock() - begin;
		//计算每帧需要的时间
		int timeFrame = 1000.0 / 60;
		//获取程序执行时间有没有超过,每帧执行的最大时间
		int delay = timeFrame - timeRemaining;
		if (delay > 0)
		{
			printf("%d\n", delay);	
			Sleep(delay);		//动态变化
		}
	}
	EndBatchDraw();

有个地方忘说了,记得设置透明背景模式

setbkmode(TRANSPARENT);

再完善一下整体格式与代码完整度就大功告成啦。

获取游戏源码及素材可以进来我的学习圈【806041599】,进来一起学习交流,有一些资料可以帮助大家更好的学习,在学习C语言的过程中遇到任何的问题,都可以发出来一起讨论,每天晚上20:00都会有直播给大家分享C/C++编程学习知识和路线方法,会不定期更新最新的教程和学习方法,大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的前端党,如果你是正在学习C/C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实。

你可能感兴趣的:(c语言,开发语言,visual,studio)