인디 게임 강좌

전체보기

모바일 상단 메뉴

본문 페이지

[게임메이커] 처음 만나는 GMS2 // 4. GML - 조건문, 반복문

Zpink
조회: 2693
추천: 1
2017-07-03 18:29:08




1. if - else

2. if - else if - else

3. switch

4. while

5. for

6. repeat

7. do-until

8. break

9. continue




앞서 연산자에 대한 설명에서 저는 조건문 if를 사용하였습니다. 물론 오브젝트는 특정한 사건이 벌어지는 것을 이벤트를 통해 감지할 수 있지만, 구체적으로 어떠한 변수가 어떤 값일 경우에만 코드가 실행되게 하기 위해서는 조건문을 사용해야 합니다.


또한 우리는 반복문을 알아볼 것입니다. 반복문은 일정한 코드를 여러번 작동시키기 위해 사용합니다.





if - else





조건문을 테스트하기 위해 objText라는 이름의 오브젝트를 만들었습니다. Create 이벤트에 변수를 하나 선언할 것입니다.



 money = 5;




실제로 게임에서 사용되는 돈이라고 생각하고 한번 코드를 작성해보도록 하겠습니다.







Draw 이벤트에 이와 같은 코드를 작성해봅니다. 5달러의 사과, 10달러의 포도에 대한 조건문입니다. if-else문이 적용되어 있습니다.


 

if(조건) { 결과1 }

else { 결과2 }




if-else 문의 구조는 이러합니다. if 괄호 안의 조건이 충족한다면 대괄호 안에 들어있는 결과1을 실행합니다. 만약 그렇지 않다면 대괄호 안에 들어있는 결과 2를 실행하게 됩니다. 조건에 충족할 시 실행되는 코드가 1줄이라면 대괄호는 생략하셔도 좋습니다.



 

draw_text(0,0,Apple = 5 Dollar");


if(money >= 5){

draw_text(0,24,"You can buy this item.");

}

else{

draw_text(0,24,"Not enough money.");

}


draw_text(0,48,Grape = 10 Dollar");


if(money >= 10){

draw_text(0,72,"You can buy this item.");

}

else{

draw_text(0,72,"Not enough money.");

}




7~12

만약 money변수의 값이 5보다 크거나 같다면 You can buy this item.을 출력하고, 그렇지 않다면 Not enough money.를 출력합니다.


16~21

만약 money변수의 값이 10보다 크거나 같다면 You can buy this item.을 출력하고, 그렇지 않다면 Not enough money.를 출력합니다.






결과는 이러합니다.




if - else if




마찬가지로 money 변수의 값을 5로 선언하겠습니다.





다음은 10달러의 포도에 대한 조건문입니다.


 

if(조건1) { 결과1 }

else if(조건2) { 결과2 }

else if(조건3) { 결과 3}

.

.

.

else { 결과n }





if-else if-else 문의 구조는 이러합니다. 조건1이 충족한다면 결과1을 실행합니다. 만약 그렇지 않다면 조건 2를 확인하고 이 조건이 충족한다면 결과 2를 실행합니다. 모든 else if의 조건에 만족하지 않는다면 else의 결과를 출력합니다. 


 


draw_text(0,0,Grape = 10 Dollar");


if(money >= 10){

draw_text(0,24,"You can buy this item.");

}

else if(money >=5){

draw_text(0,24,"Not enough money. But you can buy 'Rotten Grape'");

}

else{

draw_text(0,24,"Not enough money.");

}




만약 money가 10 이상이면 포도를 살 수 있습니다.

그러나 10보다 적은 경우 다음 조건을 확인합니다. money가 5 이상이면 썩은 포도를 살 수 있습니다.

그 조건도 만족하지 못한다면 아무것도 살 수 없습니다.







결과는 이러합니다.




 




Switch




역시 마찬가지로 money 변수의 값을 5로 선언하겠습니다.






Draw 이벤트에는 위와 같은 Switch문을 적었습니다.



 

switch(값){

case 상수 : 

default :

}





switch문은 값에 따른 다양한 조건을 검사한 후 그에 충족하는 명령을 실행합니다. 

우선 switch 괄호 안에 담긴 값을 읽어들입니다. 만약 그 값이 적혀진 case 중에 있다면 그것을 실행합니다. 어떠한 case에도 맞지 않는다면 default를 실행합니다. 



switch(money){

case 0:

draw_text(0,24,0 Dollar");

break;

case 1:

draw_text(0,24,1 Dollar");

break;

case 2:

draw_text(0,24,2 Dollar");

break;

case 3:

draw_text(0,24,3 Dollar");

break;

case 4:

draw_text(0,24,4 Dollar");

break;

case 5:

draw_text(0,24,5 Dollar");

break;

}



해당 코드는 money의 값을 case와 대조하여 case에 적절한 값이 있다면 그 결과를 출력합니다. 다른 case의 코드가 함께 실행되는 것을 방지하기 위해 break를 입력해주어야 합니다. 




반복문


while




 

while(조건){결과}




해당 반복문은 '조건'의 내용이 만족되는 동안 '결과'를 지속적으로 실행합니다. 만일 조건의 내용이 결과를 계속 반복해도 이뤄질 수 없는 것이라면 프로그램은 무한루프에 빠지게 될 것입니다. 


 

draw_text(0,0,"I Say Yeah! You Say Ya!");


var i = 1;

while(i<=5){

draw_text(0,24+24*i,"Ya! " + string(i));

i += 1;

}




해당 반복문은 i가 5와 같거나 작은 경우, 괄호 안의 내용을 반복합니다. 

괄호 안에는 Ya! + i를 출력한 후 i를 1씩 증가하도록 설정하였습니다. 





실행 결과는 이러합니다. 




for




 

for(인자1 ;인자2 ; 인자3){결과}




인자1에 들어가는 것은 반복문을 실행하기에 앞서 초기화를 할 명령입니다. 인자2에는 while과 같은 조건이 들어갑니다. 인자3에는 괄호 안의 내용이 끝나면 실행될 명령입니다. 인자2의 조건에 만족하는 경우에 괄호안의 결과가 실행됩니다.


 

draw_text(0,0,"I Say Yeah! You Say Ya!");


for(var i = 1 ; i <= 5 ; i+=1){

draw_text(0,24+24*i,"Ya! " + string(i));

}





해당 코드는 1의 값을 가진 로컬 변수 i를 선언하고, 이 i가 5보다 작거나 같을 때 까지 괄호안의 내용을 실행하는 것입니다. 그리고 그 내용을 실행한 후에는 i의 값을 1 증가시킵니다. 




결과는 이러합니다.




repeat




 

repeat(값){결과}




repeat은 괄호 안에 들어가있는 값만큼 대괄호 안의 결과물을 반복실행합니다. 



 

draw_text(0,0,"Say Yeah!");


var i=1;

repeat(5){

draw_text(0,24+24*i,"Yeah!");

i+=1;

}



해당 반복문이 실행되면  0,24+24*i 의 위치에 Yeah! 라는 문자를 5회 출력합니다.

괄호 안에서 i의 값이 1씩 추가되기 때문에 Yeah는 0,48 위치에서부터 아래로 5개 출력됩니다. 





결과는 이러합니다. 





do-until 




 

do{ 결과

}until (조건);




until의 값을 만족할 때 까지 do의 대괄호 내용을 실행합니다. 앞서 소개해드린 while이 반대로 된 것이라고 생각하시면 편합니다. 


 

draw_text(0,0,"Say Yeah!");


var i=1;

do{

draw_text(0,24+24*i,"Yeah!");

i+=1;

}

until (i>5);




해당 코드는 i가 5를 넘게 될 때까지 Yeah! 라는 문자를 출력하며 i의 값을 1씩 증가시킵니다.





출력결과는 이러합니다.




break




앞서 우리는 switch문에서 break를 이미 사용하였습니다. 이 break는 반복문에서도 사용이 가능합니다. 반복문에서 break가 사용되면 반복문을 중단하고 빠져나가게 됩니다.


 

draw_text(0,0,"Say Yeah!");


var i=1;

repeat(5){

draw_text(0,24+24*i,"Yeah!");

i+=1;

if (i==3) break;

}





해당 코드는 repeat 문을 통해 5번 내용을 실행하는 도중, i가 3이 될 경우 반복문을 빠져나가도록 작성되어있습니다.





실행결과 Yeah! 가 2회만 출력되었습니다.
 



continue




반복문이 실행되는 도중 continue가 작동되면 반복문의 맨 처음으로 다시 돌아가게 됩니다. 


 

draw_text(0,0,"Say Yeah!");


for(var i = 1 ; i <= 5 ; i+=1){

if (i==3) {

continue;

}

draw_text(0,24+24*i,"Yeah!");

}




해당 코드는 반복문이 실행되는 도중 i가 3이 되면 continue가 작동되도록 설정되었습니다.







실행결과. (0, 24+24*3) 좌표에 'Yeah!' 라는 단어가 출력되어있지 않습니다.

Lv1 Zpink

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징