520表白:炫酷动态的流星表白程序,原来是这样做出来的(含源码)

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了520表白:炫酷动态的流星表白程序,原来是这样做出来的(含源码)相关的知识,希望对你有一定的参考价值。

谁说C/C++程序员不浪漫???

用C语言+easyX图形库,给你的对象一个小惊喜—【流星雨浪漫表白程序】,配上好听的音乐,瞬间高大上的感觉。

效果展示(动态效果,图片只是展示):

所需素材:

网盘链接:(如过期可以来粉丝群领取)

链接: https://pan.baidu.com/s/1mG7vKQtSRlcYO49lcAWQYA?pwd=trhg 提取码: trhg 

话不多说,下面我们一起来看看源码,里面有注释,大家可以进行代码解读!

源码分享:

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<easyx.h>	//简单的图形图,会C语言就可以用的飞起
#include<mmsystem.h>	//多媒体头文件
#pragma comment(lib,"winmm.lib")

#define NUM 100	//流星雨数量

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

//结构体封装属性
struct Meteor	//流星

	int x;
	int y;
	int speed;	//速度
;
struct Meteor meteor[NUM];

void welcome()

	//播放背景音乐 mci media device interface 
	mciSendString(_T("open ./images/浪漫空气.mp3 alias bgm"), NULL, 0, NULL);
	//mciSendString(_T("play bgm"), NULL, 0, NULL);

	//设置文字样式
	settextstyle(40, 0, _T("华文行楷"));
	//设置背景模式为透明
	setbkmode(TRANSPARENT);

	//按任意键退出循环
	while (!_kbhit())
	
		//清除屏幕
		cleardevice();
		//贴背景图
		putimage(0, 0, img_bk);
		//设置文字颜色
		settextcolor(RGB(rand()%256, rand() % 256, rand() % 256));

		//输出文字
		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("----------------------------爱你的顿开学员"));
		//随机坐标 x(0 1200) y(0,800)
		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();

	getchar();
	return 0;

对于很多初学者来说,有一群一起学习一起解答的小伙伴很重要!如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:946108597点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

以上是关于520表白:炫酷动态的流星表白程序,原来是这样做出来的(含源码)的主要内容,如果未能解决你的问题,请参考以下文章

我是如何用一行代码表白学妹~❤520情人节送女朋友的3D樱花雨相册礼物❤~(程序员表白专属)

520表白某程序员用代码这样表白,女友竟直接感动到删好友···

我是如何俘虏学姐芳心~❤给她放一场浪漫的烟花3D相册❤~(520情人节/七夕情人节/生日快乐/烟花告白/程序员表白专属)

520拿去表白,表白不成功你打我(Matlab代码动态图)

炫酷3D动态照片墙表白页html源码

520你表白了没?看看程序员们的花式表白吧!