Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 구현하는 깜빡이는 크리스마스 트리 출력 프로그램

이번 글에서는 재미있는 프로그래밍 문제 하나를 살펴보겠습니다. 바로 C 언어를 이용해 크리스마스 트리를 무작위로 화면에 출력하는 방법입니다. 프로그램을 실행하면 마치 크리스마스 트리 전구처럼 트리가 계속 반짝이며 깜빡이는 효과를 확인할 수 있습니다.

크리스마스 트리 출력의 기본 원리

크리스마스 트리를 출력하려면 크기가 서로 다른 피라미드(삼각형) 모양을 여러 개 만들어 아래로 차곡차곡 겹쳐 그리면 됩니다. 트리를 장식하는 잎사귀는 미리 정해둔 문자 목록('.', '*', '+', 'o', 'O') 중에서 무작위로 하나를 골라 출력하는 방식으로 표현합니다. 트리의 높이와 무작위성(랜덤 정도)은 상수 값을 수정하여 자유롭게 조절할 수 있습니다.

여기서 핵심 아이디어는 다음과 같습니다. 트리를 한 번 생성한 후 화면 전체를 지우고(clear) 다시 새로 생성하는 과정을 무한히 반복합니다. 매번 잎 문자가 무작위로 바뀌기 때문에 화면에서는 트리가 실제 전구처럼 계속 깜빡거리는 것처럼 보이게 됩니다.

예제 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#define REFRESH_RATE 40000
#define RANDOM_NESS 5 // 값이 클수록 랜덤성이 줄어듦
void clear_screen() {
   system("@cls||clear");
}
void display_random_leaf() {
   char type_of_leaves[5] = { '.', '*', '+', 'o', 'O' }; // 잎의 종류
   int temp = rand() % RANDOM_NESS;
   if (temp == 1)
      printf("%c ", type_of_leaves[rand() % 5]); // temp가 1이면 다른 잎 사용
   else
      printf("%c ", type_of_leaves[1]); // 그 외에는 * 출력
}
void tree_triangle(int f, int n, int toth) {
   int i, j, k = 2 * toth - 2;
   for (i = 0; i < f - 1; i++)
      k--;
   for (i = f - 1; i < n; i++) { // i는 행(row) 수를 가리킴
      for (j = 0; j < k; j++) // 공백 출력용
      printf(" ");
         k = k - 1;
      for (j = 0; j <= i; j++)
         display_random_leaf();
      printf("\n");
   }
}
void display_tree(int h) {
   int start = 1, end = 0, diff = 3;
   while (end < h + 1) {
      end = start + diff;
      tree_triangle(start, end, h);
      diff++;
      start = end - 2;
   }
}
void display_log(int n) { // 트리 밑동(기둥) 출력
   int i, j, k = 2 * n - 4;
   for (i = 1; i <= 6; i++) {
      for (j = 0; j < k; j++)
         printf(" ");
      for (j = 1; j <= 6; j++)
         printf("#");
      printf("\n");
   }
}
main() {
   srand(time(NULL));
   int ht = 15;
   while (1) {
      clear_screen();
      display_tree(ht);
      display_log(ht);
      usleep(REFRESH_RATE); // 화면을 교체하기 전 대기
   }
}

실행 결과

프로그램을 컴파일하여 실행하면 콘솔 화면에 여러 층으로 이루어진 크리스마스 트리가 나타나고, 일정한 간격(REFRESH_RATE)마다 화면이 지워졌다가 새로 그려지면서 잎 문자들이 무작위로 바뀌는 것을 볼 수 있습니다. 결과적으로 트리가 마치 알록달록한 전구 장식처럼 반짝이는 듯한 시각적 효과를 얻게 됩니다.

트리의 높이는 main 함수의 ht 변수 값으로, 깜빡임 속도는 REFRESH_RATE 매크로 값으로, 잎의 무작위성은 RANDOM_NESS 매크로 값으로 각각 조절할 수 있으니 직접 값을 바꿔가며 실험해 보시기 바랍니다.