C语言实现代码雨效果

 更新时间:2022年05月13日 08:54:26   作者:辉小歌  
这篇文章主要为大家详细介绍了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;
}

效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Windows程序内部运行机制实例详解

    Windows程序内部运行机制实例详解

    这篇文章主要介绍了Windows程序内部运行机制实例详解,对于学习Windows程序设计来说是非常重要的一课,需要的朋友可以参考下
    2014-08-08
  • C语言实现倒置字符串的两种方法分享

    C语言实现倒置字符串的两种方法分享

    这篇文章主要和大家详细介绍了利用C语言实现倒置字符串的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手尝试一下
    2022-08-08
  • C语言数据结构二叉树先序、中序、后序及层次四种遍历

    C语言数据结构二叉树先序、中序、后序及层次四种遍历

    这篇文章主要介绍了C语言数据结构二叉树先序、中序、后序及层次四种遍历方式,具有一定的知识性参考价值,需要的小伙伴可以先看一下
    2022-02-02
  • C语言深入讲解链表的使用

    C语言深入讲解链表的使用

    当我们在写一段代码时,如果要频繁的在一块区域进行插入或者删除操作时,会发现用数组实现会比较复杂,这时候我们就要用另一种数据结构,链表来实现
    2022-05-05
  • C语言实现纸牌游戏(小猫钓鱼)

    C语言实现纸牌游戏(小猫钓鱼)

    这篇文章主要为大家详细介绍了C语言实现纸牌游戏,小猫钓鱼游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • C++实现LeetCode(140.拆分词句之二)

    C++实现LeetCode(140.拆分词句之二)

    这篇文章主要介绍了C++实现LeetCode(140.拆分词句之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 详解C++ 的STL迭代器原理和实现

    详解C++ 的STL迭代器原理和实现

    这篇文章主要为大家介绍了C++的STL迭代器原理和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • c/c++中变量的声明和定义深入解析

    c/c++中变量的声明和定义深入解析

    “声明”为编译服务,用于类型检查 ;“定义”在运行时会分配空间,不能重复定义,同时具备声明的功能
    2013-09-09
  • 利用C++实现⾃然连接操作算法

    利用C++实现⾃然连接操作算法

    这篇文章主要介绍了利用C++实现⾃然连接操作算法,文章围绕主题展开详细的内容介绍,具有一定参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • C++ 先对数组排序,在进行折半查找

    C++ 先对数组排序,在进行折半查找

    以下小编就为大家介绍两种实现方法。第一种方法是,选择排序法+循环折半查找法。第二种方法是,冒泡排序法+递归折半查找法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10

最新评论