C语言实现一个闪烁的圣诞树

圣诞节来啦!看到很多小伙伴用各种语言画出了圣诞树,于是就想用 C 语言来画一颗圣诞树,有点粗糙,下面先来看一下效果图吧!
C语言实现一个闪烁的圣诞树
文章图片

图1 圣诞树
下面来看下源码,如下所示:

#include #include #include #include #include #include #define N 15char str[] = {'*', ' ', '@', ' ', '#', ' ', '\'',' ', '$', ' ', '%', ' ', '&', ' ', '!'}; void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a); } void getCoord(double y, double x){COORD pos = { x,y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void hideCursor(){CONSOLE_CURSOR_INFO cursor= { 1, 0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor); } void layer(int x, int y, int num, int col) {color(col); getCoord(x, y); int idx = rand()%N; printf("%c", str[idx]); for(int k = 1; k <= num; ++k) {idx = rand()%N; getCoord(x + k - 1, y); printf("%c", str[idx]); for(int i = 1; i <= (k*2-1)/2; i++) {getCoord(x + k - 1, y - i); idx = rand()%N; printf("%c", str[idx]); getCoord(x + k - 1, y + i); idx = rand()%N; printf("%c", str[idx]); }} } void triangle(int x, int y, int num, int col) {getCoord(x, y); color(col); printf("*"); for(int i = 1; i <= num; ++i) {int x1 = x + i; int y1 = y - i; for(int j = 0; j < i * 2 + 1; ++j) {getCoord(x1, y1 + j); printf("*"); }}} void triangleRight(double x, double y, double num, double col) {getCoord(x, y*2); color(col); printf("*"); for(int i = 1; i <= num; ++i) {double x1 = x - i; double y1 = y - i; for(int j = 0; j < i * 2 + 1; ++j) {getCoord(x1 + j, y1 * 2); printf("*"); }}} void triangleLeft(double x, double y, double num, double col) {getCoord(x, y*2); color(col); printf("*"); for(int i = 1; i <= num; ++i) {double x1 = x - i; double y1 = y + i; for(int j = 0; j < i * 2 + 1; ++j) {getCoord(x1 + j, y1 * 2); printf("*"); }}} void rectangle(int x, int y, int h, int w, int col1, int col2) {color(col1); for(int i = 0; i <= h; ++i) {for(int j = 0; j <= w/2; ++j) {getCoord(x + i, y - j); if(i % 3 || j % 2)printf("*"); else {color(col2); printf("!"); color(col1); }getCoord(x + i, y + j); if(i % 3 || j % 2)printf("*"); else {color(col2); printf("!"); color(col1); }}}} int main() {hideCursor(); int colTop = 4; int colMid = 4; int colEnd = 13; while(true) {colTop = colTop == 4 ? 9 : 4; triangleLeft(5, 27.8, 2, colTop); triangleRight(5, 27.8, 2, colTop); Sleep(100); layer(5, 55, 10, 2); layer(9, 55, 16, 2); layer(14, 55, 26, 2); colMid = colMid == 4 ? 5 : 4; triangle(11, 55, 3, colMid); triangle(19, 60, 3, colMid); triangle(29, 42, 3, colMid); triangle(31, 57, 3, colMid); colEnd = colEnd == 13 ? 1 : 13; rectangle(40, 55, 15, 18, 6, colEnd); Sleep(200); }return 0; }

上面便是圣诞树的简单实现,下面来说下原理:
函数 layer 画出树的层次,根据坐标来输出位置;
void layer(int x, int y, int num, int col)

函数 triangle 画出小三角形,作为点缀;
void triangle(int x, int y, int num, int col)

【C语言实现一个闪烁的圣诞树】函数 triangleRight 和 triangleLeft 画出圣诞树顶部的蝴蝶结;
void triangleRight(double x, double y, double num, double col); void triangleLeft(double x, double y, double num, double col);

函数 hideCursor 负责隐藏光标;
void hideCursor()

函数 getCoord 负责确定输出字符的位置;
void getCoord(double y, double x)

函数 color 负责设置输出的颜色;
void color(int a)

主函数的原理如下:
void color(int a)

主函数通过一个 while 循环,不断刷新圣诞树和圣诞树点缀的颜色。

    推荐阅读