Programming/C++

C++ 콘솔 프로그램에서 ’*’의 이동 효과 구현하기

moxie2ks 2025. 3. 31. 18:01
728x90
반응형

개요

C++ 언어를 사용하여 콘솔 화면에서 별표(’*’)를 위에서 아래로 이동시키는 프로그램을 작성한다. 이 프로그램은 일정 시간 간격으로 화면을 지우고, 별의 위치를 한 칸씩 아래로 이동하는 방식으로 동작한다. 이를 통해 시간 제어 및 콘솔 입출력 기능의 기본적인 활용 방법을 학습할 수 있다.

원리

본 프로그램의 핵심 동작은 다음과 같이 구성된다.

  1. 화면 출력 및 지우기: 화면에 출력된 기존 문자를 지우기 위해 윈도우 환경에서는 system("cls")를, 리눅스/유닉스 환경에서는 ANSI escape 코드를 사용한다.
  2. 시간 제어: 별이 일정 시간(1초) 간격으로 한 줄씩 아래로 이동하도록 std::this_thread::sleep_for 함수를 활용한다.
  3. 반복을 통한 위치 이동: 반복문(for)을 사용하여 별이 위에서 아래로 이동하며 출력되도록 설계한다. 이때 별의 위치는 줄 바꿈 개수를 조정함으로써 변경된다.

코드 구현

#include <iostream>  
#include <thread> // sleep_for 사용을 위해 필요  
#include <chrono> // 시간 지연을 위한 라이브러리  

#ifdef _WIN32  
#include <windows.h> // Windows용 화면 지우기  
#else  
#include <unistd.h>  
#endif  

void clearScreen() {  
#ifdef _WIN32  
    system("cls"); // Windows에서 콘솔 화면 지우기  
#else  
    std::cout << "\033[2J\033[H"; // Unix/Linux용 화면 지우기  
#endif  
}  

int main() {  
    const int height = 10; // 출력 화면 높이 설정  

    for (int i = 0; i < height; ++i) {  
        clearScreen(); // 기존 화면 지우기  

        // 별의 현재 위치에 따라 줄 바꿈 수행  
        for (int j = 0; j < i; ++j) {  
            std::cout << std::endl;  
        }  
        std::cout << "*" << std::endl;  

        // 1초 대기  
        std::this_thread::sleep_for(std::chrono::seconds(1));  
    }  

    return 0;  
}  

결과

프로그램이 실행되면 콘솔 화면에서 다음과 같은 형태의 출력이 나타난다.

  1. 처음에는 별이 맨 위에 위치한다.
*  
  1. 이후 1초마다 한 줄씩 아래로 이동한다.
 *

  *
  1. 반복문이 종료될 때까지 이 과정이 계속된다.

참고문헌

• ISO/IEC 14882:2020: C++ 언어 표준

• cppreference.com: std::this_thread::sleep_for 및 콘솔 출력 관련 참고자료

• ANSI escape 코드: https://en.wikipedia.org/wiki/ANSI_escape_code

728x90
반응형