一、前言

圣诞节快到了,又到了给对象画圣诞树的时候了,这次我们不用备忘录,我们用代码,属于程序员的浪漫。

二,效果展示

三,实现步骤

windows.h简介

我们先思考一个问题,如何用C程序输出不同颜色的字体?一般来说,只靠应用程序本身很难达到这个目的,因为运行窗口的管理属于操作系统资源,而应用程序想要使用这些资源就必须通过操作系统提供的接口来实现。

为了解决这类问题,微软提供了丰富的Windows API(Application Programming Interface),这些API并不会直接在应用程序中展开,而是以动态链接的形式存在着,在应用程序需要API实现某些功能的时候,才调用相应的动态链接库。通过调用各种Windows API函数,应用程序可以管理它的用户界面、显示各种图形和文字、播放音乐等等。

windows.h是微软操作系统中非常重要的一个头文件,它包含了多个头文件以及多种API函数接口,比如Winbase.h(Windows内核函数等)、Winuser.h(Windows用户界面管理函数等)、Wingdi.h(Windows图形设备接口函数等)

四,完整代码

1,黑白圣诞树

#include <windows.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265359
#define T px + scale * r * cosf(theta), py + scale * r * sin(theta)
float sx, sy;
float sdCircle(float px, float py, float r) {float dx = px - sx, dy = py - sy;return sqrtf(dx * dx + dy * dy) - r;
}
float opUnion(float d1, float d2) {return d1 < d2 ? d1 : d2;
}
float f(float px, float py, float theta, float scale, int n) {float d = 0.0f;for (float r = 0.0f; r < 0.8f; r += 0.02f)d = opUnion(d, sdCircle(T, 0.05f * scale * (0.95f - r)));if (n > 0)for (int t = -1; t <= 1; t += 2) {float tt = theta + t * 1.8f;float ss = scale * 0.9f;for (float r = 0.2f; r < 0.8f; r += 0.1f) {d = opUnion(d, f(T, tt, ss * 0.5f, n - 1));ss *= 0.8f;}}return d;
}
int ribbon() {float x = (fmodf(sy, 0.1f) / 0.1f - 0.5f) * 0.5f;return sx >= x - 0.05f && sx <= x + 0.05f;
}
int main(int argc, char* argv[]) {int n = argc > 1 ? atoi(argv[1]) : 3;float zoom = argc > 2 ? atof(argv[2]) : 1.0f;for (sy = 0.8f; sy > 0.0f; sy -= 0.02f / zoom, putchar('\n'))for (sx = -0.35f; sx < 0.35f; sx += 0.01f / zoom) {if (f(0, 0, PI * 0.5f, 1.0f, n) < 0.0f) {if (sy < 0.1f) {putchar('.');} else {if (ribbon()) {putchar('=');} else {putchar("............................#j&o"[rand() % 32]);}}} else {putchar(' ');}}Sleep(1000);printf("\n\n\n");for (size_t i = 0; i < 40; i++) {putchar(' ');}//_sleep(5000);printf("Merry Christmas!\n");Sleep(500);for (size_t i = 0; i < 40; i++) {putchar(' ');}Sleep(500);for (size_t i = 0; i < 40; i++) {putchar(' ');}printf("2022/12/24");getchar();
}

2,彩色圣诞树

#include<windows.h>
#include<stdio.h>
#include<time.h>void color(const unsigned short textColor);
void goto_xy(int x, int y);
void tree(int height,int colorOfLeaves);
void snow(int n);/*根据参数改变字体颜色*/
void color(const unsigned short textColor)
{if(textColor>=0&&textColor<=15){//参数在0-15的范围颜色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),textColor);}else{//默认的字体颜色是白色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);}
}
/*定位光标位置到指定坐标*/
void goto_xy(int x, int y){HANDLE hout;hout=GetStdHandle(STD_OUTPUT_HANDLE);COORD pos={x,y};SetConsoleCursorPosition(hout,pos);
}
/*画圣诞树*/
void tree(int height,int colorOfLeaves){//画五角星if(colorOfLeaves==10){color(3);}else{color(11);}goto_xy(24,3);printf("%c%c\n",161,239);//GBK中五角星对应的编码为A1EF,换成十进制就是161 239//画叶子color(colorOfLeaves);for(int i=1;i<height;i++){if(colorOfLeaves==14){Sleep(60);}goto_xy(25-i-1,i+3);for(int j=2*i+2;j>0;j--){printf("*");}printf("\n");}//画树干goto_xy(25-1,height+3);color(4);printf("||");printf("\n");
}
/*绘制雪景*/
void snow(int n){srand(time(0));for(int i=0;i<n;i++){int x=rand()%50;int y=rand()%15;goto_xy(x,y);color(7);if(i<n-5){printf("·");}else{printf("*");}}
}
int main(){system("title 圣诞快乐!");system("mode con cols=50 lines=15");//设置窗口大小while(1){snow(30);tree(10,10);Sleep(1000);//延迟1000毫秒tree(10,14);Sleep(1000);//延迟1000毫秒system("cls");//清屏}return 0;
}

喜欢的话点个赞吧!!!

C/C++打印圣诞树||秀翻全场!相关推荐

  1. excel数据库_EXCEL——数据库函数Dsum你真的会吗?学会包你秀翻全场

    提到求和,有点儿"老生常谈"的感觉,有的同学可能会说,不就是Sum.Sumif.Sumifs.Sumproduct等函数的应用--但是区域求和,你知道怎么操作吗?用什么函数公式吗? ...

  2. 这才是Word转PPT的正确姿势,1分钟转300页!学会了秀翻全场

    你有没有过这样的体验:领导发了个上百页的Word文档给你,要你帮忙转成PPT,怎么办? 复制粘贴?建议你别试了,亲身经历告诉你,3小时都弄不完,手都快废了!关键是效果还不好!那么Word转PPT的正确 ...

  3. php 打印 换页,html的打印代码支持翻页

    这次给大家带来html的打印代码支持翻页,使用html支持翻页的打印代码注意事项有哪些,下面就是实战案例,一起来看一下. ylbtech_html_print html打印代码,支持翻页 看看 .No ...

  4. word打印A4纸翻页小册子设置

    要实现的是A4纸对折成翻页的小册子 在word里选页面布局设置如下: 还有页脚的页数显示要改成左页的页数在左下角,右页的页数在右下角: 有页码显示时双击页脚会出来页码设置,选择双面打印2. 转成pdf ...

  5. python打印圣诞树思路+详解简单粗暴实现

    一.打印一个简单版圣诞树 实现如下: # * # *** # ***** # ******* # ********* # * # * # * 代码: for i in range(1,9):# 小于六 ...

  6. 编写打印从n到m之间数据的函数 编写打印星号三角形函数,打印圣诞树图形 Python123题解

    编写打印从n到m之间数据的函数‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪ ...

  7. 一个学妹写的按键检测函数把我秀翻了!

    摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍 上来第一个例程就是使用按键点亮一个LED灯,好家伙.点灯小师弟比较在行,毕竟32.FP ...

  8. 扎克伯格5小时听证鏖战:五大焦点,四处尴尬,一次耿直CEO笑翻全场

    允中 发自 凹非寺 量子位 出品 | 公众号 QbitAI 连续5个小时. 即将年满34岁的Facebook创始人扎克伯格,孤独地坐在美国国会听证会现场,面对44名参议员和一个接一个的尖锐提问. &q ...

  9. Word 人人都要会的打印攻略(书籍打印,方便翻页,统一格式,缩放打印省纸又方便)

    引言   本篇博文结合这两篇食用更佳(知识点遥相呼应,有共通之处,且大多结合使用,轻松举一反三) Word 注重页面细节才专业(添加页眉页脚,调整页边距,消灭孤行) | 职场人就应该这样用 Word ...

最新文章

  1. React学习笔记4: React脚手架配置代理
  2. 正则表达式了解和使用
  3. python urllib.request 爬虫 数据处理-Python爬虫学习之(二)| urllib进阶篇
  4. Gartner:2019年七大AI科技趋势,百万行业将颠覆!
  5. CODE[VS] 1275有鱼的声音 2012年CCC加拿大高中生信息学奥赛
  6. FlexiBO:基于成本感知的深度神经网络多目标优化
  7. mongoDB操作详细
  8. 使用TensorFlow.js进行AI在网络摄像头中翻译手势和手语
  9. vue-cli学习入门_byKL
  10. 基本数据结构解析之Stack Queue
  11. java item 类型参数_Java8中对Lambda表达式中方法参数的类型推断(一)
  12. 二进制与格雷码互相转换
  13. Linux下C语言编程风格和规范
  14. Win10系统精简优化工具 NTLite v1.5.0 企业版
  15. 【蓝桥杯】枚举,模拟,排序专题 (一)
  16. HashMap常见面试题汇总:建议初步了解源码后再细品
  17. armv8/armv9/aarch64/arm64/A64/架构/IP你不知道的那些事
  18. 数据治理与数据安全研读开篇
  19. 汾阳市教师招聘中职计算机真题,2019年山西省吕梁市汾阳市中小学语文教师招聘/编制考试历年真题试卷及答案解析...
  20. php工程师进行以太坊开发的教程

热门文章

  1. [work] 生成模型和判别模型的理解
  2. 三维马氏距离_各种距离(欧氏距离、曼哈顿距离、切比雪夫距离、马氏距离等)...
  3. 避坑宝典:如何选择HTML5游戏引擎
  4. *#*#4636#*#*
  5. 通过Anaconda管理环境
  6. Python数据分析:双色球的深度学习预测
  7. 设计模式 电子书 免费下载
  8. 电容笔有什么用?Ipad2022电容笔推荐
  9. 如何重新找到在Windows Live Mail 中直接打开修改保存并且不小心关闭的文件
  10. python gridfs_【已解决】用Python去连接本地mongoDB去用GridFS保存文件