卢湾新闻热线

上海热点新闻

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/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2023年2月    »
12345
6789101112
13141516171819
20212223242526
2728
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.2

    Copyright Your luwan.sh.cn Rights Reserved.