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//每個字符顯示的大小
int main(void)
{
?? ?int highNum=High/CharSize;
?? ?int widthNum=Width/CharSize;
?? ?//CharRain存儲對應(yīng)字符矩陣中需要輸出字符的ASCII碼
?? ?int CharRain[Width/CharSize][High/CharSize];
?? ?int CNum[Width/CharSize];//每一列的有效字符個數(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;//這一列的有效字符個數(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++)//輸出整個字符矩陣
?? ?{
?? ??? ?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;
}效果圖如下:

三、一場動態(tài)的代碼雨
代碼如下:
#include<graphics.h>
#include<time.h>
#include<conio.h>
#define High 800//游戲畫面
#define Width 1000
#define CharSize 25//每個字符顯示的大小
int main(void)
{
?? ?int highNum=High/CharSize;
?? ?int widthNum=Width/CharSize;
?? ?//CharRain存儲對應(yīng)字符矩陣中需要輸出字符的ASCII碼
?? ?int CharRain[Width/CharSize][High/CharSize];
?? ?int CNum[Width/CharSize];//每一列的有效字符個數(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;//這一列的有效字符個數(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)這一列字符沒有填滿時
?? ??? ??? ?{
?? ??? ??? ??? ?for(j=CNum[i]-1;j>=0;j--)//每個字符向下移動一格
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?CharRain[j+1][i]=CharRain[j][i];
?? ??? ??? ??? ?}
?? ??? ??? ??? ?CharRain[0][i]=(rand()%26)+65;//最上一格再重新隨機(jī)的產(chǎn)生一個字符
?? ??? ??? ??? ?CNum[i]=CNum[i]+1;//這一列的字符數(shù)加1
?? ??? ??? ?}
?? ??? ?}
?? ??? ?for(i=0;i<widthNum;i++)//輸出整個字符矩陣
?? ??? ?{
?? ??? ??? ?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)代碼雨動畫
代碼如下:
#include<graphics.h>
#include<time.h>
#include<conio.h>
#define High 800//游戲畫面
#define Width 1000
#define CharSize 25//每個字符顯示的大小
int main(void)
{
?? ?int highNum=High/CharSize;
?? ?int widthNum=Width/CharSize;
?? ?//CharRain存儲對應(yīng)字符矩陣中需要輸出字符的ASCII碼
?? ?int CharRain[Width/CharSize][High/CharSize];
?? ?int CNum[Width/CharSize];//每一列的有效字符個數(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;//這一列的有效字符個數(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)這一列字符沒有填滿時
?? ??? ??? ?{
?? ??? ??? ??? ?for(j=CNum[i]-1;j>=0;j--)//每個字符向下移動一格
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?CharRain[j+1][i]=CharRain[j][i];
?? ??? ??? ??? ?}
?? ??? ??? ??? ?CharRain[0][i]=(rand()%26)+65;//最上一格再重新隨機(jī)的產(chǎn)生一個字符
?? ??? ??? ??? ?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;//這一列字符的個數(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++)//輸出整個字符矩陣
?? ??? ?{
?? ??? ??? ?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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
matlab?GUI指紋識別門禁系統(tǒng)介紹及源碼實(shí)現(xiàn)
這篇文章主要為大家介紹了matlab?GUI指紋識別門禁系統(tǒng)的介紹及源碼實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
C++實(shí)現(xiàn)在文本中找出某個單詞的位置信息
本文給大家分享的是使用C++實(shí)現(xiàn)在文本中找出某個單詞的位置信息,就是給出此單詞所在的行和列,有需要的小伙伴可以參考下。2016-02-02
Qt如何設(shè)置窗口屏幕居中顯示以及設(shè)置大小
這篇文章主要介紹了Qt如何設(shè)置窗口屏幕居中顯示以及設(shè)置大小的相關(guān)資料,需要的朋友可以參考下2017-01-01
C++ 面向?qū)ο蟪绦蛟O(shè)計--內(nèi)存分區(qū)詳解
這篇文章主要介紹了剖析C++的面向?qū)ο缶幊趟枷?C++的面向?qū)ο筇匦允瞧鋵語言的重要拓展之處,需要的朋友可以參考下,希望能夠給你帶來幫助2021-08-08
C語言數(shù)組按協(xié)議存儲與按協(xié)議解析數(shù)據(jù)的實(shí)現(xiàn)
今天小編就為大家分享一篇關(guān)于C語言數(shù)組按協(xié)議存儲與按協(xié)議解析數(shù)據(jù)的實(shí)現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
win32 api實(shí)現(xiàn)2048游戲示例
這篇文章主要介紹了win32 api實(shí)現(xiàn)2048游戲示例,需要的朋友可以參考下2014-05-05
C++紅黑樹的底層實(shí)現(xiàn)機(jī)制詳解
紅黑樹與AVL樹一樣,也是一種自平衡的二叉搜索樹,它在每個結(jié)點(diǎn)上增加一個存儲位表示結(jié)點(diǎn)的顏色,可以是Red或Black,通過對任何一條從根到葉子的路徑上各個結(jié)點(diǎn)著色方式的限制,本文介紹了C++紅黑樹的底層實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下2024-08-08

