一个数据流动界面
#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; }