LoginSignup
5

More than 5 years have passed since last update.

【C言語】クリスマスツリーをコマンドラインで

Last updated at Posted at 2015-11-28

 どうも、drumathです。デパートや商店街ではもうクリスマスの準備が始まっていますね。いやだなぁ、またクリボッチとか言われんだろうなぁって季節です。学生なんでそこらへん焦ってます。

クリスマスツリー

 さてコマンドラインにクリスマスツリーを描きたいなんてことを思ったわけです。ツリーの外観としては


¥¥
¥¥¥
¥¥¥¥¥
¥¥
¥¥¥
¥¥¥¥¥
¥¥¥¥¥¥¥¥
¥¥¥
¥¥¥¥¥
¥¥¥¥¥¥¥¥
¥¥¥¥¥¥¥¥¥¥¥¥¥
  ]
  ]
""""""
こんな感じの木を線対象に作るようなコードを描きます。(ちなみに気分でフィボナッチ数列になっています。)

コード

コードはこんな感じです。

tree.c
#include "tree.h"

int main()
{
    color_change(0x0e);
    printf("%35s\n","*\0" );
    color_change(0x02);
    leaves_2();
    color_change(0x04);
    miki();
    color_change(0x0b);
    printf("Happy,Christmas!!\n");
    color_change(0x0f);

    return 0;
}
tree.h
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

#define ARRAY_MAX 35
#define LEEFF "\\"
#define DECO1 "*"
#define DECO2 "?"
#define DECO3 "&"
#define SEED 25

void pri_deco1();
void pri_deco2();
void pri_deco3();

void leaves_2()
{
    int a=1,b=2,tmp=0;
    int i,j,k;
    int x,y,z;

    srand((unsigned)time(NULL));

    printf("%35s\n",LEEFF);
    for(k=0;k<4;k++){
        x=a;
        y=b;
        for(i=0;i<5;i++){
            for(j=0;j<34-a;j++){
                printf(" ");
            }
            for(j=0;j<a;j++){
                if ((rand()%15)==0) {
                    pri_deco1();
                } else if((rand()%SEED)==1){
                    pri_deco2();
                } else if((rand()%SEED)==2){
                    pri_deco3();
                }else{
                    printf(LEEFF);
                }
            }
            printf(LEEFF);
            for(j=0;j<a;j++){
                if ((rand()%15)==0) {
                    pri_deco1();
                } else if((rand()%SEED)==1){
                    pri_deco2();
                } else if((rand()%SEED)==2){
                    pri_deco3();
                }else{
                    printf(LEEFF);
                }
            }
            printf("\n");
            tmp=a+b;
            a=b;
            b=tmp;
        }
        a=y;
        b=x+y;
        tmp=0;
    }
}

void miki()
{
    int i=0;
    for(i=0;i<5;i++){
        printf("%35s","|       \0" );
        printf("%7s\n","|" );
    }
    printf("%35s","-------\0" );
    printf("%s\n","-------\0" );
}
void color_change(char col)
{

  SetConsoleTextAttribute(
    GetStdHandle(STD_OUTPUT_HANDLE),
    FOREGROUND_INTENSITY | col );
}
void pri_deco1()
{
    color_change(0x0d);
    printf(DECO1);
    color_change(0x02);
}
void pri_deco2()
{
    color_change(0x0b);
    printf(DECO2);
    color_change(0x02);
}
void pri_deco3()
{
    color_change(0x0e);
    printf(DECO3);
    color_change(0x02);
}

このコードを実行すると↓
2015-11-29.png

みごと、クリスマスツリーが出来上がりました。
このコードは乱数でデコレーションを出力してるのでデコレーションの位置が毎回変わるのも楽しみの一つですw

ご覧いただき、ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5