C語言實(shí)現(xiàn)流星雨效果流程
序
再亮眼的流星,也會一閃而過。
嗨!這里是狐貍~~
沒錯,我又來了,上次的“煙花”表白程序你學(xué)廢了嗎,這次我次我又來給大家支招啦,學(xué)會了“煙花”,我們一起來看“流星雨”吧!??! 直接上界面

上次忘記說了,因為我們是用C語言寫的所以是控制臺程序,創(chuàng)造不出來界面,那怎么辦呢,我們就要用Windows的遠(yuǎn)房表親EasyX圖形庫來建界面了,上次忘記說了,望諒解?。?!
我們今天就和往常一樣一步一步的教大家如何去完成這個“流星雨”表白程序吧!
一、頭文件
最近總是被吐槽為什么沒有頭文件,原因是呢,我覺得我分享項目最主要的目的是讓大家學(xué)知識,頭文件這些沒營養(yǎng)的,開始就沒有考慮,但鑒于需要的小伙伴太多了,我就發(fā)出來吧!??!
#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ù)
繪制星星以及流星,簡單的貼圖就行啦
繪制星星
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);
}
}
五、移動函數(shù)
不僅流星要動,星星也要跟著動,怎么動才能更自然,自己也可以優(yōu)化一下。
//星星的移動
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);
}
}
}
六、界面設(shè)計
接下來是我們的界面設(shè)計函數(shù)了,這個也是大家自由發(fā)揮的地方,可以自己去查一些界面的設(shè)置函數(shù),自己設(shè)計自己的界面,里面的情話就可以自己去發(fā)揮了!??!
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("我的程序只有你一個主函數(shù)"));
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);
}
}
七、主函數(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)拿到手了,這還不夠嗎,以后別說咱們程序員不浪漫,那是不想動手,浪漫起來誰也抵擋不住,代碼不難,用心去做誰都可以,加油吧?。。?/p>
視頻講解
想要看視頻講解的看這里,講得很詳細(xì),可以認(rèn)真的聽一下
聽說向流星許愿就會有好運(yùn)氣
https://www.bilibili.com/video/BV1Tv411g7xL/
感謝
在這里向大家說聲感謝,我的“煙花”表白程序上了熱榜第一,我很感動,我也很感謝大家的支持,讓我覺得自己的努力并不是竹籃打水一場空,我也希望大家可以真實(shí)的學(xué)到東西,而不是說單純的只是看一下程序運(yùn)行的結(jié)果,或者說簡單的給那個人看罷了,我也不知道這篇發(fā)完的結(jié)果怎么樣,但不管怎么樣,我也是希望大家可以在未來不管遇到什么,看到什么都不要放棄學(xué)習(xí)的機(jī)會,再次感謝大家!
到此這篇關(guān)于C語言實(shí)現(xiàn)流星雨效果流程的文章就介紹到這了,更多相關(guān)C語言 流星雨內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)職工信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
淺談c++構(gòu)造函數(shù)問題,初始化和賦值問題
下面小編就為大家?guī)硪黄獪\談c++構(gòu)造函數(shù)問題,初始化和賦值問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作
這篇文章給大家介紹了使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12
C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建的相關(guān)資料,希望通過本文幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10

