酷站(www.ku0.com)-致力于为互联网从业者提供专业的网络资源资讯

热门关键词:  企业  as  baidu  c4rp3nt3r  美女

C语言实现一个闪烁的圣诞树的方法

来源:互联网 作者:秩名 人气: 发布时间:2021-12-27
本篇文章主要介绍了C语言实现一个闪烁的圣诞树的方法,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下,也感谢大家对酷站(ku0.com)的支持。

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

图1 圣诞树

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

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

版权声明:本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 959677720#qq.cn(#换@) 举报,一经查实,本站将立刻删除。
原文链接:https://blog.csdn.net/nyist_zxp/article/details/122117876

相关文章

  • C语言实现一个闪烁的圣诞树的方法

    C语言实现一个闪烁的圣诞树的方法

    圣诞节来啦!看到很多小伙伴用各种语言画出了圣诞树,于是就想用 C 语言来画一颗圣诞树,有点粗糙,下面先来看一下效果图吧! 图1 圣诞树 下面来看下源码,如下所......
    12-27
  • Unity3D实现甜品消消乐游戏的教程

    Unity3D实现甜品消消乐游戏的教程

    前言 解释: 之前用的ScreenToGif录屏,因为上传的.gif最大不超过5MB,所以做了不少删帧和色彩弱化等处理,这才导致色彩看上去不是很舒服,不要盯着它看太久,不然会有......
    12-24
  • C语言的常量和字符串的详解介绍

    C语言的常量和字符串的详解介绍

    常量种类 C语言中,我们常使用的常量有以下几种: 字面常量 const常变量 #define定义的标识符常量 枚举常量 代码如下: #includestdio.h enum { //使用enum来建立枚举常量 papa,/......
    12-13
  • C语言把浮点数转换为字符串的方法

    C语言把浮点数转换为字符串的方法

    把浮点数转换为字符串 1、把float/double格式化输出到字符串 标准的C语言提供了atof函数把字符串转double,但是没有提供把float/double转换为字符串的库函数,而是采用sprint......
    12-10
  • C语言系统调用约定介绍

    C语言系统调用约定介绍

    常见的函数调用约定 cdecl , stdcall , fastcall , thiscall , naked call 简单介绍 HANDLE WINAPI GetStdHandle( _In_ DWORD nStdHandle ); //WINAPI不是返回值的类型,HANDLE才是 像这种函数的返回值我......
    12-07
  • C语言打印某一年中某月的日历的方法

    C语言打印某一年中某月的日历的方法

    大致思路: ① 判断输入的年份是否闰年; ② 计算输入月份的第一天是该年的第几天; ③ 计算输入月份的第一天是星期几; ④ 输出。 结合代码使用: #define _CRT_SECURE......
    12-06
  • C语言实现可排序通讯录的代码

    C语言实现可排序通讯录的代码

    1.目的 写一个实用型通讯录,它有如下功能: 显示目录 void ShowMenu() { printf(#######################\n); printf(#1.Add 2.Del 3.Search #\n); printf(#4.Mod 5.Show 6.Clear #\n); printf(#7.Sort 0.Exit #\......
    11-29
  • C++冒泡排序及其优化算法的介绍

    C++冒泡排序及其优化算法的介绍

    冒泡排序极其优化 算法步骤 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做......
    11-28
  • C++ Qt实现音视频播放功能的介绍

    C++ Qt实现音视频播放功能的介绍

    由于最近着手的Qt项目需要视频播放自己做的时候踩了很多坑避免以后踩坑 故在此记录实现过程 Qt版本 5.9基于C++11Qt核心组件与附加组件安装时请打钩否则可能出现项目中......
    11-26
  • C语言之水仙花数的介绍

    C语言之水仙花数的介绍

    题目描述 求出所有的水仙花数 分析 百度百科:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿......
    11-25