자유롭게 이야기를 적는 공간
글 수 15,195
<번갈아 가면서 출력, 어찌 하는가?>
혼돈님께서 잘 보셨군요. 반복문(for)갖다가 한 거 맞습니다.
흑곰님께서 말씀하신 타이머라는 것은 아마 VB의 그것인가 본데,
타이머고 뭐고 무지 간단하게 했으니 알려드리죠.
에, 그러니까. 제가 'a'라는 그림과 'b', 'c'라는 그림을
jdd->LoadPicture(); 로 불러왔다고 칩시다.
그럼 이제 a,b,c,를 차례로 출력하고 싶을 때 어떻게 하는지 이제부터 설명해보겠습니다.
while(!_GetKeyState(VK_ESCAPE))
라는 부분이 이해가 안 가셨을 수도 있는데, while문은 for랑 사용법과
특징의 차이만 있을 뿐이지 똑같은 반복문입니다.
지금 저 위의 while문은 _GetKeyState 클래스 함수가 VK_ESCAPE에
해당하는 값을 돌려줬을 때,
그러니까 사용자가 ESC를 누를 때까지 무한 반복한다는 뜻입니다.
즉 이 게임이 돌아가는 근본적인 메커니즘은 같은 명령을 반복 수행
하는 것이죠. 뭐 이건 뭐 그럭저럭 중요한 내용일지도 모르지만 복잡하니 건너 뛰고..
흑곰님께서 while문이 뭔지 모르실 수도 있으니 이렇게 바꿔볼까요.
for(;;) // 무한 반복문
{
if(_GetKeyState(VK_ESCAPE))break; // break는 빠져나간다는 것
}
이제 아시겠죠? 지금 이 for문과 위의 while문은 모양만 틀리고 똑같습니다.
그럼 이렇게 한번 해보죠.
int flag = 0;
for(;;)
{
if(_GetKeyState(VK_ESCAPE))break;
if(flag >= 0 && flag <= 5){jdd->DrawPicture('a');flag++;} // 이건 이렇게 쓰면 에러가 나지만 설명을 간단히 하기 위해 임시로..
if(flag>=5 && flag <= 10){jdd->DrawPicture('b');flag++;}
if(flag>=10 && flag <= 15){jdd->DrawPicture('c');flag+=;}
if(flag>=16){jdd->DrawPicture('c');flag=0;}
}
이제 다 썼으니 설명.
반복문 위에서 flag라는 변수를 초기값을 0으로 잡고 선언했습니다.
int는 VB에서 변수 선언할 때 "~ as integer(스펠링이 맞나)"하고 같습니다.
아무튼 그래서 반복문 안에서 이걸 계속 더 해주면서, 만약
flag의 값이 0 이상, 5 이하일 경우에는 그림 'a'를, 5 이상 10 이하일 땐 'b'를,
10 이상 15이상 일 땐 'c'를 출력하는 겁니다. 그리고 16이상이 되면
다시 0으로 돌려주는 거지요.
이해가 안될 수도 있겠지만 소스를 보시면 이해가 가실겁니다.
혼돈님께서 잘 보셨군요. 반복문(for)갖다가 한 거 맞습니다.
흑곰님께서 말씀하신 타이머라는 것은 아마 VB의 그것인가 본데,
타이머고 뭐고 무지 간단하게 했으니 알려드리죠.
에, 그러니까. 제가 'a'라는 그림과 'b', 'c'라는 그림을
jdd->LoadPicture(); 로 불러왔다고 칩시다.
그럼 이제 a,b,c,를 차례로 출력하고 싶을 때 어떻게 하는지 이제부터 설명해보겠습니다.
while(!_GetKeyState(VK_ESCAPE))
라는 부분이 이해가 안 가셨을 수도 있는데, while문은 for랑 사용법과
특징의 차이만 있을 뿐이지 똑같은 반복문입니다.
지금 저 위의 while문은 _GetKeyState 클래스 함수가 VK_ESCAPE에
해당하는 값을 돌려줬을 때,
그러니까 사용자가 ESC를 누를 때까지 무한 반복한다는 뜻입니다.
즉 이 게임이 돌아가는 근본적인 메커니즘은 같은 명령을 반복 수행
하는 것이죠. 뭐 이건 뭐 그럭저럭 중요한 내용일지도 모르지만 복잡하니 건너 뛰고..
흑곰님께서 while문이 뭔지 모르실 수도 있으니 이렇게 바꿔볼까요.
for(;;) // 무한 반복문
{
if(_GetKeyState(VK_ESCAPE))break; // break는 빠져나간다는 것
}
이제 아시겠죠? 지금 이 for문과 위의 while문은 모양만 틀리고 똑같습니다.
그럼 이렇게 한번 해보죠.
int flag = 0;
for(;;)
{
if(_GetKeyState(VK_ESCAPE))break;
if(flag >= 0 && flag <= 5){jdd->DrawPicture('a');flag++;} // 이건 이렇게 쓰면 에러가 나지만 설명을 간단히 하기 위해 임시로..
if(flag>=5 && flag <= 10){jdd->DrawPicture('b');flag++;}
if(flag>=10 && flag <= 15){jdd->DrawPicture('c');flag+=;}
if(flag>=16){jdd->DrawPicture('c');flag=0;}
}
이제 다 썼으니 설명.
반복문 위에서 flag라는 변수를 초기값을 0으로 잡고 선언했습니다.
int는 VB에서 변수 선언할 때 "~ as integer(스펠링이 맞나)"하고 같습니다.
아무튼 그래서 반복문 안에서 이걸 계속 더 해주면서, 만약
flag의 값이 0 이상, 5 이하일 경우에는 그림 'a'를, 5 이상 10 이하일 땐 'b'를,
10 이상 15이상 일 땐 'c'를 출력하는 겁니다. 그리고 16이상이 되면
다시 0으로 돌려주는 거지요.
이해가 안될 수도 있겠지만 소스를 보시면 이해가 가실겁니다.