回复 2楼 lin5161678大佬,那这样呢?新人学校刚学没几周,但有这个任务
#include
#include
#include
#include
#define M 40//行
#define N 100//列
#define TIME 40//刷新的速度,这里是停顿的时间
#define midu 8//密度
void Pos(int x, int y);//设置光标位置,决定要在什么位置输出
char output[M*N+M+1];//行*列+M个换行+1个结束符
void Create(char rain[M][N]);
void Updata(char rain[M][N]);
void Print(char rain[M][N]);
int main(void)
{
char rain[M][N];
//int changdu;
srand((unsigned)time(NULL));//初始化随机的一个种子
system("color 0A");//设置背景颜色
//while(1){
//{
//changdu=rand()%(M/4);
Create(rain);//用于最开始的创建
while(1)
{
Sleep(TIME);//每次要刷新的速度,之前定义了,
// 因为每次都要生成新的数组,中间存在间隔
Updata(rain);//用于每一行向下一行移动
}
//}
return 0;
}
void Create(char rain[M][N])
{
int changdu;
int i,j,t;
for(i = 0;i < M;++i)
{
for(j = 0;j < N;++j)
{
if(rand()%10 < midu)
rain[i][j] = ' ';
else
rain[i][j] = rand()%10 + '0';//生成第一滴雨
changdu=int(rand()%(M/4));
if(i>changdu)
{
for(t=1;t<=changdu;t++)
{
rain[i-t][j]= rand()%10 + '0';
}
}
else
{
for(t=1;t<=i;t++)
{
rain[i-t][j]= rand()%10 + '0';
}
}
}
}
}
void Updata(char rain[M][N])
{
int i,j,t;
int changdu;
for(i = M-2;i >= 0;--i)
{
for(j = 0;j < N;++j)
{
rain[i+1][j] = rain[i][j];//把上面的一行写到下一行
}
}
for(j = 0;j < N;++j)
{
if(rand()%10 < midu)
rain[i][j] = ' ';
else
rain[i][j] = rand()%10 + '0';//生成第一滴雨
changdu=int(rand()%(M/4));
if(i>changdu)
{
for(t=1;t<=changdu;t++)
{
rain[i-t][j]= rand()%10 + '0';
}
}
else
{
for(t=1;t<=i;t++)
{
rain[i-t][j]= rand()%10 + '0';
}
}
}
Pos(0,0);
Print(rain);
}
void Print(char rain[M][N])
{
int i,j;
int t = 0;
for(i = 0;i < M;++i)
{
for(j = 0;j < N;++j)
{
output[t++] = rain[i][j];
//putchar(info[i][j]);
}
output[t++] = '\n';
//putchar('\n');
}
output[t] = '\0';
printf("%s",output);
}
void Pos(int x,int y)
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput,pos);
}