C語言實現代碼雨效果

本文實例為大傢分享瞭C語言實現代碼雨效果的具體代碼,供大傢參考,具體內容如下

一、項目描述和最終的效果展示

項目:   讓字符從上到下依次的下落,呈現出代碼雨。

最終效果圖如下所示:

二、靜態的代碼雨

代碼如下:

#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存儲對應字符矩陣中需要輸出字符的ASCII碼
    int CharRain[Width/CharSize][High/CharSize];
    int CNum[Width/CharSize];//每一列的有效字符個數
    int i,j,x,y;
    srand((unsigned)time(NULL));//設置隨機函數種子

    for(i=0;i<widthNum;i++)//初始化字符矩陣
    {
        CNum[i]=(rand()%(highNum*9/10))+highNum/10;//這一列的有效字符個數
        for(j=0;j<CNum[i];j++)
            CharRain[j][i]=(rand()%26)+65;//產生A~Z的隨機字符
    }

    initgraph(Width,High);
    BeginBatchDraw();
    setfont(25,10,"Courier");//設置字體
    setcolor(GREEN);

    for(i=0;i<widthNum;i++)//輸出整個字符矩陣
    {
        x=i*CharSize;//當前字符的x坐標
        for(j=0;j<CNum[i];j++)
        {
            y=j*CharSize;//當前字符的y坐標
            outtextxy(x,y,CharRain[j][i]);//輸出當前字符
        }
    }
    FlushBatchDraw();
    EndBatchDraw();
    getch();
    closegraph();
    return 0;
}

效果圖如下:

三、一場動態的代碼雨

代碼如下:

#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存儲對應字符矩陣中需要輸出字符的ASCII碼
    int CharRain[Width/CharSize][High/CharSize];
    int CNum[Width/CharSize];//每一列的有效字符個數
    int i,j,x,y;
    srand((unsigned)time(NULL));//設置隨機函數種子

    for(i=0;i<widthNum;i++)//初始化字符矩陣
    {
        CNum[i]=(rand()%(highNum*9/10))+highNum/10;//這一列的有效字符個數
        for(j=0;j<CNum[i];j++)
            CharRain[j][i]=(rand()%26)+65;//產生A~Z的隨機字符
    }

    initgraph(Width,High);
    BeginBatchDraw();
    setfont(25,10,"Courier");//設置字體
    setcolor(RGB(0,255,0));

    while(1)
    {
        for(i=0;i<widthNum;i++)
        {
            if(CNum[i]<highNum-1)//當這一列字符沒有填滿時
            {
                for(j=CNum[i]-1;j>=0;j--)//每個字符向下移動一格
                {
                    CharRain[j+1][i]=CharRain[j][i];
                }
                CharRain[0][i]=(rand()%26)+65;//最上一格再重新隨機的產生一個字符
                CNum[i]=CNum[i]+1;//這一列的字符數加1
            }
        }
        for(i=0;i<widthNum;i++)//輸出整個字符矩陣
        {
            x=i*CharSize;//當前字符的x坐標
            for(j=0;j<CNum[i];j++)
            {
                y=j*CharSize;//當前字符的y坐標
                outtextxy(x,y,CharRain[j][i]);//輸出當前字符
            }
        }
        FlushBatchDraw();
        Sleep(200);
        clearrectangle(0,0,Width-1,High-1);//清空畫面
    }
    
    EndBatchDraw();
    getch();
    closegraph();
    return 0;
}

效果圖如下:

四、實現代碼雨動畫

代碼如下:

#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存儲對應字符矩陣中需要輸出字符的ASCII碼
    int CharRain[Width/CharSize][High/CharSize];
    int CNum[Width/CharSize];//每一列的有效字符個數
    int ColorG[Width/CharSize];//每一列字符的顏色
    int i,j,x,y;
    srand((unsigned)time(NULL));//設置隨機函數種子

    for(i=0;i<widthNum;i++)//初始化字符矩陣
    {
        CNum[i]=(rand()%(highNum*9/10))+highNum/10;//這一列的有效字符個數
        ColorG[i]=255;
        for(j=0;j<CNum[i];j++)
            CharRain[j][i]=(rand()%26)+65;//產生A~Z的隨機字符
    }

    initgraph(Width,High);
    BeginBatchDraw();
    setfont(25,10,"Courier");//設置字體

    while(1)
    {
        for(i=0;i<widthNum;i++)
        {
            if(CNum[i]<highNum-1)//當這一列字符沒有填滿時
            {
                for(j=CNum[i]-1;j>=0;j--)//每個字符向下移動一格
                {
                    CharRain[j+1][i]=CharRain[j][i];
                }
                CharRain[0][i]=(rand()%26)+65;//最上一格再重新隨機的產生一個字符
                CNum[i]=CNum[i]+1;//這一列的字符數加1
            }
            else
            {
                if(ColorG[i]>40)
                    ColorG[i]=ColorG[i]-20;//讓滿的這一列逐漸變暗
                else
                {
                    CNum[i]=(rand()%(highNum/3))+highNum/10;//這一列字符的個數
                    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;//當前字符的x坐標
            for(j=0;j<CNum[i];j++)
            {
                y=j*CharSize;//當前字符的y坐標
                setcolor(RGB(0,ColorG[i],0));
                outtextxy(x,y,CharRain[j][i]);//輸出當前字符
            }
        }
        FlushBatchDraw();
        Sleep(100);
        clearrectangle(0,0,Width-1,High-1);//清空畫面
    }
    
    EndBatchDraw();
    getch();
    closegraph();
    return 0;
}

效果圖如下:

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持LevelAH。

推薦閱讀: