Profile
Experience

2018.12.17

GML 차근차근 배워보기. [ 4 ] 조건문

조회 수 7 추천 수 0
애드블럭을 꺼주시면 서버 운영에 도움이 됩니다.
부탁드립니다.

GML 차근차근 배워보기

 

* 게임메이커 8.0을 기준으로 작성된 강좌입니다.

[ 4 ] 조건문

 

 

1. 조건문이란

 

프로그래밍에서 조건문은 반복문과 함께 가장 많이 쓰이는 문법이라고 볼 수 있다. 조건문은 특정한 조건이 참이면 명령 A를 수행, 거짓이면 명령 B를 수행 이런 식으로 전체적인 프로그램의 흐름을 제어할 수 있는 가장 기본적인 수단이다.

 

 간단하게 슈팅 게임을 예로 들어보자. 몬스터가 내가 쏜 총알을 맞으면 죽도록 만들고 싶다. 이럴 때 필요한 것이 바로 조건문이다. '몬스터가 내가 쏜 총알을 맞았다' 라는 조건이 참일 때 몬스터가 죽는다 라는 명령을 내리도록 프로그램을 짜야하기 때문이다.

 

2. if문

 

if문은 가장 흔히 쓰이고 일반적인 형태의 조건문이다. 쓰는 방식도 아주 간단하고 편리하다.

 

if( <조건> )

{

     <명령1>;

     <명령2>;

       ....

}

 

 

이렇게 작성하면 괄호 안 조건이 참(true)일 경우 아래 중괄호안의 명령이 실행되고 거짓일 경우 실행되지 않는다. 여기에 추가로 else 구문이 있다. if 문과 else문은 함께 사용하며, 함께 사용할 경우 조건식이 참일 때는 if문 아래 중괄호 안 명령이 실행되며 그렇지 않을 때에는 else문 아래 중괄호 안 명령이 실행된다. 정확한 양식은 아래와 같다.

 

if( <조건> )

{

     <명령1>;

     <명령2>;

       ....

}

else

{

     <명령1>;

     <명령2>;

       ....

}

 

 

예를 들어 살펴보자.

 

<생성코드>

 

a=get_integer("",0);

 

<제거코드>

 

if( a mod 2 == 0 )

{

     show_message("a는 짝수입니다.");

}

else

{

     show_message("a는 홀수입니다.");
}

 

 연산자 파트까지 착실하게 공부했다면 무슨 의미인지 쉽게 이해가 갈 것이다. 조건을 변수 'a'를 2로 나눈 나머지가 0인 경우 참, 아닌 경우 거짓으로 설정했으며 따라서 if문이 성립하면 변수 a는 짝수, 아니면 홀수라는 사실을 쉽게 알 수 있다. if문은 기본적으로 이런 형식으로 활용하며 if 문 아래 중괄호 안에 다시 if문을 집어 넣을 수도 있다.

 

 참고로 아마 게임메이커 툴에서 코드를 작성할 때 한글을 집어넣으면 글자가 깨져서 나올 것이다. 툴이 지역화가 잘 안돼있어서 그런데, show_message 함수의 경우 적어넣으면 깨져서 보이긴 해도 실행하면 제대로 글자로 나오기는 한다. 깨져요!! 하지말고 그냥 실행하자. 

 

 if ~ else ~  구문을 활용한 예로 else if 구문이 있다. 형식은 아래와 같다.

 

if( <조건A> )

{

     <명령1>;

       ....

}

else if ( <조건B> )

{

     <명령2>;

       ....

}

else

{

     <명령3>;

       ....

}

 

한글로 쉽게 말하자면, '<조건A>가 참이면 <명령1>을 실행하고, <조건 A>가 거짓이면서 <조건 B>가 참이면 <명령2>를 실행하고, <조건 B> 까지 거짓이라면 <명령 3>을 실행하라' 라는 구문이 된다. 물론 else if ~ else if ~ else if ~ 하는 식으로 조건은 끝없이 덧붙일 수 있다.

 

 혹시 이해가 잘 가지 않을 수 있으니 이 것도 한 번 예를 들어 살펴 보자.

 

<생성코드>

 

a=get_integer("제비 뽑기입니다. 아무 숫자나 입력해 보세요.",0);

 

<제거코드>

 

if( a == 1)

{

     show_message("초대박 당첨! GML 차근차근 배워보기 평생 무료 구독권을 드리겠습니다.");

}

else if( a>= 2 && a<=5 )

{

     show_message("대박입니다! 근데 드릴 건 없습니다.");
}

else if( a>= 6 && a<=9 )

{

     show_message("중박입니다. 중박인데 뭘 바라진 않겠죠?");
}

else

{

     show_message("꽝입니다! 운도 지지리도 없으시네요.");
}

 

 이 코드대로 넣고 실행해보면 if구문과 조건문에 대해 어느 정도 이해가 갈 것이다. 변수 값으로 1을 입력하면 초대박, 2~5를 입력하면 대박, 6 ~ 9를 입력하면 중박, 그 외의 경우는 꽝 멘트가 뜬다.

 

 

3. switch문
 
 
switch문은 여러 개의 비슷비슷한 조건을 연달아 사용해야할 때 쓰기 좋다. 예를 들어 몬스터의 HP가 1일 때, 2일 때, 3일 때, 4일 때, 5일 때 서로 다른 행동을 취하게 하고 싶다. 그런데 이걸 if문으로 표현하려면 if를 5번이나 사용해야한다. 이렇게 되면 코드 길이도 길어지고 가독성도 나빠진다. 이럴 때는 switch 구문을 사용하면 된다. switch 구문의 기본 양식은 아래와 같다.
 
 
switch( <변수> )
{
case <값1>:
      <명령1>;
      <명령2>;
        ....
       break;
case <값2>:
      <명령3>;
      <명령4>;
        ....
       break;
case <값3>:
      <명령5>;
      <명령6>;
        ....
       break;
default:
      <명령7>;
      <명령8>;
        ....
       break;
}
 
switch구문은 switch 옆 괄호 안의 <변수> 값이 각 case 옆에 쓰여진 값과 같을 때 그 아래의 명령을 수행한다. 위의 양식에서 따지자면 <변수>가 <값1> 일 경우 <명령1>,<명령2>... 를 순서대로 실행하고, <값3>일 경우 <명령5>,<명령6>...을 순서대로 실행하는 식이다. 만약 <변수>의 값이 어떤 case 값과도 일치하지 않는다면 default 아래의 값을 실행한다. default처리가 없는 경우는 default를 생략해도 된다. 이 경우 알맞는 변수 값이 없다면 아무런 처리도 하지 않고 지나간다.
 
 역시 예를 들어 알아보자.
 

<생성코드>

 

a=get_integer("아무 값이나 입력.",0);

 

<제거코드>

 

switch(a)

{

case 1:

      show_message("가위");

      break;

case 2:

      show_message("바위");

      break;

case 3:

      show_message("보");

      break;

default:

      show_message("나머지는 용납하지 않는다.");

      break;
}

 

코드를 찬찬히 살펴본 뒤 실행해보자. 가능하다면 case를 몇 개 늘려보고 default를 없애도 보고 하는 식으로 변형해보자. 대충 어떤 식으로 동작하는 지 감이 잡힐 것이다.
 
추가로, 각 case 밑의 break; 구문은 없어도 된다. 이게 무슨 말이냐면, case 밑에 break 구문이 없다면 그 아래 case 구문을 연달아 실행한다. C/C++ 언어가 이와 같은 특성을 갖고 있는데, 유연하다는 장점이 있지만 반대로 버그가 생기기 쉽다는 단점도 있다. 역시 예를 들어 알아보자. 이번 예제는 위의  if문 마지막 예제를 switch 구문으로 바꿔본 것이다.

 

<생성코드>

 

a=get_integer("제비 뽑기입니다. 아무 숫자나 입력해 보세요.",0);

 

<제거코드>

 

if( a == 1)

switch(a) 

{

case 1:

     show_message("초대박 당첨! GML 차근차근 배워보기 평생 무료 구독권을 드리겠습니다.");

     break;

case 2:

case 3:

case 4:

case 5:

     show_message("대박입니다! 근데 드릴 건 없습니다.");

     break;

case 6:

case 7:

case 8:

case 9:

     show_message("중박입니다. 중박인데 뭘 바라진 않겠죠?"); 

     break;

default:

     show_message("꽝입니다! 운도 지지리도 없으시네요.");

     break;
}

 
 코드가 전체적으로 길어지지만 어떻게 보면 상당히 간결해서 이해하기가 쉽다. 보면 break문을 쓰지 않을 경우 다음 case의 내용을 연달아 실행한다는 것을 활용하여 작성되었다는 것을 알 수 있다.
 
 사실 이 코드는 엄밀히 따지자면 if문 파트에 있는 코드와 동일한 코드는 아니다. 정수가 입력으로 주어질 때에는 동일하게 동작하지만, 4.6 이나 5.5같이 실수로 되어있는 변수를 입력할 경우에는 동일하게 동작하지 않는다. switch구문은 주어진 값 하나가 case 하나이기 때문에 일어나는 현상인데, 이러한 특징을 잘 숙지하고 활용해야 switch구문을 적재적소에 사용할 수 있게 되니 마음 속에 잘 새겨놓도록 하자.
 
 switch문 역시 잘 활용하면 코드를 간결하고 가독성있게, 그리고 확장성 있게 만들 수 있기 때문에 잘 익혀두는 것이 좋다. 사실 제어문 파트의 경우 두고두고 써먹는 문법의 핵심 파트이기 때문에 확실하게 익히고 넘어가야한다.
 
 여담이지만 처음 프로그래밍 문법을 공부할 때는 왠만하면 다 따라서 실행해보는 것이 좋다. 눈으로 보는 것과 실제 손가락으로 적어보는 것이 꽤 차이가 크기 때문이다. 눈으로만 봤을 때는 나중에 직접 프로그래밍할 때 잘 기억이 안나지만 손가락으로 한 번 쳐보면 쉽게쉽게 기억이 난다.


Profile
2
Lv

0개의 댓글

번호 제목 글쓴이 날짜 조회 수
공지 게임메이커 구체적인 설명과 알면 매우 좋은 팁 30개 [장문] 7 profile 도개걸윷모 2018.11.03 186
64 [팁] <댓글 스티커>, <쿠키 마켓>의 쿠키 반환 비율 (수수료, 이익 비율) 2 profile 며르치 2019.01.21 33
63 [팁] 쿠키 얻기/쓰기 조건 정리 4 profile 며르치 2019.01.17 60
62 [쿠키 API] ini처럼 온라인 데이터 저장/불러오기 구현하기 3 profile 주인장수표 2018.12.26 65
61 [쿠키 API] 구글, 네이버, 카카오톡 로그인 구현하기 profile 주인장수표 2018.12.26 52
60 인벤토리 만들기 - 1 profile Experience 2018.12.18 36
59 간단한 도트 찍는 방법! profile Experience 2018.12.17 23
58 [자료] 스팀 게임 플레이어의 통상적 컴퓨터 사양 1 profile 주인장수표 2018.12.17 21
57 [변수의 활용] VAR (if) 액션과 컨트롤액션 profile Experience 2018.12.17 6
56 윈도우를 컨트롤하자! profile Experience 2018.12.17 16
GML 차근차근 배워보기. [ 4 ] 조건문 profile Experience 2018.12.17 7
54 GML 차근차근 배워보기. [ 3 ] 연산자 (2) profile Experience 2018.12.17 5
53 GML 차근차근 배워보기. [ 3 ] 연산자 (1) profile Experience 2018.12.17 10
52 GML 차근차근 배워보기. [ 2 ] 변수 (2) profile Experience 2018.12.17 8
51 GML 차근차근 배워보기. [ 2 ] 변수 (1) profile Experience 2018.12.17 11
50 GML 차근차근 배워보기. [ 1 ] 강좌 진행 환경 조성 2 profile Experience 2018.12.17 8
49 리얼리티 '뷰' 노이즈 강좌 profile Experience 2018.11.29 14
48 [윈도우] 게임을 실행할 때 다른 윈도우를 모두 최소화시키기 profile Experience 2018.11.29 13
47 간단한 8방향 이동 코드 profile Experience 2018.11.29 9
46 겜스 간단한 페이드인/페이드아웃 profile Experience 2018.11.29 11
45 게임메이커 8 강좌 5화 -룸- END profile Experience 2018.11.29 13
서버에 요청 중입니다. 잠시만 기다려 주십시오...