C語言實(shí)現(xiàn)代碼雨效果
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)代碼雨效果的具體代碼,供大家參考,具體內(nèi)容如下
一、項(xiàng)目描述和最終的效果展示
項(xiàng)目: 讓字符從上到下依次的下落,呈現(xiàn)出代碼雨。
最終效果圖如下所示:
二、靜態(tài)的代碼雨
代碼如下:
#include<graphics.h> #include<time.h> #include<conio.h> #define High 800//游戲畫面 #define Width 1000 #define CharSize 25//每個(gè)字符顯示的大小 int main(void) { ?? ?int highNum=High/CharSize; ?? ?int widthNum=Width/CharSize; ?? ?//CharRain存儲(chǔ)對(duì)應(yīng)字符矩陣中需要輸出字符的ASCII碼 ?? ?int CharRain[Width/CharSize][High/CharSize]; ?? ?int CNum[Width/CharSize];//每一列的有效字符個(gè)數(shù) ?? ?int i,j,x,y; ?? ?srand((unsigned)time(NULL));//設(shè)置隨機(jī)函數(shù)種子 ?? ?for(i=0;i<widthNum;i++)//初始化字符矩陣 ?? ?{ ?? ??? ?CNum[i]=(rand()%(highNum*9/10))+highNum/10;//這一列的有效字符個(gè)數(shù) ?? ??? ?for(j=0;j<CNum[i];j++) ?? ??? ??? ?CharRain[j][i]=(rand()%26)+65;//產(chǎn)生A~Z的隨機(jī)字符 ?? ?} ?? ?initgraph(Width,High); ?? ?BeginBatchDraw(); ?? ?setfont(25,10,"Courier");//設(shè)置字體 ?? ?setcolor(GREEN); ?? ?for(i=0;i<widthNum;i++)//輸出整個(gè)字符矩陣 ?? ?{ ?? ??? ?x=i*CharSize;//當(dāng)前字符的x坐標(biāo) ?? ??? ?for(j=0;j<CNum[i];j++) ?? ??? ?{ ?? ??? ??? ?y=j*CharSize;//當(dāng)前字符的y坐標(biāo) ?? ??? ??? ?outtextxy(x,y,CharRain[j][i]);//輸出當(dāng)前字符 ?? ??? ?} ?? ?} ?? ?FlushBatchDraw(); ?? ?EndBatchDraw(); ?? ?getch(); ?? ?closegraph(); ?? ?return 0; }
效果圖如下:
三、一場動(dòng)態(tài)的代碼雨
代碼如下:
#include<graphics.h> #include<time.h> #include<conio.h> #define High 800//游戲畫面 #define Width 1000 #define CharSize 25//每個(gè)字符顯示的大小 int main(void) { ?? ?int highNum=High/CharSize; ?? ?int widthNum=Width/CharSize; ?? ?//CharRain存儲(chǔ)對(duì)應(yīng)字符矩陣中需要輸出字符的ASCII碼 ?? ?int CharRain[Width/CharSize][High/CharSize]; ?? ?int CNum[Width/CharSize];//每一列的有效字符個(gè)數(shù) ?? ?int i,j,x,y; ?? ?srand((unsigned)time(NULL));//設(shè)置隨機(jī)函數(shù)種子 ?? ?for(i=0;i<widthNum;i++)//初始化字符矩陣 ?? ?{ ?? ??? ?CNum[i]=(rand()%(highNum*9/10))+highNum/10;//這一列的有效字符個(gè)數(shù) ?? ??? ?for(j=0;j<CNum[i];j++) ?? ??? ??? ?CharRain[j][i]=(rand()%26)+65;//產(chǎn)生A~Z的隨機(jī)字符 ?? ?} ?? ?initgraph(Width,High); ?? ?BeginBatchDraw(); ?? ?setfont(25,10,"Courier");//設(shè)置字體 ?? ?setcolor(RGB(0,255,0)); ?? ?while(1) ?? ?{ ?? ??? ?for(i=0;i<widthNum;i++) ?? ??? ?{ ?? ??? ??? ?if(CNum[i]<highNum-1)//當(dāng)這一列字符沒有填滿時(shí) ?? ??? ??? ?{ ?? ??? ??? ??? ?for(j=CNum[i]-1;j>=0;j--)//每個(gè)字符向下移動(dòng)一格 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?CharRain[j+1][i]=CharRain[j][i]; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?CharRain[0][i]=(rand()%26)+65;//最上一格再重新隨機(jī)的產(chǎn)生一個(gè)字符 ?? ??? ??? ??? ?CNum[i]=CNum[i]+1;//這一列的字符數(shù)加1 ?? ??? ??? ?} ?? ??? ?} ?? ??? ?for(i=0;i<widthNum;i++)//輸出整個(gè)字符矩陣 ?? ??? ?{ ?? ??? ??? ?x=i*CharSize;//當(dāng)前字符的x坐標(biāo) ?? ??? ??? ?for(j=0;j<CNum[i];j++) ?? ??? ??? ?{ ?? ??? ??? ??? ?y=j*CharSize;//當(dāng)前字符的y坐標(biāo) ?? ??? ??? ??? ?outtextxy(x,y,CharRain[j][i]);//輸出當(dāng)前字符 ?? ??? ??? ?} ?? ??? ?} ?? ??? ?FlushBatchDraw(); ?? ??? ?Sleep(200); ?? ??? ?clearrectangle(0,0,Width-1,High-1);//清空畫面 ?? ?} ?? ? ?? ?EndBatchDraw(); ?? ?getch(); ?? ?closegraph(); ?? ?return 0; }
效果圖如下:
四、實(shí)現(xiàn)代碼雨動(dòng)畫
代碼如下:
#include<graphics.h> #include<time.h> #include<conio.h> #define High 800//游戲畫面 #define Width 1000 #define CharSize 25//每個(gè)字符顯示的大小 int main(void) { ?? ?int highNum=High/CharSize; ?? ?int widthNum=Width/CharSize; ?? ?//CharRain存儲(chǔ)對(duì)應(yīng)字符矩陣中需要輸出字符的ASCII碼 ?? ?int CharRain[Width/CharSize][High/CharSize]; ?? ?int CNum[Width/CharSize];//每一列的有效字符個(gè)數(shù) ?? ?int ColorG[Width/CharSize];//每一列字符的顏色 ?? ?int i,j,x,y; ?? ?srand((unsigned)time(NULL));//設(shè)置隨機(jī)函數(shù)種子 ?? ?for(i=0;i<widthNum;i++)//初始化字符矩陣 ?? ?{ ?? ??? ?CNum[i]=(rand()%(highNum*9/10))+highNum/10;//這一列的有效字符個(gè)數(shù) ?? ??? ?ColorG[i]=255; ?? ??? ?for(j=0;j<CNum[i];j++) ?? ??? ??? ?CharRain[j][i]=(rand()%26)+65;//產(chǎn)生A~Z的隨機(jī)字符 ?? ?} ?? ?initgraph(Width,High); ?? ?BeginBatchDraw(); ?? ?setfont(25,10,"Courier");//設(shè)置字體 ?? ?while(1) ?? ?{ ?? ??? ?for(i=0;i<widthNum;i++) ?? ??? ?{ ?? ??? ??? ?if(CNum[i]<highNum-1)//當(dāng)這一列字符沒有填滿時(shí) ?? ??? ??? ?{ ?? ??? ??? ??? ?for(j=CNum[i]-1;j>=0;j--)//每個(gè)字符向下移動(dòng)一格 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?CharRain[j+1][i]=CharRain[j][i]; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?CharRain[0][i]=(rand()%26)+65;//最上一格再重新隨機(jī)的產(chǎn)生一個(gè)字符 ?? ??? ??? ??? ?CNum[i]=CNum[i]+1;//這一列的字符數(shù)加1 ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?if(ColorG[i]>40) ?? ??? ??? ??? ??? ?ColorG[i]=ColorG[i]-20;//讓滿的這一列逐漸變暗 ?? ??? ??? ??? ?else ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?CNum[i]=(rand()%(highNum/3))+highNum/10;//這一列字符的個(gè)數(shù) ?? ??? ??? ??? ??? ?ColorG[i]=(rand()%75)+180;//這一列字符的顏色 ?? ??? ??? ??? ??? ?for(j=0;j<CNum[i];j++)//重新初始化這一列字符 ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?CharRain[j][i]=(rand()%26)+65; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?for(i=0;i<widthNum;i++)//輸出整個(gè)字符矩陣 ?? ??? ?{ ?? ??? ??? ?x=i*CharSize;//當(dāng)前字符的x坐標(biāo) ?? ??? ??? ?for(j=0;j<CNum[i];j++) ?? ??? ??? ?{ ?? ??? ??? ??? ?y=j*CharSize;//當(dāng)前字符的y坐標(biāo) ?? ??? ??? ??? ?setcolor(RGB(0,ColorG[i],0)); ?? ??? ??? ??? ?outtextxy(x,y,CharRain[j][i]);//輸出當(dāng)前字符 ?? ??? ??? ?} ?? ??? ?} ?? ??? ?FlushBatchDraw(); ?? ??? ?Sleep(100); ?? ??? ?clearrectangle(0,0,Width-1,High-1);//清空畫面 ?? ?} ?? ? ?? ?EndBatchDraw(); ?? ?getch(); ?? ?closegraph(); ?? ?return 0; }
效果圖如下:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++深入淺出探索數(shù)據(jù)結(jié)構(gòu)的原理
C++的數(shù)據(jù)結(jié)構(gòu)很多,很復(fù)雜,所以本文將通過示例帶大家深入了解一下C++中的數(shù)據(jù)結(jié)構(gòu)與算法。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05C語言用循環(huán)單鏈表實(shí)現(xiàn)約瑟夫環(huán)
這篇文章主要為大家詳細(xì)介紹了C語言用循環(huán)單鏈表實(shí)現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹的繪制
圣誕節(jié)快到了(雖然還有十天),一起來用MATLAB畫個(gè)簡單圣誕樹叭~代碼幾乎取消了全部的循環(huán),因此至少需要17b之后的版本,僅存的循環(huán)用來讓樹旋轉(zhuǎn)起來,讓雪花飄落起來,讓樹頂上的星光搖曳起來~感興趣的可以試一試2022-12-12C語言數(shù)據(jù)結(jié)構(gòu)二叉樹之堆的實(shí)現(xiàn)和堆排序詳解
堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆的實(shí)現(xiàn)和堆排序,需要的可以參考一下2022-04-04