SPRING :: NOTE

[C/C++] for문을 이용하여 혼자 이동하는 문자만들기 본문

Development Language/C · C++ · MFC

[C/C++] for문을 이용하여 혼자 이동하는 문자만들기

RAYZIE 2016. 6. 9. 17:51
반응형

gotoxy를 이용하여 해당 단어를 배치하고 이동과 동시에 전 블럭에 있던 단어를 공백으로 바꿔준다,

 

결과는 >문자가 오른쪽으로 이동하는걸 확인할 수 있다.



#include 
#include 
#include 
 
 
void gotoxy(int x,int y)
{  
    COORD pos={x,y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
 
void main()
{
    int i;
 
    for(i = 0; i <= 80; i++)
    {
        gotoxy(i, 10);
        putch('>');
        gotoxy(i-1,10);
        putch(' ');
        Sleep(100);
   
    }
}

프로그램을 시작하자 마자 제어 변수 i를 1부터 시작해서 80까지 1씩 증가시키면서 >과 공백을 번갈아가며 출력한다.

 

실행해 보면 >문자가 최초 화면 왼쪽에 나타났다가 오른쪽 끝으로 한칸씩 이동할 것이다.


문자 하나만 움직이지만 이것도 일종의 애니메이션이라고 할 수 있다.

 

어떻게 해서 >이 움직이는지 분석해 보자.

 

루프를 돌 때 제어 변수가 어떻게 변하고 루프 내에서 제어 변수를 어떻게 사용하는지 차근 차근히 분석해 보자.

 

 

① 정수형 변수 i를 선언하고 clrscr 함수를 호출하여 화면을 깔끔하게 지웠다.

화면에 아무 것도 출력되어 있지 않아야 >문자가 움직이는 것을 제대로 살펴볼 수 있을 것이다.

여기까지는 프로그램이 실행을 준비하는 단계이다.

 

② for 루프가 시작되면 초기식에 의해 제어 변수 i는 1이 된다.

조건식은 i가 80보다 작거나 같다이고 증감식은 i를 1씩 증가하도록 되어 있으므로 i는 1부터 2,3,4,....80까지 변할 것이다.

루프안에는 >문자를 출력하는 명령, 공백을 출력하는 명령, 그리고 0.1초간 시간을 끄는 명령이 포함되어 있다.

 

③ 최초 루프가 시작될 때 i는 1의 값을 가지고 있다. 그래서 (1,10)의 위치에 >이 출력되고 (0,10)의 위치에 공백이 출력된다.

이때 화면에는 (1,10)에 >문자 하나만 출력되어 있을 것이다. 0.1초간 대기한 후 증감식에 의해 i는 2가 되고 다음 루프가 실행된다.

 

④ i가 2가 되었을 때는 (2,10)에 >이 출력되고 그 바로 왼쪽인 (1,10)에 공백이 출력된다.

공백이 출력되는 좌표는 제어 변수 i의 바로 왼쪽 위치인 (i-1,10)인데 이 좌표는 바로 직전의 루프에서 >을 출력한 좌표이다.

이 좌표에 공백을 출력한다는 것은 바로 앞에서 출력했던 >을 삭제하라는 명령이다.

두 번째 루프에 의해 (1,10)의 >은 지워지고 (2,10)에 >이 새로 출력되었으므로 마치 >이 한칸 오른쪽으로 이동한 것처럼 보인다.

 

⑤ i가 3이 되면 (3,10)에 새로운 >이 출력되고 바로 직전 루프에서 출력해 놓은 (2,10)의 >은 공백으로 덮여져 삭제된다.

이런 식으로 루프가 진행되면 1씩 증가하는 i위치에 >이 새로 출력되므로 마치 >이 오른쪽으로 이동하는 것처럼 보이게 된다.

 

출처 : http://www.soen.kr/

반응형
Comments