C语言画一个 blingbling 的圣诞树!详细思路+源码分享

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言画一个 blingbling 的圣诞树!详细思路+源码分享相关的知识,希望对你有一定的参考价值。

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

全部效果的话这个树是会有颜色闪烁的哦!只是这个截图并没有显示出来,大家不妨看看下面的源码哦~

源码示例:(后面附带代码分析)

#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语言画一个 blingbling 的圣诞树!详细思路+源码分享的主要内容,如果未能解决你的问题,请参考以下文章

圣诞节文案,C语言画一个 blingbling 的圣诞树

圣诞节文案,C语言画一个 blingbling 的圣诞树

Python画圣诞树看多了,挑战用C语言画一个?圣诞快乐

Python画圣诞树看多了,挑战用C语言画一个?圣诞快乐

用C语言实现一个圣诞树!(超简单详细)全部源码分享

python如何画3d圣诞树