这篇文章主要为大家详细介绍了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;
}
效果图如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:C语言实现代码雨效果


猜你喜欢
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- ubuntu下C/C++获取剩余内存 2023-09-18
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言详解float类型在内存中的存储方式 2023-03-27
- Easyx实现扫雷游戏 2023-02-06
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30