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

C++로 만드는 매트릭스 효과: 화면에 떨어지는 문자 구현하기


영화 <매트릭스>를 비롯한 여러 영화에서 초록색 문자가 빗줄기처럼 화면을 타고 떨어지는 장면을 본 적이 있을 것입니다. 이번 글에서는 C++ 콘솔 프로그램으로 그와 같은 효과를 직접 구현하는 방법을 소개합니다.

이 문제를 해결하려면 다음 세 가지 요소를 고려해야 합니다.

  • 화면 너비 정의: 문자가 흐르는 매트릭스 창의 가로 폭을 먼저 정합니다.
  • 불규칙한 문자 배치: 인접한 두 문자 사이의 간격이 항상 동일하지 않도록 하여 자연스러운 느낌을 연출합니다.
  • 출력 지연 추가: 한 줄을 출력할 때마다 일정 시간의 딜레이를 두어 문자가 실제로 떨어지는 듯한 시각적 효과를 만듭니다.

예제 코드

#include <iostream>
#include <string>
#include <thread>
#include <cstdlib>
#include <ctime>
#include <chrono>

const int wd = 70;          // 매트릭스 창의 너비 설정
const int flipsPerLine = 5; // boolean 배열 'alternate'를 뒤집는 횟수
const int sleepTime = 50;   // 두 줄 출력 사이의 지연 시간 (밀리초)

using namespace std;

int main() {
    int i = 0, x = 0;
    srand(time(NULL));        // 실행 시점에 난수 초기화
    bool alternate[wd] = {0}; // 해당 반복에서 문자를 출력할지 결정하는 배열

    // 출력할 문자 집합
    const string ch =
        "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+{}|?><`~";
    const int l = ch.size();

    while (true) {
        for (i = 0; i < wd; i += 2) {
            if (alternate[i]) // alternate 값이 1이면 문자 출력
                cout << ch[rand() % l] << " ";
            else              // 아니면 공백 출력
                cout << " ";
        }
        for (i = 0; i != flipsPerLine; ++i) {
            // boolean 값을 무작위로 뒤집음
            x = rand() % wd;
            alternate[x] = !alternate[x];
        }
        cout << endl;
        // 더 좋은 시각 효과를 위해 잠시 대기
        this_thread::sleep_for(chrono::milliseconds(sleepTime));
    }
}

코드 설명

이 프로그램의 핵심은 크게 세 부분으로 나눌 수 있습니다.

1. 난수 기반 문자 선택

숫자, 알파벳 대소문자, 특수문자로 구성된 문자열 ch에서 rand() % l을 사용해 무작위로 문자 하나를 골라 출력합니다. 덕분에 매번 다른 문자 조합이 만들어집니다.

2. alternate 배열로 출력 위치 제어

alternate 배열은 각 열에 문자를 출력할지 공백을 출력할지 결정합니다. 매 반복마다 무작위 위치의 값 5개(flipsPerLine)를 뒤집기 때문에, 문자가 출력되는 열이 계속 바뀌며 불규칙하고 역동적인 패턴이 형성됩니다.

3. sleep_for로 떨어지는 효과 연출

this_thread::sleep_for() 함수를 이용해 한 줄을 출력한 뒤 50밀리초 동안 실행을 멈춥니다. 이 지연 시간을 조절하면 문자가 떨어지는 속도를 자유롭게 변경할 수 있습니다. 값이 작을수록 빠르게, 클수록 느리게 흐릅니다.

참고: 이 프로그램은 무한 루프(while(true))로 동작하므로 실행을 중단하려면 Ctrl + C를 누르면 됩니다.

실행 결과

C++로 만드는 매트릭스 효과: 화면에 떨어지는 문자 구현하기

코드를 컴파일하여 실행하면 위 이미지처럼 무작위 문자들이 화면을 따라 끊임없이 흘러내리는 매트릭스 효과를 확인할 수 있습니다. 너비(wd), 뒤집는 횟수(flipsPerLine), 지연 시간(sleepTime) 상수를 조정해 나만의 스타일로 응용해 보세요.