2011-08-30 21:45:11Morris

[隨便做] 駭客任務 : The Matrix 螢幕




可以用單向跟雙向, 調一下就可以了




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
HANDLE hIn, hOut, hConsole;
void gotoxy (int x, int y) {
    static COORD c; c.X = y; c.Y = x;
    SetConsoleCursorPosition (hOut, c);
}
struct {
    char s[100];
    int sx, sy, ex, sL;
    int up_down, set[100];
    int color, changecolor, changeset, exceed;
}Code[100];
main() {
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    hOut = GetStdHandle (STD_OUTPUT_HANDLE);
    hIn  = GetStdHandle (STD_INPUT_HANDLE);
    HANDLE err = INVALID_HANDLE_VALUE;
    srand ( time(NULL));
    int map[24][79] = {0}, a, b;
    int up_down, sx = -1, sy = 0, ex, sL, space;
    int ASCII[63], ASCidx = 0;
    for(a = '0'; a <= '9'; a++)
        ASCII[ASCidx++] = a;
    for(a = 'a'; a <= 'z'; a++)
        ASCII[ASCidx++] = a;
    for(a = 'A'; a <= 'Z'; a++)
        ASCII[ASCidx++] = a;
    ASCidx = 2;
    for(a = 0; a < 39; a++) {
        for(b = 0; b < 100; b++)
            Code[a].s[b] = ASCII[rand()%ASCidx];
        sL = rand()%20+10;
        up_down = rand()%2;
        sx = rand()%15, ex = sx + rand()%20 + 5;
        if(ex >= 23)    ex = 23;
        Code[a].sL = sL, Code[a].sx = sx, Code[a].ex = ex;
        Code[a].up_down = up_down, Code[a].sy = sy;
        if(up_down) {
            int i, st_time = rand()%50+1;
            for(i = 0; i < sL; i++)
                Code[a].set[i] = ex+i+st_time;
        } else {
            int i, st_time = rand()%50+1;
            for(i = 0; i < sL; i++)
                Code[a].set[i] = sx-i-st_time;
        }
        Code[a].color = rand()%2 ? 2 : 10;
        Code[a].changecolor = 0, Code[a].changeset = rand()%23;
        Code[a].exceed = 0;
        sy += 2;
    }
    int Order[1000], OL = 1000;
    int i, j;
    while(1) {
        for(a = 0; a < 39; a++) {
            if(Code[a].exceed == 1)
                SetConsoleTextAttribute(hConsole, Code[a].color == 2 ? 10 : 2);
            else
                SetConsoleTextAttribute(hConsole, Code[a].color);
            Code[a].changecolor ++;
            if(Code[a].up_down) {
                for(i = 0; i < Code[a].sL; i++) {
                    if(Code[a].set[i] == Code[a].changeset) {
                        Code[a].exceed = 1;
                        SetConsoleTextAttribute(hConsole, Code[a].color);
                    }
                    /*if(Code[a].set[i] < Code[a].sx)
                        Code[a].set[i] += (Code[a].ex-Code[a].sx), Code[a].s[i] = (rand()&1) + '0';*/
                    if(Code[a].set[i] >= Code[a].sx && Code[a].set[i] <= Code[a].ex) {
                        gotoxy(Code[a].set[i], Code[a].sy), printf("%c", Code[a].s[i]);
                        if(Code[a].set[i] != Code[a].ex)
                            gotoxy(Code[a].set[i]+1, Code[a].sy), printf(" ");
                    }
                    if(Code[a].set[i] == Code[a].sx)
                        gotoxy(Code[a].sx, Code[a].sy), printf(" ");
                    Code[a].set[i]--;
                }
            } else {
                for(i = 0; i < Code[a].sL; i++) {
                    if(Code[a].set[i] == Code[a].changeset) {
                        Code[a].exceed = 1;
                        SetConsoleTextAttribute(hConsole, Code[a].color);
                    }
                    if(Code[a].set[i] >= Code[a].sx && Code[a].set[i] <= Code[a].ex) {
                        gotoxy(Code[a].set[i], Code[a].sy), printf("%c", Code[a].s[i]);
                        if(Code[a].set[i] != Code[a].sx)
                            gotoxy(Code[a].set[i]-1, Code[a].sy), printf(" ");
                    }
                    if(Code[a].set[i] == Code[a].ex)
                        gotoxy(Code[a].ex, Code[a].sy), printf(" ");
                    Code[a].set[i]++;
                }
            }
            if((Code[a].set[Code[a].sL-1] < Code[a].sx && Code[a].up_down) || (Code[a].set[Code[a].sL-1] > Code[a].ex && Code[a].up_down == 0)) {
                Code[a].up_down = rand()%2;
                sx = rand()%15, ex = sx + rand()%20 + 5;
                if(ex >= 23)    ex = 23;
                Code[a].sx = sx, Code[a].ex = ex;
                if(Code[a].up_down) {
                    Code[a].sL = rand()%20 + 10;
                    int st_time = rand()%40;
                    for(i = 0; i < Code[a].sL; i++)
                        Code[a].s[i] = ASCII[rand()%ASCidx], Code[a].set[i] = Code[a].ex+i+st_time;
                    Code[a].changecolor = 0, Code[a].color = rand()%20 ? 10 : 2;
                    Code[a].changeset = rand()%(ex-sx+1)+sx, Code[a].exceed = 0;
                } else {
                    Code[a].sL = rand()%20 + 10;
                    int st_time = rand()%40;
                    for(i = 0; i < Code[a].sL; i++)
                        Code[a].s[i] = ASCII[rand()%ASCidx], Code[a].set[i] = Code[a].sx-i-st_time;
                    Code[a].changecolor = 0, Code[a].color = rand()%20 ? 10 : 2;
                    Code[a].changeset = rand()%(ex-sx+1)+sx, Code[a].exceed = 0;
                }
            }
        }         
        Sleep(30);
    }
    gotoxy(23, 78);
    system("pause");
    return 0;
}