C语言实现代码雨效果
作者:辉小歌 发布时间:2021-11-26 18:11:20
标签: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;
}
效果图如下:
来源:https://huixiaoge.blog.csdn.net/article/details/107895594


猜你喜欢
- Windows系统启动Java程序会弹出黑窗口。黑窗口有几点不好。首先它不美观;其次容易误点导致程序关闭;但最让我匪夷所思的是:将鼠标光标选
- 相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对
- 本文实例讲述了Java使用原型模式展现每日生活。分享给大家供大家参考,具体如下:一、模式定义用原型实例指定创建对象的种类,并且通过复制这些原
- 说点对这几个容易混淆的词的理解:1、c++中的virtual方法的 virtual关键字主要是防止继承中重复继承父类的同一个方法而设置的标识
- 一、国际化准备资源文件,资源文件的命名格式如下:baseName_language_country.propertiesbaseName_l
- import java.awt.AlphaComposite;import java.awt.Color;import java.awt.F
- 前言:线程池是一个非常重要的知识点,也是池化技术的一个典型应用,相信很多人都有使用线程池的经历,但是对于线程池的实现原理大家都了解吗?本篇文
- 作为Android app,发布多个分发平台是常规操作。然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻
- Jar包加密工具 ClassFinal介绍ClassFinal 是一款 java class 文件安全加密工具,支持直接加密jar包或war
- 蓝牙设置相关界面,以下是通过C#方式打开的几个方式,记录一下蓝牙设置界面1.控制面板命令bthprops.cpl可以用控制面板 contro
- 在工作中经常读写文本文件,在读文件时,需要按开头的两个字节判断文件格式,然后按该格式读文件中的内容。 写文件时,也要按目标文件指定
- 本文实例为大家分享了java实现二分法查找出数组重复数字的具体代码,供大家参考,具体内容如下package offer;/** * 二分查找
- 大家都知道使用java反射可以在运行时动态改变对象的行为,甚至是private final的成员变量,但并不是所有情况下,都可以修改成员变量
- 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此
- 本文实例为大家分享了Android手机开发设计之记事本功能,供大家参考,具体内容如下一、需求分析1.1业务需求分析近年来,随着生活节奏的加快
- 本文实例讲述了C#提取网页中超链接link和text部分的方法。分享给大家供大家参考,具体如下:string s = "..&qu
- final 可以适用的范围:修饰类:使用这种修饰符的类无法被继承修饰函数:被修饰的不能被重写修饰属性:1.final修饰的成员变量是常量,值
- 一、前言闭锁与栅栏是在多线程编程中的概念,因为在多线程中,我们不能控制线程的执行状态,所以给线程加锁,让其按照我们的想法有秩序的执行。闭锁C
- 本文实例讲述了C#通过xpath查找xml指定元素的方法。分享给大家供大家参考。具体如下:orders.xml文档内容如下<?xml
- * 与过滤器在讲Spring boot之前,我们先了解一下过滤器和 * 。这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的