C语言实现一个闪烁的圣诞树(控制台)

news/2024/11/28 17:43:57/
下下下周就是圣诞节啦,C语言的圣诞树必须安排起!!!

效果展示:

原理说明:

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

源码展示:

#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;
}

END


自学编程的小伙伴们不容易,在学习编程的路上会遇到很多瓶颈,甚至会感到迷茫,为此我给大家整理了一些资源福利,都放在下方啦,还可以和群里的小伙伴们一起来学习交流嗷~

C/C++编程学习基地icon-default.png?t=M85Bhttps://jq.qq.com/?_wv=1027&k=Dk3DoSWm

 


http://www.ppmy.cn/news/2554.html

相关文章

【有营养的算法笔记】归并排序

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;有营养的算法笔记 文章目录一、思路二、模板讲解三、模板测试四、加练 —— 逆序对的数量今天讲解的内容是…

Alvas.Audio专门为C#和VB.Net程序员设计

Alvas.Audio专门为C#和VB.Net程序员设计 Alvas.Audio库使C#和VB.Net程序员能够创建执行(包括混合声音信息)、捕获、转换和编辑音频的应用程序。 Alvas.Audio音频是C#音乐库。Web程序员。 这使您能够生产。NET程序&#xff0c;例如Winforms/WPF/Windows服务/控制台录音机、Inter…

机器学习-模型评估与选择(待更新)

本章主要讲解机器学习的基础知识&#xff0c;有关一些专业术语的定义与解释。 文章目录2.1 经验误差与过拟合2.2 评估方法2.2.1 留出法2.2.2 交叉验证法2.2.3 自助法2.2.4 调参与最终模型2.3 性能度量2.3.1 错误率与精度2.3.2 查准率、查全率与F12.3.3 ROC与AUC2.1 经验误差与过…

观看2022年卡塔尔世界杯的感想

每四年一度的世界杯又开始了&#xff0c;刚好在假期&#xff0c;这可是自我懂事以来第一次认真的观看。每到有球赛时我们父子齐上阵&#xff0c;摩拳擦掌、看到精彩时不忘高声齐呼&#xff0c;于是客厅就变成我们爷俩的绿茵场了。 几场下来&#xff0c;我只看到白皮肤&…

windows几个常用的命令

1. net命令 查看用户列表: net user powershell查看用户列表: Get-WmiObject -Class Win32_UserAccount 查看用户组列表: net localgroup 查看管理组列表: net localgroup Administrators 添加用户并设置密码: net user ASP.NET Pssw0rd /add 将用户加入管理组: net localgrou…

[附源码]JAVA毕业设计田径运动会管理系统(系统+LW)

[附源码]JAVA毕业设计田径运动会管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

AT_pakencamp_2021_day2 a~c 题解

目录A题&#xff08;AT_pakencamp_2021_day2_a Participants 2 &#xff09;题目大意思路CODEB题&#xff08;AT_pakencamp_2021_day2_b Pasokon Power &#xff09;思路CODEC题&#xff08;AT_pakencamp_2021_day2_c Participants 3 &#xff09;题目翻译思路CODEA题&#xff…

(附源码)SSM失物招领平台 毕业设计 271621

SSM失物招领平台的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对失物招领等问…