文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-22 06:27

关注

小编给大家分享一下C语言如何实现一个闪烁的圣诞树,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

效果图

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

图1 圣诞树

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

#include <math.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <windows.h>#include <stdbool.h> #define N 15char 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语言如何实现一个闪烁的圣诞树”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯