c/c++语言开发共享C语言实现一个闪烁的圣诞树

圣诞节来啦!看到很多小伙伴用各种语言画出了圣诞树,于是就想用 c 语言来画一颗圣诞树,有点粗糙,下面先来看一下效果图吧!图1 圣诞树下面来看下源码,如下所示:#include <math.h&g

圣诞节来啦!看到很多小伙伴用各种语言画出了圣诞树,于是就想用 c 语言来画一颗圣诞树,有点粗糙,下面先来看一下效果图吧!

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

图1 圣诞树

下面来看下源码,如下所示:

  #include <math.h>  #include <stdio.h>  #include <stdlib.h>  #include <conio.h>  #include <windows.h>  #include <stdbool.h>     #define n 15  char 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)

函数 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 循环,不断刷新圣诞树和圣诞树点缀的颜色。

需要了解更多c/c++开发分享C语言实现一个闪烁的圣诞树,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/996280.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐