C++彩色数据流动界面

一个数据流动界面

 

 

#include <windows.h>
#include <time.h>
#include <cstdio>
#include <string.h>
#include <conio.h>
#include <iostream>

using namespace std ;

#define MAX 20
#define LEN 5

char tu()
{
    //选择的字符的ASCII值的范围在 33--126
    char x ;
 k:

    x = (rand()%93)+33 ;
    if (48==x)
    {
        goto k ;
    }
    return x ;
}

int main()
{
  //  system("1.mp3");
    int i ;
    int j ;
    int k ;
    int m ;
    int n ;
    int di = 19 ;
    srand(time(NULL));
    char x_y[MAX][MAX]  ;
    for (i=0;i<MAX;i++)
    {
        for (j=0;j<MAX;j++)
        {
            x_y[i][j] = '0' ;
        }
    }
    //  初始化 :随机产生
    for(i=0;i<MAX;i++)
    {
        j = rand()%MAX ;
        if(j>=LEN)
        {
            for (k=1;k<=LEN;k++)
            {
                x_y[i][j] = tu() ;
                j-- ;
            }
        }
        else if(j<LEN)
        {
            n = j ;
            m = LEN-j ;  // 5 - 4 = 1
            for(k=1;k<=n;k++)
            {
                j-- ;
                x_y[i][j] = tu() ;
            }
            for (k=1;k<=m;k++)
            {
                x_y[i][di] = tu() ;
                di -- ;
            }
            di = 19 ;
        }
    }
    printf("\n\n\n\t\t\t");
    for (j=0;j<MAX;j++)
    {
        for (i=0;i<MAX;i++)
        {

            if ('0'!=x_y[i][j])
            {
                HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
                SetConsoleTextAttribute(hConsole,rand()%9) ;
                printf("%c  ",x_y[i][j]);
            }
            else
            printf("   ");

        }
        printf("\n\t\t\t");
    }

        ka :
     while(1)
     {
        Sleep(20);
        system("cls");

        /*
            此处需要注意的地方 ;
                1 . 应该从后往前对二维数组进行操作,如果从前向后,会导致一种死循环 ,flag会永远触发之类的
                2 . 取色函数最好的范围 在个位就差不多了  过大会导致背景变色
        */
          //  动起来
        for (i=MAX-1;i>=0;i--)
        {
            for (j=MAX-1;j>=0;j--)
            {
                if (j<=18&&j>=4)
                {
                    if (x_y[i][j]!='0'&&x_y[i][j+1]=='0')
                    {
                        x_y[i][j+1] = tu() ;
                        x_y[i][j-4] = '0' ;
                    }
                }
                else if (j==19)
                {
                    if (x_y[i][19]!='0'&&x_y[i][0]=='0')
                    {
                        x_y[i][0] = tu() ;
                        x_y[i][j-4] = '0' ;
                    }
                }
                else if (j==0)
                {
                    if (x_y[i][j]=='0'&&x_y[i][19]!='0')
                    {
                        x_y[i][0] = tu() ;
                        x_y[i][15] = '0' ;
                    }
                    else if (x_y[i][0]=='0'&&x_y[i][19]=='0')
                    {
                        ;
                    }
                    else if (x_y[i][0]!='0'&&x_y[i][1]=='0')
                    {
                        x_y[i][1] = tu() ;
                        x_y[i][16] = '0' ;
                    }
                }
                else if (j<=3)
                {
                    if (x_y[i][j]!='0'&&x_y[i][j+1]=='0')
                    {
                        x_y[i][j+1] = tu() ;
                        x_y[i][16+j] = '0' ;
                    }
                }
            }
        }
        printf("\n\n\n\t\t\t");
        for (j=0;j<MAX;j++)
        {
            for (i=0;i<MAX;i++)
            {

                if ('0'!=x_y[i][j])
                {
                    HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
                    SetConsoleTextAttribute(hConsole,rand()%10) ;
                    printf("%c  ",x_y[i][j]);
                }
                else
                printf("   ");

            }
            printf("\n\t\t\t");
        }
    goto ka ;
     }

    return 0;
}

 

posted @ 2017-12-02 23:03  AntzUhl  阅读(482)  评论(0编辑  收藏  举报