C++에서 눈이 내리는 (?) CLI 애플리케이션

9449 단어 C++Ccli

소개



휴일이고 C++에서 뭔가 할 수 없을까라고 생각했는데, 「프로그래밍을 학습하기 위해 기술력보다 너무 어려운 일을 한다고 단념한다」라는 말을 보았으므로, 간단하면서도 결과를 시각적으로 볼 수 있는 것 를 모색했다.
그래서 "터미널에서 눈을 내릴 수 있다"는 내용을 생각했다. *를 눈으로 보았다.

코드



실제 눈을 내리는 프로그램은 다음과 같습니다.

snow.cpp
#include <iostream>
#include <vector>
#include <thread>
#include <random>
using namespace std;
#include <color.hpp>

int snowwing(vector<vector<char> >&);
int displaySnow(vector<vector<char> >&);

int main(int argv, char **argc){
  const int R = 100;
  const int C = 50;
  const int sleepTime = 10;
  vector<vector<char> > snow (C, vector<char>(R,  ' '));

  while(1){
    snowwing(snow);
    system("clear");
    displaySnow(snow);
    this_thread::sleep_for(chrono::milliseconds(sleepTime));
  }
  return 0;
}


int snowwing(vector<vector<char> > &snow){
  for(int i=1; i<snow.size(); i++){
      snow[snow.size()-i] = snow[snow.size()-i-1];
  }
  for(int i=0; i<snow.front().size(); i++){
    if(rand()%20 == 0){
      snow[0][i] = '*';
    }else{
      snow[0][i] = ' ';
    }
  }
  return 0;
}


int displaySnow(vector<vector<char> > &snow){
  for(int i=0; i<snow.size(); i++){
    for(int j=0; j<snow.front().size(); j++){
      cout << CYAN << snow[i][j] << RESET;
    }
    cout << endl;
  }
  return 0;
}

color.hpp
#define RESET   "\033[0m"
#define BLACK   "\033[30m"
#define RED     "\033[31m"
#define GREEN   "\033[32m"
#define YELLOW  "\033[33m"
#define BLUE    "\033[34m"
#define MAGENTA "\033[35m"
#define CYAN    "\033[36m"
#define WHITE   "\033[37m"
#define BOLDBLACK   "\033[1m\033[30m"
#define BOLDRED     "\033[1m\033[31m"
#define BOLDGREEN   "\033[1m\033[32m"
#define BOLDYELLOW  "\033[1m\033[33m"
#define BOLDBLUE    "\033[1m\033[34m"
#define BOLDMAGENTA "\033[1m\033[35m"
#define BOLDCYAN    "\033[1m\033[36m"
#define BOLDWHITE   "\033[1m\033[37m"

color.hpp는 cout으로 출력 할 때 색상을 변경하기위한 값을 정의한 파일입니다.

snowwing () 함수는 vector> 형의 배열의 최상단에 일정 확률로 눈을 생성시키면서 눈을 하단으로 슬라이드하는 함수이다.

displaySnow () 함수는 눈 정보가 저장된 vector> 유형의 배열을 터미널에 출력하는 함수입니다.

int 형 변수 R은 눈 배열 옆의 문자 수를 지정하고 int 형 변수 C는 눈 배열의 세로 문자 수를 지정합니다. int 형 변수 sleepTime은 눈이 내리는 속도를 의미합니다.

system ( "clear")에서는 화면이 어긋나지 않기 때문에 매번 터미널 화면을 clear하고 있습니다.

this_thread::sleep_for () 함수는 눈을 내리기위한 지연을 가지고 있습니다.

실행 화면



좋은 웹페이지 즐겨찾기