C语言实现流星雨效果流程

目录
  • 一、头文件
  • 二、结构体
  • 三、初始化
  • 四、绘制函数
  • 五、移动函数
  • 六、界面设计
  • 七、主函数
  • 总结
  • 视频讲解
  • 感谢

再亮眼的流星,也会一闪而过。

嗨!这里是狐狸~~

没错,我又来了,上次的“烟花”表白程序你学废了吗,这次我次我又来给大家支招啦,学会了“烟花”,我们一起来看“流星雨”吧!!! 直接上界面

上次忘记说了,因为我们是用C语言写的所以是控制台程序,创造不出来界面,那怎么办呢,我们就要用Windows的远房表亲EasyX图形库来建界面了,上次忘记说了,望谅解!!!

我们今天就和往常一样一步一步的教大家如何去完成这个“流星雨”表白程序吧!

一、头文件

最近总是被吐槽为什么没有头文件,原因是呢,我觉得我分享项目最主要的目的是让大家学知识,头文件这些没营养的,开始就没有考虑,但鉴于需要的小伙伴太多了,我就发出来吧!!!

#include<stdio.h>
#include<easyx.h>	//第三方图形库,需要安装
#include<time.h>
#include<conio.h>

#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

二、结构体

老朋友结构体他又来了,不用多说,直接看

struct Star		//小星星
{
	int x;
	int y;
	int r;
	int speed;			//速度
	COLORREF color;		//颜色
};
struct Meteor
{
	int x;
	int y;
	int speed;
};

三、初始化

初始化星星以及流星,要用到随机函数哦,让星星和流星看起来更自然。

//初始化星星
void initStar(int i)
{
	star[i].x = rand() % getwidth();
	star[i].y = rand() % getheight();
	star[i].r = rand() % 3 + 1;
	star[i].speed = rand() % 5;	//0 1 2 3 4
	star[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
//初始化流星
void initMeteor(int i)
{
	//[0,2400)
	//[-1200,1200)
	meteor[i].x = rand() % (2 * getwidth()) - getwidth();	//[-1200,1200)
	meteor[i].y = 20 - 200;
	meteor[i].speed = rand()%15+1;
}

四、绘制函数

绘制星星以及流星,简单的贴图就行啦

绘制星星
void drawStar()
{
	for (size_t i = 0; i < STAR_NUM; i++)
	{
		//putpixel(star[i].x, star[i].y, star[i].color);
		setfillcolor(star[i].color);
		solidcircle(star[i].x, star[i].y, star[i].r);
	}
}
//绘制流星
void drawMeteor()
{
	for (size_t i = 0; i < METEOR_NUM; i++)
	{
		putimage(meteor[i].x, meteor[i].y, img + rand() % 2,SRCPAINT);
	}
}

五、移动函数

不仅流星要动,星星也要跟着动,怎么动才能更自然,自己也可以优化一下。

//星星的移动
void moveStar()
{
	for (size_t i = 0; i < STAR_NUM; i++)
	{
		star[i].x+=star[i].speed;
		if (star[i].x > getwidth())
		{
			star[i].x = 0;
		}
	}
}

//流星的移动
void moveMeteor()
{
	for (size_t i = 0; i < METEOR_NUM; i++)
	{
		meteor[i].x += meteor[i].speed;
		meteor[i].y += meteor[i].speed;
		if (meteor[i].x >= getwidth() || meteor[i].y >= getheight())
		{
			initMeteor(i);
		}
	}
}

六、界面设计

接下来是我们的界面设计函数了,这个也是大家自由发挥的地方,可以自己去查一些界面的设置函数,自己设计自己的界面,里面的情话就可以自己去发挥了!!!

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

	//设置随机数种子
	srand((unsigned)time(NULL));
	/*@思考:表白的话语*/

	//设置背景模式
	setbkmode(TRANSPARENT);

	//设置文字样式
	settextstyle(40, 0, _T("华文行楷"));

	//如果没有按键按下,就一直循环
	while (!_kbhit())
	{
		//清屏
		cleardevice();
		putimage(0, 0, &bk);

		//设置文字颜色
		settextcolor(RGB(rand()%256, rand() % 256, rand() % 256));

		//输出文字
		int tx = (getwidth() - textwidth(_T("XXX我喜欢你"))) / 2;
		outtextxy(tx, 20, _T("XXX我喜欢你"));

		outtextxy(200, 100, _T("血包我不要,我只要你"));
		outtextxy(200, 150, _T("老师我在床上更爱你"));
		outtextxy(200, 200, _T("宝 你就想cf里的源武器 便宜但没人要"));
		outtextxy(200, 250, _T("春风十里 ,我只爱你"));
		outtextxy(200, 300, _T("我的程序只有你一个主函数"));
		outtextxy(200, 350, _T("孤单不是与生俱来,而是由你爱上一个人的那一刻开始。"));
		outtextxy(200, 400, _T("如果奇迹有颜色,那一定是彩虹的颜色"));
		outtextxy(200, 450, _T("山有木兮木有枝,心悦君兮君不知"));
		outtextxy(200, 500, _T("我从不畅享未来,遇到了你以后我每天都在想"));
		outtextxy(200, 550, _T("------------ 爱你XXX"));

		for (size_t i = 0; i < 10; i++)
		{
			settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
			outtextxy(rand()%getwidth(), rand()%getheight(), _T(""));
		}

		Sleep(1000);
	}
}

七、主函数

最后是我们的主函数,把之前的函数一起调用起来吧

int main()
{
	//1,创建图形窗口
	initgraph(1200, 800);
	//设置背景颜色
	//setbkcolor(RGB(99, 99, 99));
	//cleardevice();

	loadimage(&bk, _T("./images/bk.png"),getwidth(),getheight());

	for (size_t i = 0; i < STAR_NUM; i++)
	{
		initStar(i);
	}
	for (size_t i = 0; i < METEOR_NUM; i++)
	{
		initMeteor(i);
	}
	loadImg();
	welcome();

	//双缓冲绘图
	BeginBatchDraw();
	while (true)
	{
		cleardevice();
		putimage(0, 0, &bk);

		drawStar();
		moveStar();

		drawMeteor();
		moveMeteor();

		FlushBatchDraw();
	}
	EndBatchDraw();
getchar();
	return 0;
}

总结

好了,这样一来,“流星雨”表白程序你也已经拿到手了,这还不够吗,以后别说咱们程序员不浪漫,那是不想动手,浪漫起来谁也抵挡不住,代码不难,用心去做谁都可以,加油吧!!!

视频讲解

想要看视频讲解的看这里,讲得很详细,可以认真的听一下

听说向流星许愿就会有好运气

https://www.bilibili.com/video/BV1Tv411g7xL/

感谢

在这里向大家说声感谢,我的“烟花”表白程序上了热榜第一,我很感动,我也很感谢大家的支持,让我觉得自己的努力并不是竹篮打水一场空,我也希望大家可以真实的学到东西,而不是说单纯的只是看一下程序运行的结果,或者说简单的给那个人看罢了,我也不知道这篇发完的结果怎么样,但不管怎么样,我也是希望大家可以在未来不管遇到什么,看到什么都不要放弃学习的机会,再次感谢大家!

到此这篇关于C语言实现流星雨效果流程的文章就介绍到这了,更多相关C语言 流星雨内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言实现水波纹效果

    本文实例为大家分享了C语言实现水波纹效果的具体代码,供大家参考,具体内容如下 #include <graphics.h> #include <conio.h> #include <stdio.h> #define PIC_HEIGHT 600 #define PIC_WIDTH 800 void FrameFun(); // 帧逻辑函数,处理每一帧的逻辑 void RenderFun(); // 帧渲染函数,输出每一帧到显示设备 IMAGE src_img; // 原位

  • C语言实现数字雨效果

    本文实例为大家分享了C语言实现数字雨效果展示的具体代码,供大家参考,具体内容如下 #include <windows.h> #include <windowsx.h> #define ID_TIMER 1 #define STRMAXLEN 25 //一个显示列的最大长度 #define STRMINLEN 8 //一个显示列的最小长度 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; /////////////////

  • C语言实现流星雨效果流程

    目录 一.头文件 二.结构体 三.初始化 四.绘制函数 五.移动函数 六.界面设计 七.主函数 总结 视频讲解 感谢 序 再亮眼的流星,也会一闪而过. 嗨!这里是狐狸~~ 没错,我又来了,上次的"烟花"表白程序你学废了吗,这次我次我又来给大家支招啦,学会了"烟花",我们一起来看"流星雨"吧!!! 直接上界面 上次忘记说了,因为我们是用C语言写的所以是控制台程序,创造不出来界面,那怎么办呢,我们就要用Windows的远房表亲EasyX图形库来建界面

  • JavaScript制作楼层导航效果流程详解

    目录 本期目标 1. 功能实现 1.1 结构层 1.2 样式层 1.3 行为层 1.3.1 楼层跳转 1.3.2 楼层监听 2. 效果预览 3. 项目代码 本期目标 使用JavaScript制作楼层导航效果,实现两个功能: 楼层跳转 楼层监听 1. 功能实现 1.1 结构层 <div id="box" class="box"> <ul class="list"> <li class="content-par

  • Python与C语言分别完成排序流程

    目录 1案例描述 2Python实现 2.1方法一(官方) 2.2方法二 3C语言实现 1 案例描述 输入三个整数x,y,z,请把这三个数由小到大输出. 2 Python实现 2.1 方法一(官方) L = [] for i in range(3): x = int(input('integer:\n')) L.append(x) L.sort() print(L) #==========结果===================== integer: 23 integer: 34 intege

  • 基于Python实现流星雨效果的绘制

    目录 1 前言 2 霍金说移民外太空 3 浪漫的流星雨展示 4 Python代码 1 前言 我们先给个小故事,提一下大家兴趣:然后我给出论据,得出结论.最后再浪漫的流星雨表白代码奉上,还有我自创的一首诗.开始啦: 2 霍金说移民外太空 霍金说我们将来外星上生存:埃隆.马斯克也是这样想的. 我前面讲外星人来不到地球,这个道理已经很清楚.我再说几个数据,大家听听,我们且不要说到更远的外星,我们人类今天登上月球,把一个字航员送上月球,他在月球上待一分钟,要消耗地球一百万美元的资源才能在月球上待一分钟

  • C语言详细分析讲解流程控制语句用法

    目录 一.分支语句 1.if语句 2.switch语句 二.循环语句 1.for语句 2.break和continue语句 3.循环嵌套 4.while和do…while语句 一.分支语句 1.if语句 流程控制语句可以让程序中的语句不再从上到下逐条执行 分支是一种流程控制语句,可以把程序中某些语句忽略掉不去执行 if关键字可以用来编写分支语句,只有当表达式为真时,才会执行对应语句 如果多个分支的逻辑表达式之间存在互斥关系,则可以采用else关键字把他们合并成一个分支语句 一个分支语句中的多个逻

  • JavaScript实现流星雨效果的示例代码

    目录 演示 技术栈 源码 首先建立星星对象 让星星闪亮起来 创建流星雨对象 让流星动起来 演示 上一次做了一个雨滴的动画,顺着这种思维正好可以改成流星雨,嘿嘿我真是一个小机灵. 技术栈 还是先建立画布 <body> <canvas id="stars"></canvas> </body> 画布标签我昨天讲过了.不知道的小伙伴可以去看看. 源码 首先建立星星对象 //创建一个星星对象 var Star = function (){ this

  • Go语言实战学习之流程控制详解

    目录 1. 前言 2. if分支 3. for及for-range循环 4. switch-case-fallthrough分支 5. goto 6. break和continue 7. 跳出嵌套循环 8. 最后 1. 前言 这里还是再总结一下流程控制,和其它语言相比做了一些优化,比如相比c增加了迭代器类型的for循环,switch针对c中容易出问题的地方做了一些修改,避免出现缺少break时存在的常见问题,此外,和Java类似也存在跳出循环和多层嵌套的方法,C中容易造成使用不当的goto也同样

  • C++使用easyX库实现三星环绕效果流程详解

    目录 1,项目描述 2,解决思路 3,关键代码 4,项目运行截图 5,具体代码实现 1,项目描述 功能1:使用图形化的方式描述地球围绕着太阳转动,月球围绕着地球转动 功能2:在转动的过程中当用户按下1,2,3,4,5,6,7时它可以变换出7种不同的颜色,当用户按下8时它可以变换从1-7的颜色依次变换当用户再次按下8键时停止变换颜色 功能3:当用户按下上键时,地球会围绕太阳反转,当再次按下上键时地球会恢复到正转 功能4:当用户按下空格键的时候,所有动画暂停,当再次按下空格键的时候所有动画继续进行.

  • React实现卡片拖拽效果流程详解

    前提摘要: 学习宋一玮 React 新版本 + 函数组件 &Hooks 优先 开篇就是函数组件+Hooks 实现的效果如下: 学到第11篇了 照葫芦画瓢,不过老师在讲解的过程中没有考虑拖拽目标项边界问题,我稍微处理了下这样就实现拖拽流畅了 下面就是主要的代码了,实现拖拽(src/App.js): 核心在于标记当前项,来源项,目标项,并且在拖拽完成时对数据处理,更新每一组数据(useState): /** @jsxImportSource @emotion/react */ // 上面代码是使用e

  • JavaScript利用canvas绘制流星雨效果

    目录 前言 需求分析 实现过程 1.绘制满天繁星 2.满天繁星闪起来 3.绘制流星 4.流星划过夜空 5.流星雨 6.merge视觉盛宴 前言 最近总是梦见一些小时候的故事,印象最深刻的就是夏天坐在屋顶上,看着满天的繁星,一颗,两颗,三颗...不由自主地开始了数星星的过程.不经意间,一颗流星划过夜间,虽然只是转瞬即逝,但它似乎比夜空中的其它繁星更吸引着我.听老人说,看见流星的时候许愿,愿望是可以实现的,此时早已把数星星抛之脑后,开始期待着下一颗流星的出现.但是那天晚上,流星再也没有出现,这也成了

随机推荐