どうも、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);
}
みごと、クリスマスツリーが出来上がりました。
このコードは乱数でデコレーションを出力してるのでデコレーションの位置が毎回変わるのも楽しみの一つですw
ご覧いただき、ありがとうございました。