赞
踩
以下代码实现了代码雨的一些基本功能
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> #define XMAX 150 #define YMAX 35 #define RAINLINES 50 char *str = "ki)udm+nh*&(^%cobpwerxz$#@<>?}{"; struct Rainpoint { char ch; int x; int y; }; struct Rainline { struct Rainpoint point[YMAX]; int start; int length; }; struct Rainline rainline[RAINLINES]; void SetWindow(); void SetColor(int n); void hide(); void init_rainline(); void gotoxy(int x, int y); void display(); void update(); int main() { SetWindow(); SetColor(2); hide(); init_rainline(); while (1) { display(); update(); }; return 0; } void SetWindow() { SetConsoleTitleA("骇客代码雨"); system("mode con cols=150 lines=35"); } void SetColor(int n) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n); } void hide() //隐藏光标函数调用。 { CONSOLE_CURSOR_INFO CURSORINFO = { 1,0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &CURSORINFO); } void init_rainline() { int i, j; srand((unsigned)time(NULL)); for (i = 0; i < RAINLINES; i++) { rainline[i].start = rand() % YMAX / 2 + 4; rainline[i].length = rand() % YMAX / 2 + 3; for (j = 0; j < YMAX; j++) { rainline[i].point[j].x = i; rainline[i].point[j].y = j; if (rainline[i].start < rainline[i].length) { if (j < rainline[i].start) { rainline[i].point[j].ch = str[rand() % strlen(str)]; } else { rainline[i].point[j].ch = ' '; } } else { if (j<rainline[i].start&&j>(rainline[i].start - rainline[i].length)) { rainline[i].point[j].ch = str[rand() % strlen(str)]; } else { rainline[i].point[j].ch = ' '; } } } } } void display() { int i, j; for (i = 0; i < RAINLINES; i++) { for (j = 0; j < YMAX; j++) { gotoxy(i * 3, j); putchar(rainline[i].point[j].ch); } } } void gotoxy(int x, int y) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void update() { int i, j; for (i = 0; i < RAINLINES; i++) { rainline[i].start++; if (rainline[i].start > YMAX) { rainline[i].start = YMAX; rainline[i].length--; } if (rainline[i].length == 0) { rainline[i].start = rand() % YMAX / 2 + 4; rainline[i].length = rand() % YMAX / 2 + 3; } for (j = 0; j < YMAX; j++) { if (rainline[i].start < rainline[i].length) { if (j < rainline[i].start) { rainline[i].point[j].ch = str[rand() % strlen(str)]; } else { rainline[i].point[j].ch = ' '; } } else { if (j<rainline[i].start&&j>(rainline[i].start - rainline[i].length)) { rainline[i].point[j].ch = str[rand() % strlen(str)]; } else { rainline[i].point[j].ch = ' '; } } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。