" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實(shí)現(xiàn)流星雨效果流程

 更新時(shí)間:2021年11月22日 08:44:58   作者:MAX在碼字  
C本篇文章帶你用C語言去實(shí)現(xiàn)漫天流星雨的效果,代碼寫的很清晰,效果非常棒,另有視頻詳解整個(gè)過程,相信你一定能看懂,感興趣的童鞋快來看看吧

再亮眼的流星,也會(huì)一閃而過。

嗨!這里是狐貍~~

沒錯(cuò),我又來了,上次的“煙花”表白程序你學(xué)廢了嗎,這次我次我又來給大家支招啦,學(xué)會(huì)了“煙花”,我們一起來看“流星雨”吧?。?! 直接上界面

上次忘記說了,因?yàn)槲覀兪怯肅語言寫的所以是控制臺(tái)程序,創(chuàng)造不出來界面,那怎么辦呢,我們就要用Windows的遠(yuǎn)房表親EasyX圖形庫來建界面了,上次忘記說了,望諒解?。?!

我們今天就和往常一樣一步一步的教大家如何去完成這個(gè)“流星雨”表白程序吧!

一、頭文件

最近總是被吐槽為什么沒有頭文件,原因是呢,我覺得我分享項(xiàng)目最主要的目的是讓大家學(xué)知識(shí),頭文件這些沒營養(yǎng)的,開始就沒有考慮,但鑒于需要的小伙伴太多了,我就發(fā)出來吧!?。?/p>

#include<stdio.h>
#include<easyx.h>	//第三方圖形庫,需要安裝
#include<time.h>
#include<conio.h>
 
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

二、結(jié)構(gòu)體

老朋友結(jié)構(gòu)體他又來了,不用多說,直接看

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

三、初始化

初始化星星以及流星,要用到隨機(jī)函數(shù)哦,讓星星和流星看起來更自然。

//初始化星星
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;
}

四、繪制函數(shù)

繪制星星以及流星,簡(jiǎn)單的貼圖就行啦

繪制星星
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);
	}
}

五、移動(dòng)函數(shù)

不僅流星要?jiǎng)?,星星也要跟著?dòng),怎么動(dòng)才能更自然,自己也可以優(yōu)化一下。

//星星的移動(dòng)
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;
		}
	}
}
 
//流星的移動(dòng)
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);
		}
	}
}

六、界面設(shè)計(jì)

接下來是我們的界面設(shè)計(jì)函數(shù)了,這個(gè)也是大家自由發(fā)揮的地方,可以自己去查一些界面的設(shè)置函數(shù),自己設(shè)計(jì)自己的界面,里面的情話就可以自己去發(fā)揮了!?。?/p>

void welcome()
{
	//播放音樂 mci media device interface 
	mciSendString(_T("open ./images/浪漫空氣.mp3 alias bgm"), NULL, 0, NULL);
	mciSendString(_T("play bgm"), NULL, 0, NULL);
 
	//設(shè)置隨機(jī)數(shù)種子
	srand((unsigned)time(NULL));
	/*@思考:表白的話語*/
 
	//設(shè)置背景模式
	setbkmode(TRANSPARENT);
 
	//設(shè)置文字樣式
	settextstyle(40, 0, _T("華文行楷"));
 
	//如果沒有按鍵按下,就一直循環(huán)
	while (!_kbhit())
	{
		//清屏
		cleardevice();
		putimage(0, 0, &bk);
 
		//設(shè)置文字顏色
		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("春風(fēng)十里 ,我只愛你"));
		outtextxy(200, 300, _T("我的程序只有你一個(gè)主函數(shù)"));
		outtextxy(200, 350, _T("孤單不是與生俱來,而是由你愛上一個(gè)人的那一刻開始。"));
		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);
	}
}

七、主函數(shù)

最后是我們的主函數(shù),把之前的函數(shù)一起調(diào)用起來吧

int main()
{
	//1,創(chuàng)建圖形窗口
	initgraph(1200, 800);
	//設(shè)置背景顏色
	//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;
}

總結(jié)

好了,這樣一來,“流星雨”表白程序你也已經(jīng)拿到手了,這還不夠嗎,以后別說咱們程序員不浪漫,那是不想動(dòng)手,浪漫起來誰也抵擋不住,代碼不難,用心去做誰都可以,加油吧!??!

視頻講解

想要看視頻講解的看這里,講得很詳細(xì),可以認(rèn)真的聽一下

聽說向流星許愿就會(huì)有好運(yùn)氣

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

感謝

在這里向大家說聲感謝,我的“煙花”表白程序上了熱榜第一,我很感動(dòng),我也很感謝大家的支持,讓我覺得自己的努力并不是竹籃打水一場(chǎng)空,我也希望大家可以真實(shí)的學(xué)到東西,而不是說單純的只是看一下程序運(yùn)行的結(jié)果,或者說簡(jiǎn)單的給那個(gè)人看罷了,我也不知道這篇發(fā)完的結(jié)果怎么樣,但不管怎么樣,我也是希望大家可以在未來不管遇到什么,看到什么都不要放棄學(xué)習(xí)的機(jī)會(huì),再次感謝大家!

到此這篇關(guān)于C語言實(shí)現(xiàn)流星雨效果流程的文章就介紹到這了,更多相關(guān)C語言 流星雨內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)合式公式的判斷示例

    C語言實(shí)現(xiàn)合式公式的判斷示例

    這篇文章主要介紹了C語言實(shí)現(xiàn)合式公式的判斷示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Win10+VS2017新CUDA項(xiàng)目配置教程

    Win10+VS2017新CUDA項(xiàng)目配置教程

    這篇文章主要為大家詳細(xì)介紹了Win10+VS2017新CUDA項(xiàng)目配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C語言打印各種圖案實(shí)例代碼

    C語言打印各種圖案實(shí)例代碼

    大家好,本篇文章主要講的是C語言打印各種圖案實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++實(shí)現(xiàn)職工信息管理系統(tǒng)

    C++實(shí)現(xiàn)職工信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 淺談c++構(gòu)造函數(shù)問題,初始化和賦值問題

    淺談c++構(gòu)造函數(shù)問題,初始化和賦值問題

    下面小編就為大家?guī)硪黄獪\談c++構(gòu)造函數(shù)問題,初始化和賦值問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java C++題解leetcode判定是否為字符重排

    Java C++題解leetcode判定是否為字符重排

    這篇文章主要為大家介紹了Java C++題解leetcode判定是否為字符重排,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • OpenCV 顏色追蹤的示例代碼

    OpenCV 顏色追蹤的示例代碼

    這篇文章主要介紹了OpenCV 顏色追蹤的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作

    使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作

    這篇文章給大家介紹了使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建

    C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建的相關(guān)資料,希望通過本文幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++STL教程之vector模板的使用

    C++STL教程之vector模板的使用

    模板類vector是一個(gè)動(dòng)態(tài)數(shù)組,類似于string類,可存放任意類型,能夠末尾、中間增加數(shù)據(jù),基本上是是new創(chuàng)建動(dòng)態(tài)數(shù)組的替代品,vector可以自動(dòng)完成new和delete
    2022-08-08

最新評(píng)論