본문 바로가기

DEVELOPMENT/C/C++

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

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

 

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

 

 

  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #include <conio.h>
  4.  
  5.  
  6. void gotoxy(int x,int y)
  7. {  
  8.     COORD pos={x,y};
  9.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  10. }
  11.  
  12. void main()
  13. {
  14.     int i;
  15.  
  16.     for(i = 0; i <= 80; i++)
  17.     {
  18.         gotoxy(i, 10);
  19.         putch('>');
  20.         gotoxy(i-1,10);
  21.         putch(' ');
  22.         Sleep(100);
  23.    
  24.     }
  25. }

 

프로그램을 시작하자 마자 제어 변수 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/