C語言實(shí)現(xiàn)流星雨效果流程
序
再亮眼的流星,也會(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)文章
Win10+VS2017新CUDA項(xiàng)目配置教程
這篇文章主要為大家詳細(xì)介紹了Win10+VS2017新CUDA項(xiàng)目配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09C++實(shí)現(xiàn)職工信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01淺談c++構(gòu)造函數(shù)問題,初始化和賦值問題
下面小編就為大家?guī)硪黄獪\談c++構(gòu)造函數(shù)問題,初始化和賦值問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作
這篇文章給大家介紹了使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建的相關(guān)資料,希望通過本文幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10