标题:可以运行,但出不来结果,想要做数字雨
只看楼主
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
更新界面的逻辑应该是这样
全屏下移
下标1的一行找到每一滴雨的结尾
判断长度是否结束
没结束在下标0行延续
延续完成之后 根据第一行已有的雨滴个数
重新处理密度
比如
设定密度是8/10
一行有80列 准备填充64列
下标0行已经有10滴雨 你就在找54个空白位置添加新雨滴开头

https://zh.
2020-03-30 22:00
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
注意一行默认80列 你的100应该是错的
并且不需要自己添加换行
第81个字符自动显示在下一行

https://zh.
2020-03-30 22:01
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
程序代码:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
//cmd界面默认 25行 80列
#define M 25//
#define N 80//
#define TIME 40//刷新的速度,这里是停顿的时间
#define midu 1//密度

void Pos(int x, int y);//设置光标位置,决定要在什么位置输出
char output[M*N + M + 1];//行*列+M个换行+1个结束符
void Updata(char rain[M][N]);
void Print(char rain[M][N]);

int main(void)
{
    char rain[M][N];
    memset(rain, ' ', sizeof rain);
    srand((unsigned)time(NULL));//初始化随机的一个种子
    system("color 0A");//设置背景颜色
    while (1)
    {
        Updata(rain);//用于每一行向下一行移动
        Sleep(TIME);//每次要刷新的速度,之前定义了,
                    //            因为每次都要生成新的数组,中间存在间隔
    }
    return 0;
}

void Updata(char rain[M][N])
{
    int i, j, t;
    for (i = M - 2; i >= 0; --i)
    {
        for (j = 0; j < N; ++j)
        {
            rain[i + 1][j] = rain[i][j];//把上面的一行写到下一行
        }
    }
    int count = N * midu / 10;
    for (j = 0; j < N; ++j)
    {
        if (rain[1][j] != ' ')
        {
            //探测长度 太麻烦 直接给一个概率结束 
            if (rand() % 2)
                rain[0][j] = ' ';
            else
            {
                rain[0][j] = rand() % 10 + '0';
                --count;
            }
        }
    }
    while (count)
    {
        //简单粗暴的重复探测生成新雨滴
        int x = rand() % 80;
        if (rain[0][x] == ' ')
        {
            --count;
            rain[0][x] = 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];
        }
    }
    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);
}

https://zh.
2020-03-30 22:28
aluoshinn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-3-30
得分:0 
回复 13楼 lin5161678
谢谢
2020-03-30 23:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500738-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.157642 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved