ansi_demo.c

Download
c 124 lines 3.4 KB
  1// ansi_demo.c
  2// ANSI Escape Codes μ‹œμ—° ν”„λ‘œκ·Έλž¨
  3// ν„°λ―Έλ„μ—μ„œ μ»€μ„œ 이동과 색상을 μ œμ–΄ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.
  4
  5#include <stdio.h>
  6#include <unistd.h>
  7
  8// ANSI Escape Codes μ •μ˜
  9#define CLEAR_SCREEN "\033[2J"
 10#define CURSOR_HOME "\033[H"
 11#define HIDE_CURSOR "\033[?25l"
 12#define SHOW_CURSOR "\033[?25h"
 13
 14// μ»€μ„œ 이동: \033[row;colH
 15#define MOVE_CURSOR(row, col) printf("\033[%d;%dH", row, col)
 16
 17// 색상 μ½”λ“œ
 18#define COLOR_RESET "\033[0m"
 19#define COLOR_RED "\033[31m"
 20#define COLOR_GREEN "\033[32m"
 21#define COLOR_YELLOW "\033[33m"
 22#define COLOR_BLUE "\033[34m"
 23#define COLOR_MAGENTA "\033[35m"
 24#define COLOR_CYAN "\033[36m"
 25
 26// 배경색 μ½”λ“œ
 27#define BG_RED "\033[41m"
 28#define BG_GREEN "\033[42m"
 29#define BG_YELLOW "\033[43m"
 30#define BG_BLUE "\033[44m"
 31
 32// ν…μŠ€νŠΈ μŠ€νƒ€μΌ
 33#define BOLD "\033[1m"
 34#define UNDERLINE "\033[4m"
 35
 36int main(void) {
 37    // ν™”λ©΄ μ§€μš°κΈ°
 38    printf(CLEAR_SCREEN);
 39    printf(CURSOR_HOME);
 40
 41    // μ»€μ„œ 숨기기
 42    printf(HIDE_CURSOR);
 43
 44    // 제λͺ© ν‘œμ‹œ
 45    MOVE_CURSOR(2, 10);
 46    printf(BOLD COLOR_CYAN "=== ANSI Escape Codes μ‹œμ—° ===" COLOR_RESET);
 47
 48    // μ—¬λŸ¬ μœ„μΉ˜μ— 색상 ν…μŠ€νŠΈ 좜λ ₯
 49    MOVE_CURSOR(5, 10);
 50    printf(COLOR_RED "빨간색 ν…μŠ€νŠΈ" COLOR_RESET);
 51
 52    MOVE_CURSOR(7, 10);
 53    printf(COLOR_GREEN "μ΄ˆλ‘μƒ‰ ν…μŠ€νŠΈ" COLOR_RESET);
 54
 55    MOVE_CURSOR(9, 10);
 56    printf(COLOR_BLUE "νŒŒλž€μƒ‰ ν…μŠ€νŠΈ" COLOR_RESET);
 57
 58    MOVE_CURSOR(11, 10);
 59    printf(BOLD COLOR_YELLOW "ꡡ은 λ…Έλž€μƒ‰ ν…μŠ€νŠΈ" COLOR_RESET);
 60
 61    MOVE_CURSOR(13, 10);
 62    printf(UNDERLINE COLOR_MAGENTA "밑쀄 λ§ˆμ  νƒ€ ν…μŠ€νŠΈ" COLOR_RESET);
 63
 64    // 배경색 예제
 65    MOVE_CURSOR(15, 10);
 66    printf(BG_RED "    배경색 λΉ¨κ°•    " COLOR_RESET);
 67
 68    MOVE_CURSOR(16, 10);
 69    printf(BG_GREEN "    배경색 초둝    " COLOR_RESET);
 70
 71    // λ°•μŠ€ 그리기 (UTF-8 λ°•μŠ€ 문자 μ‚¬μš©)
 72    MOVE_CURSOR(19, 5);
 73    printf(COLOR_CYAN "β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”" COLOR_RESET);
 74    for (int i = 20; i < 25; i++) {
 75        MOVE_CURSOR(i, 5);
 76        printf(COLOR_CYAN "β”‚                    β”‚" COLOR_RESET);
 77    }
 78    MOVE_CURSOR(25, 5);
 79    printf(COLOR_CYAN "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜" COLOR_RESET);
 80
 81    MOVE_CURSOR(22, 10);
 82    printf(COLOR_YELLOW "λ°•μŠ€ μ•ˆμ˜ ν…μŠ€νŠΈ" COLOR_RESET);
 83
 84    // κ·Έλ¦¬λ“œ νŒ¨ν„΄ 그리기
 85    MOVE_CURSOR(19, 40);
 86    printf(BOLD "κ·Έλ¦¬λ“œ νŒ¨ν„΄:" COLOR_RESET);
 87    for (int row = 0; row < 5; row++) {
 88        for (int col = 0; col < 10; col++) {
 89            MOVE_CURSOR(20 + row, 40 + col * 2);
 90            if ((row + col) % 2 == 0) {
 91                printf(COLOR_GREEN "β– " COLOR_RESET);
 92            } else {
 93                printf(COLOR_RED "β–‘" COLOR_RESET);
 94            }
 95        }
 96    }
 97
 98    // μ• λ‹ˆλ©”μ΄μ…˜ 효과 (μ§„ν–‰ λ°”)
 99    MOVE_CURSOR(27, 5);
100    printf("λ‘œλ”© 쀑: [");
101    for (int i = 0; i < 20; i++) {
102        printf(COLOR_GREEN "β–ˆ" COLOR_RESET);
103        fflush(stdout);
104        usleep(100000); // 100ms λŒ€κΈ°
105    }
106    printf("]");
107
108    // μ•ˆλ‚΄ λ©”μ‹œμ§€
109    MOVE_CURSOR(29, 5);
110    printf(COLOR_YELLOW "3초 ν›„ μžλ™μœΌλ‘œ μ’…λ£Œλ©λ‹ˆλ‹€..." COLOR_RESET);
111
112    fflush(stdout);
113    sleep(3);
114
115    // ν™”λ©΄ μ§€μš°κΈ° 및 μ»€μ„œ 보이기
116    printf(CLEAR_SCREEN);
117    printf(SHOW_CURSOR);
118    MOVE_CURSOR(1, 1);
119
120    printf("ANSI Escape Codes μ‹œμ—°μ„ λ§ˆμΉ©λ‹ˆλ‹€.\n");
121
122    return 0;
123}