黑客帝国的代码雨特效曾经惊艳了很多人。其实,这个效果用c语言实现也是非常容易的。即便是一个c++语言入门新手,也可以轻松实现,全部代码只有三十行,如果你是一个入门新手,仔细阅读本文,马上可以上手展现自己的成果。
我们先看一下最终实现的效果图片,我们实现了红色的代码雨效果。
红色代码雨
我们将任务分解一下,其实也只有两项。
1.实现随机文字竖排连续显示。
2.实现文字颜色渐隐。
下面我们分别来实现两个需求。
要实现文字竖排连续显示,可以将显示字符列看成一个数组。数组成员初始化为随机值,然后将成员值进行递减。再根据当前值的大小,决定是否显示字符。成员随机值的大小和显示阈值。决定显示画面的稀疏。我们假定显示阈值是16,低于16就显示字符。高于16就显示空格。随机值最高为80。下面是实现文字竖排连续显示的代码。
char *text="abcdefghijklmnopqrstuvwxyz";//显示的字母表int row[100]={0};//设定显示列为100列,全部初始化为0int i;srand(time(NULL));//初始化随机数while(1){ for(i=0;i<100;i++) { if(--row[i]<0)//不停的递减,小于0就重新初始化 row[i]=rand()%80;//成员值为80以下的随机数 if(row[i]<16)//成员值小于16,则显示字符,否则显示空格 printf("%C",text[rand()%26]);//显示一个随机字符 else printf(" ");//显示一个空格 } printf("\n");//显示完一行,强制换行 Sleep(50);//添加延时,控制速度}完成了随机文字竖排显示,我们下面要解决的就是文字颜色渐隐效果了。我们的代码在Windows下编译。运行的环境是MS-dos平台。DOS只能显示16位颜色,设定文字颜色只能设定0-15的索引值。但MS-DOS给我们提供了修改颜色表的api ,我们要做的就是利用API修改颜色表,将16个索引颜色设定为红色由浅到深的过渡颜色。代码如下:
#include <windows.h> //调用 Windows API要包含Windows.h头文件CONSOLE_SCREEN_buffER_infoEX info; //控制台屏幕缓冲信息结构HANDLE hConsole=GetstdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄info.cbSize=sizeof(info); //这个结构大小必须填写,否则后面API调用会出错if(GetconsoleScreenBufferInfoEx(hConsole,&info))//获取屏幕缓冲结构信息{ int i; for(i=0;i<16;i++)//填充16个索引色 info.ColorTable[i]=RGB(17*i,0,0);//将红色进行16等分,每一个梯度变化为17 SetConsoleScreenBufferInfoEx(hConsole,&info);//修改索引色}修改完索引色,我们只需要在每次显示字符的时候,使用API修改字符颜色为指定的索引值。
if(row[i]<16)//成员值小于16,显示字符{ SetConsoleTextAttribute(hConsole,row[i]);//修改字符颜色为索引值 printf("%C",text[rand()%26]);//显示随机字符}看懂的小伙伴可以将代码组合起来,就可以实现我们需要的效果,修改不同的颜色表,可以生成不同颜色的代码雨。如有不太明白的,可以在评论区讨论。
浅蓝色代码雨
绿色代码雨
黄色代码雨