第一版本
#include<stdio.h>
#include<string.h>
#include<stdlib.h> //清屏命令在这里。
#include <windows.h> //延时10毫秒-sleep,gotoxy函数
#include <iostream>
#include <conio.h> //getch()----不用按回车,就可以输入字符。
#include <graphics.h> //EasyX库,所使用的!
#include <math.h> //三角函数
#include <algorithm> //sort函数排序方法,https://blog.csdn.net/BIGKALA/article/details/81624691,这是方法适用的地址
#include <time.h>
using namespace std;
#define High 800
#define Width 1000 //定义游戏画面尺寸
#define CharSize 25 //定义每个字符显示的大小
int main()
{
int highNum = High / CharSize; //高度可以存放的字符数量
int widthNum = Width / CharSize; //宽度,可以存放的字符数量
//charRain存储对应字符矩阵中需要输出字符的ASCII码
int charRain[High / CharSize][Width / 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的随机ascii码
}
}
//======================初始化字符矩阵===结束
//=====接下来,把这个二维矩阵画出来,显示出来========================
initgraph(Width, High);
BeginBatchDraw();
setfont(25, 10, _T("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;
}
效果图
image.png
============================================================================
第二版本:
#include<stdio.h>
#include<string.h>
#include<stdlib.h> //清屏命令在这里。
#include <windows.h> //延时10毫秒-sleep,gotoxy函数
#include <iostream>
#include <conio.h> //getch()----不用按回车,就可以输入字符。
#include <graphics.h> //EasyX库,所使用的!
#include <math.h> //三角函数
#include <algorithm> //sort函数排序方法,https://blog.csdn.net/BIGKALA/article/details/81624691,这是方法适用的地址
#include <time.h>
using namespace std;
#define High 800
#define Width 1000 //定义游戏画面尺寸
#define CharSize 25 //定义每个字符显示的大小
int main()
{
int highNum = High / CharSize; //高度可以存放的字符数量
int widthNum = Width / CharSize; //宽度,可以存放的字符数量
//charRain存储对应字符矩阵中需要输出字符的ASCII码
int charRain[High / CharSize][Width / 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的随机ascii码
}
}
//======================初始化字符矩阵===结束
//=====接下来,把这个二维矩阵画出来,显示出来========================
initgraph(Width, High);
BeginBatchDraw();
setfont(25, 10, _T("Courier")); //设置字体
setcolor(GREEN); //设置颜色
//======下面的每一帧让字符向下移动,然后最上面产生新的字符
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; //最上一行产生随机的ascii码
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(100);
clearrectangle(0, 0, Width - 1, High - 1); //清空画面中的全部矩形区域。
}
EndBatchDraw();
//=====接下来,把这个二维矩阵画出来,显示出来========================
getch();
closegraph();
return 0;
}
=================================================
第三版,最终版本
#include<stdio.h>
#include<string.h>
#include<stdlib.h> //清屏命令在这里。
#include <windows.h> //延时10毫秒-sleep,gotoxy函数
#include <iostream>
#include <conio.h> //getch()----不用按回车,就可以输入字符。
#include <graphics.h> //EasyX库,所使用的!
#include <math.h> //三角函数
#include <algorithm> //sort函数排序方法,https://blog.csdn.net/BIGKALA/article/details/81624691,这是方法适用的地址
#include <time.h>
using namespace std;
#define High 800
#define Width 1000 //定义游戏画面尺寸
#define CharSize 25 //定义每个字符显示的大小
int main()
{
int highNum = High / CharSize; //高度可以存放的字符数量
int widthNum = Width / CharSize; //宽度,可以存放的字符数量
//charRain存储对应字符矩阵中需要输出字符的ASCII码
int charRain[High / CharSize][Width / 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的随机ascii码
}
}
//======================初始化字符矩阵===结束
//=====接下来,把这个二维矩阵画出来,显示出来========================
initgraph(Width, High);
BeginBatchDraw();
setfont(25, 10, _T("Courier")); //设置字体
setcolor(GREEN); //设置颜色
//======下面的每一帧让字符向下移动,然后最上面产生新的字符
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; //最上一行产生随机的ascii码
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; //产生A-z的随机ascii码
}
}
}
}
//======================输出整个字符矩阵
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(100);
clearrectangle(0, 0, Width - 1, High - 1); //清空画面中的全部矩形区域。
}
EndBatchDraw();
//=====接下来,把这个二维矩阵画出来,显示出来========================
getch();
closegraph();
return 0;
}













网友评论