고급강의실
2013.09.16 06:31

RGSS 스크립트 강좌 입문 6 - 루프(Loop)

조회 수 1586 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
지난시간에는 조건분기를 알아봤습니다만 rpg만들기를 이미 적응하신분들은 이해하기가 좀  수월했을것이라 생각되는데요.
이번에 알아볼것은 일정한 처리를 반복시켜주는 루프 구문입니다. 게임상에서도 루프는 쓸모가 많습니다. 

1. while

특정 식을 반복하고싶을때 while을 사용합니다.

a = 0               # 메서드 a 에 0 을 대입한다.
i = 1               # 메서드 i 에 1 을 대입한다.

while i <= 5        # 메서드 i 에 5 이하까지 대입한다
  a += i            #   변수 a 에  i 의 값을 가산한다.
  i += 1            #   변수 i 의 값을 1 늘린다.
end                 # 루프 종료.

p a                 # 계산 결과를 표시한다.

첫번째와 두번째단에서는 각각 a 와 i 에 숫자를 대입합니다.
3번째단에서 while 가 나오는데요. 이것은 메서드 i가 5까지 값을 대입하도록 조건을 부여해주고 있습니다.

이렇게 실행시키면 3번째단에서 5번째단 까지 5번 반복해서 15라는 답이 나오게 되는데요.
4번째단의 i += 1 이 없으면 i의 값이 계속 5이하이기 때문에 무한루프가 되어 버립니다.

a 와 i 의 매회 값을 표시하면 이렇게 됩니다.

a                i

0               1
3               2
6               3
10             4
15             5

이런식으로 루프한후 a의 값을 출력하게 됩니다. 만약 6번째단아래 p i 를 하면 5가 나오겠지요.


2. 범위연산자

1 에서 5까지 라고 정할때 범위 연산자를 쓸수있습니다. 
루프 구문에서는 단순하게 어디까지 라고 지정할수있다면 범위 오브젝트는 범위 자체를 지정할수있지요.
예를 들면 다음과 같습니다.

1 .. 5
1 ... 5

첫번째것 같은경우에는 1 에서 5까지를 뜻합니다.
두번째것은 1에서 4까지 마지막의 5를 포함하지 않고의 범위를 뜻합니다.


3. 범위 루프

범위 오브젝트를 이용해서 루프시키는것은 for 구문을 사용합니다.

a = 0               # 메서드 a 에 0 을 대입한다.

for i in 1..5       # 메서드 i 를 1 에서 5 까지의 범위를 대입
  a += i            #메서드 a 에 각각의 i 의 값을 가산한다.
end                 # 루프 종료.

p a                 # 계산 결과를 표시한다.

방금전 했던 while 구문과 완전히 같은 값을 요구하는 식입니다만, 차이점이 있다면 while 보다는 알아보기가 쉽다 정도 일까요.
while 에서는 i에 1씩 가산해서 5까지의 범위를 나타내지만, for 는 i 에 1에서 5까지의 수를 차례대로 대입해줍니다. 
그렇게 크게 다르진 않지만 while 에서는 i의 값을 처음에 대입해줘야 했지요. 어느쪽을 쓰던지간에 취향대로 고르면 됩니다.

다른 스크립트도 그렇지만 많은 문법의 조합으로 같은 처리를 하는 시스템을 만드는데 많은 방법이 있습니다. 
자기 논리대로 만들어 나가다 보면 다른사람들과는 다른 방식을 만들어 낼수도 있고요. 
누구는 효율적이고 누구는 그렇지 않고는 사실상 개인 취향이지 탓할게 별로 못됩니다.
단지 우리가 추구해야될것은 최소한 간단하게 식을 세우는 대신에 능력은 최대한으로 끌어내 쓰자는 겁니다.


4. 무한루프

만약 조건없이 무한으로 루프시키고 싶은경우 loop 구문을 씁니다. 방금 사용했던 wgile 이나 for 구문과는 조금 다르지만 간단한 구조니까 그리 신경쓰지않아도 됩니다.

i = 0               # 메서드 i 에 0 을 대입한다.

loop do             # 루프 개시.
  i += 1            # 메서드 i 의 값에 1가산한다.
  p i               # 메서드 i 의 값을 출력한다.

end                 # 루프 종료.

이렇게 실행하면 계속해서 1, 2, 3, 4.... 하면서 i에 1씩 가산하겠지요. 이런식으로 진행되는 무한루프는 종료된다 라는 명령어를 적어놓지 않았기 때문에 프로그램을 종료시킬수가 없이 메세지가 출력되는 문제가 생깁니다. 그럴때는 작업관리자를 불러와 종료해줍시다.
하지만 이런식으로 해결하기보다는 복습도 할겸 전강좌에서 배웠던 if구문을 써봅시다.
루프하다가 일정 조건에 도달했을때 종료해야하기 때문에 루프구문 안에 넣어줍니다. 

i = 0               # 메서드 i 에 0 을 대입한다.

loop do             # 루프 개시.
  i += 1            # 메서드 i 의 값에 1가산한다.
  p i               # 메서드 i 의 값을 출력한다.

if  i >= 5      # i가 5이상일때 분기개시
exit             # 종료
end             # 분기 종료

end                 # 루프 종료.

이렇게 하면 5번 반복한다음 종료됩니다.


5. break

위에는 조건분기를 넣었습니다만 break 는 프로그램의 종료가 아닌 루프를 중단시켜줍니다.

i = 0               # 메서드 i 에 0 을 대입한다.

loop do             # 루프 개시.
  i += 1            #   메서드 i 의 값을 1 늘린다.

  if i == 5         #   만약 변수 i 의 값이 5 라면,
    break           #   루프를 중단한다.
  end               #  분기 종료.

  p i               #   변수 i 의 값을 표시한다.

end                 # 루프 종료.

이런식이면 루프가 끝난후 타이틀 화면이 나오게 됩니다.
또 dreak 는 wheil 이나 for 에서도 쓸수있습니다.


6. next

루프를 유지시키면서 다음처리로 넘기고싶을때는 next를 사용합니다.

for i in 1..5       # 메서드 i 를 1 에서 5 까지의 범위를 대입시킨다.

  if i == 3         #   만약 메서드 i 의 값이 3 이라면,
    next            #     다음의 반복에.
  end               #   조건 분기 종료.
  p i               #   변수 i 의 값을 표시한다.
end                 # 루프 종료.

실행시키면 1, 2, 3, 5 로 출력됩니다.
?
  • ?
    청담 2013.09.20 06:27

    어서 빨리 네코 회원님 수준도 강좌를 통해 높아졌으면하네요

  • ?
    리폼 2014.02.03 02:52
    감사합니다

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 초급강의실 게임제작강좌 A-Z 색인 (2016.1.24 ver) 2 file 천무 2016.01.12 7372 1
32 고급강의실 RGSS 스크립트 강좌 입문 13 - 클래스(Class) 5 마니아 2013.09.16 2317 2
31 고급강의실 RGSS 스크립트 강좌 입문 12 - 연상 배열(Associative Array) 4 마니아 2013.09.16 1600 1
30 고급강의실 RGSS 스크립트 강좌 입문 11 - 배열(Array) 6 마니아 2013.09.16 1701 1
29 고급강의실 RGSS 스크립트 강좌 입문 10 - 그래픽 표시 4 마니아 2013.09.16 2183 0
28 고급강의실 RGSS 스크립트 강좌 입문 9 - 오브젝트(Object) 4 마니아 2013.09.16 1642 0
27 고급강의실 RGSS 스크립트 강좌 입문 7 ~ 8 - 함수(Function) 3 마니아 2013.09.16 1924 0
» 고급강의실 RGSS 스크립트 강좌 입문 6 - 루프(Loop) 2 마니아 2013.09.16 1586 0
25 고급강의실 RGSS 스크립트 강좌 입문 5 - 조건분기 4 마니아 2013.09.16 2131 0
24 고급강의실 RGSS 스크립트 강좌 입문 4 - 캐릭터 라인 4 마니아 2013.09.16 2274 1
23 고급강의실 RGSS 스크립트 강좌 입문 3 - 메서드(Method) 4 마니아 2013.09.16 1876 0
22 고급강의실 RGSS 스크립트 강좌 입문 2 - 수 3 마니아 2013.09.16 2256 0
21 고급강의실 RGSS 스크립트 강좌 입문 1 - 기초 개념 8 마니아 2013.09.16 4348 0
20 고급강의실 뮤's 실전 스크립팅 강좌 [5. 실전! 반복문을 응용하자!] 2 마니아 2013.09.16 1411 0
19 고급강의실 뮤's 실전 스크립팅 강좌 [4. 실전! 플래싱 메시지를 만들어보자] 3 마니아 2013.09.16 2081 0
18 고급강의실 뮤's 실전 스크립팅 강좌 [3. 기초 문법 다지기 (하)] 6 마니아 2013.09.16 1145 0
17 고급강의실 뮤's 실전 스크립팅 강좌 [2. 기초 문법 다지기 (중)] 3 마니아 2013.09.16 1371 0
16 고급강의실 뮤's 실전 스크립팅 강좌 [1. 기초 문법 다지기 (상)] 6 마니아 2013.09.16 2351 0
15 고급강의실 RGSS2 강좌 1 비형랑 2012.10.01 2528 0
14 중급강의실 [RPGVX ACE] 소재규격과 강의수록 1 2 비형랑 2012.10.01 3273 0
13 초급강의실 [RPG VX ACE] 초심자강의 1 1 비형랑 2012.10.01 3168 2
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 Next
/ 10






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)