01 Hello Ruby  └ RGSS 스크립트 강좌

01 Hello Ruby
 
안녕하세요. RGSS 스크립트 강좌를 다시 연재하는 리니입니다.
 
RPG 만들기 XP부터 추가된 스크립트 기능은 기존 스크립트를 수정하는 것부터 해서 새로운 스크립트를 만드는 것까지
기존의 한계를 간단히 넘어설 수 있는 강력한 기능입니다.
하지만 쉽게 접근하기 힘들어 많은 사람들이 다른 사람들의 손을 빌리는 것이 사실입니다.
이제부터 RGSS 강좌를 통해 직접 스크립트를 사용해서 게임을 만들수 있는 능력을 길러봅시다.
 
1부는 루비 언어를 학습하는 데에 주안점을 두고, (1강-8강 예상)
2부는 RGSS 라이브러리를 사용해 실제로 게임 제작에 사용하는 것을 다룰 것입니다. (9강 이후)
 
이 강좌에서는 이미 RPG 만들기XP 툴을 사용할 줄 안다는 전제 하에 쓰여졌습니다.
만일 RPG 만들기 XP 자체를 처음 접한다면 RPG 만들기 XP를 먼저 익힌 뒤에 강좌를 보는 것을 추천드립니다.
 
모든 예제는 직접 따라하는 것을 권합니다. 차근차근 읽어야 코드 해석이 쉽기 때문입니다.
또한 예제대로만 하는 것으로 그치지 말고 코드를 직접 바꿔가면서 실행해보시길 바랍니다.


** RGSS
RGSS는 Ruby Game Scripting System의 줄임말로 RPG 만들기 XP에서 쓰이는 루비 스크립팅 시스템입니다.
VX는 RGSS2, VX Ace에서는 RGSS3로 XP와는 조금 다른 체계를 가지고 있습니다.
 
루비는 일본의 마츠모토 유키히로가 개발한 동적 객체 지향 스크립트 프로그래밍 언어입니다.
파이썬(Python), 펄(Perl), 루아(Lua) 등과 같이 스크립트 언어로 사용되고 주로 일본에서 많이 사용하는 언어입니다.
XP에서 사용하는 루비는 1.8.1버전입니다. 앞으로 설명하는 루비 언어는 모두 이 1.8버전을 기준으로 합니다.

※ 이 강의에서 사용하는 루비 버전은 1.8.6입니다. 일부 코드는 RPG XP에서 오류가 날 수 있습니다.
 
간단한 소개는 여기서 마치고 바로 스크립트를 만져보도록 하겠습니다.
 
 
** Hello World
RPG 만들기 XP를 켜고 새로운 프로젝트를 생성합니다.
F11 또는 툴>스크립트 편집기를 선택해서 스크립트 편집기를 엽니다.
좌측 목록 가장 위 항목(Game_Temp)를 선택하고 Insert 또는 우클릭>추가를 선택하여 항목을 추가합니다.
항목의 이름을 자유롭게 정합니다. (저는 Main이라고 정했습니다.)
오른쪽에 스크립트를 작성합니다. 
print "Hello World!"
exit
확인을 누르고 실행시켜봅니다.
메시지 박스에 Hello World! 라고 출력됩니다. 확인을 누르면 게임이 종료됩니다.
 
 
** Hello World 분석
축하합니다! 첫 스크립트를 성공적으로 작동시켰습니다!
지금 작성한 스크립트는 단 두 줄뿐입니다.
print "Hello World!"
exit
우선 아래에 쓴 exit는 프로그램을 종료시키는 메서드입니다.
메서드가 무엇인지는 나중에 다룰 것입니다. 지금은 일종의 명령어라고 생각해도 됩니다.
 
print는 문자열을 출력하는 메서드입니다. 뒤에 따라 나오는 값을 출력합니다.
"Hello World!"가 문자열입니다. 문자열은 (거의) 언제나 따옴표로 둘러싸여있습니다.
 
 
** 숫자 다루기
다른 것들도 출력해봅시다.
print 1024
exit
1024는 숫자입니다. 간단한 사칙연산을 해봅시다.
print 1024+1000   # 2024
print 1024-1000 # 24
print 1024*1000 # 1024000
print 1024/1000 # 1
exit

갑자기 # 기호가 나타나서 당황했을지도 모릅니다.
# 기호는 주석을 적는다는 의미입니다.
주석이란 코드를 설명하기 위해서 적는 일종의 메모입니다.
코드를 실행하는 데에는 전혀 영향을 주지 않습니다.
무엇을 적던 상관 없지만 일반적으로는 이 코드가 무슨 역할을 하는지, 어떻게 사용하는지, 누가 코드를 작성했는지, 무엇을 작성해야 하는 지 등을 적습니다.
지금 강좌처럼 코드를 설명하는 글에서는 출력값이 무엇인지 적기도 합니다.
위 코드에서는 각 줄의 출력값을 적고 있습니다.
 
+는 덧셈, -는 뺄셈, *는 곱셈, /는 나눗셈을 합니다.
주석으로도 적어놓았고 직접 실행해봐도 알겠지만 정상적으로 사칙연산을 하는 것을 볼 수 있습니다.
...라고 하기에는 나눗셈이 조금 이상합니다.
1024 나누기 1000는 분명 1.024입니다. 하지만 결과는 소수점을 뺀 1만 나오고 있습니다.
결론만 말하면 컴퓨터는 소수점을 무시하고 계산합니다.

대신 이렇게 바꾸면 정상적으로 1.024가 나옵니다. 이유는 나중에 설명 드리겠습니다.
print 1024.0 / 1000        # 1.024
print 1024 / 1000.0 # 1.024
print 1024.0 / 1000.0 # 1.024
1024는 숫자지만 따옴표를 써서 "1024"로 적으면 문자열이 됩니다.
print 1024         # 1024
print "1024" # 1024
print로 출력하면 둘 다 같은 결과를 보입니다. 그래서 둘을 같은 것으로 착각할 수도 있습니다.
하지만 본질적으로 둘은 다릅니다. 곱하기를 해봅시다.
print 1024 * 2     # 2048
print "1024" * 2 # 10241024
print "1024 * 2" # 1024 * 2
숫자는 제대로 곱하기가 됩니다. 문자열은 곱하기하면 그대로 반복해버립니다.
따옴표 안에 곱셈기호와 숫자까지 전부 넣어버리면 모조리 문자열이 되어버립니다.

print 대신 p로 출력해도 차이를 볼 수 있습니다.
p 1024     # 1024
p "1024" # "1024"
p는 print와 같이 뒤의 내용을 출력합니다. 하지만 좀 더 보기 좋게 가공해서 출력해줍니다.
print는 단순하게 출력해줍니다. 이에 대한 자세한 설명은 나중으로 미루겠습니다.
앞으로는 print보다 p를 좀 더 많이 사용할 것입니다. (프로그래머가) 보기 좋게 가공해주니까요.
(하지만 실제 게임에서 출력을 하게 된다면 p보단 print를 쓰는 쪽이 더 나을 것입니다. 굳이 가공해 줄 필요가 없으니까요.)
 
 
** 변수
프로그래밍을 하다보면 값을 저장할 일이 많이 일어납니다. 이 값을 저장하는 곳이 바로 변수(Variable)입니다.
a = 1024
b = 1000
p a+b # 2024
p a-b # 24
p a*b # 1024000
p a/b # 1
여기서 변수 a에는 1024를, 변수 b에는 1000을 넣었습니다.
 
= 기호는 변수에 값을 넣는 데 (할당하는 데) 사용하는 기호입니다.
무조건 왼쪽에 변수, 오른쪽에 값이 옵니다.
즉 1024 = a 같은 코드는 오류입니다.
 
다른 것도 넣을 수 있습니다.
hello = "Hello"
world = " World!"
p hello+world # "Hello World!"
hello 변수에 "Hello" 문자열을 넣고 world 변수에 " World!" 문자열을 넣었습니다.
두 문자열을 +연산으로 붙였습니다. 두 문자열이 붙은 "Hello World!"가 출력됩니다.
 
대입 연산에 대한 다른 예제를 봅시다.
a = 3
b = 4
c = a+b # => 7
c = c+3 # => 10
주석에서 사용한 =>은 반환값을 의미합니다. 예컨대 위에서 a+b의 반환값은 7입니다.
앞으로 p나 print를 생략하고 주석에 반환값만 적는 경우가 많아질 것입니다.
반환값을 직접 보려면 앞에 p를 써서 p c = a+b처럼 적으면 됩니다.
 
저는 처음 루비를 배울 때 c = c+3 과 같은 구문을 이해할 수 없었습니다.
하지만 복잡하게 생각할 것 없습니다. 오른쪽부터 보세요.
먼저 c+3을 계산합니다. 7+3은 10입니다.
그리고 그 결과를 c에 대입합니다. 즉 c에 10이 들어갑니다.
끝입니다. 결과적으로 c는 7에서 10으로 3 증가합니다.
이것을 조금 더 줄여 쓰면 이렇게 됩니다.
c += 3
이렇게 쓰면 c에 3을 더한다는 의미가 됩니다.
결국 c = c+3과 c+=3은 같은 의미가 됩니다.
다른 기호도 비슷한 방법으로 사용 가능합니다.
a = 5
a -= 7 # => -2
a *= 5 # => -10

변수 이름을 지을 때 주의할 점은 시작할 때 영어 대문자나 숫자를 쓰면 안 된다는 것과 중간에 공백이 들어가면 안 된다는 것 정도입니다.
첫 글자가 대문자가 되면 변수가 아닌 상수(Constant)가 됩니다.
a = 10   # 변수
A = 10 # 상수
a += 10 # 변수는 변경 가능하다.
A += 10 # 상수는 원칙적으로 변경 불가능하다.
상수는 원칙적으로 변경 불가능하지만 실제로 실행해보면 정상적으로 변경되는 것을 볼 수 있습니다.
하지만 사실은 A를 변경하는 부분에서 루비는 경고를 보냅니다. 우리가 경고를 볼 수 없을 뿐입니다.
실제로 irb등을 사용하면 경고 메시지를 볼 수 있습니다.
 
 
** 식 전개
마지막으로 식 전개라는 기법을 알려드리고 마치겠습니다.
num = 12
sqr = num*num
p "#{num} square is #{sqr}." # "12 square is 144."
문자열 안에 #{변수명} 형태로 적게 되면 변수의 값을 문자열 안에 끼워 넣을 수 있습니다.
즉 #{num}은 12로 치환되고 #{sqr}은 144로 치환되는 것입니다.
 
 
**
이번 강의는 루비를 가볍게 만져보는 것을 해보았습니다.
아직 코드를 읽는 게 서툴게 느껴지더라도 괜찮습니다.
하나씩 따라가다보면 코드를 읽고있는 자신을 발견하게 될 것입니다.
 
드디어 루비에 첫 발을 내딛었습니다.
아직 배워야 할 것은 많지만 이번 첫 발로 그 배워야 하는 것에 대한 두려움이 훨씬 줄어들었을 것이라고 생각합니다.
 
다음 강의는 변수와 연산자에 대해 다룹니다.

 
+
이글루스에서 script 태그를 막아둬서 syntax highlighting을 간편하게 할 수가 없네요.
이번 강의는 근성으로 노가다 하긴 했는데 다음 강의부턴 잘 모르겠습니다.

덧글

  • Npc 2014/02/16 22:36 # 삭제 답글

    오늘부터 강좌 보고있는데 정말 알기쉽네요 .. ! 계속계속올려주셨으면해요 ㅇㅅ
  • 사자탈을쓴쥐 2015/10/24 14:31 # 삭제 답글

    오오~~ 스크립트 이제 처음 배우려고 하는데 정말 알기쉽게 잘 설명해주시네요~~ 잘 배우고 가요 ㅎㅎ
  • John 2017/07/16 14:00 # 삭제 답글

    Aw, this was a very nice post. In thought I want to put in writing like this moreover taking time and actual effort to make an excellent article but what can I say I procrastinate alot and not at all seem to get something done.
  • Richard 2017/08/08 10:14 # 삭제 답글

    This is really interesting, You're a very skilled blogger. I have joined your feed and look forward to seeking more of your magnificent post. Also, I have shared your web site in my social networks!
  • Paul 2017/08/09 21:48 # 삭제 답글

    Dead written subject material, Really enjoyed studying.
  • Thomas 2017/08/22 21:16 # 삭제 답글

    Only wanna tell that this is very useful , Thanks for taking your time to write this.
  • William 2017/08/26 14:57 # 삭제 답글

    Im grateful for the blog article.Much thanks again. Cool.
  • Michael 2017/08/28 01:43 # 삭제 답글

    I will immediately grab your rss feed as I can not find your email subscription link or enewsletter service. Do you have any? Kindly let me know so that I could subscribe. Thanks.
  • Robert 2017/09/01 01:25 # 삭제 답글

    I all the time used to read paragraph in news papers but now as I am a user of web thus from now I am using net for posts, thanks to web.
  • James 2017/09/05 05:17 # 삭제 답글

    Hello. excellent job. I did not expect this. This is a great story. Thanks!
  • Richard 2017/09/20 15:32 # 삭제 답글

    This is really interesting, You're a very skilled blogger. I have joined your feed and look forward to seeking more of your magnificent post. Also, I have shared your web site in my social networks!
  • Mark 2017/10/02 05:37 # 삭제 답글

    Because here is a list of multiplayer games is
  • Richard 2017/10/12 19:12 # 삭제 답글

    I really enjoy reading on this website, it holds great articles. Don't put too fine a point to your wit for fear it should get blunted. by Miguel de Cervantes.
  • Paul 2017/10/21 11:52 # 삭제 답글

    Hello! This post could not be written any better! Reading through this post reminds me of my good
  • James 2017/10/28 05:26 # 삭제 답글

    Wonderful site. Plenty of useful info here. I'm sending it to a few pals ans additionally sharing in delicious. And naturally, thank you to your sweat!
  • John 2017/11/03 18:55 # 삭제 답글

    Keep working ,impressive job!
  • George 2017/11/16 18:49 # 삭제 답글

    nasa, , harold hill
  • James 2017/11/24 14:10 # 삭제 답글

    Wow! This could be one particular of the most useful blogs We've ever arrive across on this subject. Basically Wonderful. I'm also a specialist in this topic so I can understand your hard work.
  • David 2017/11/29 07:20 # 삭제 답글

    You must indulge in a contest for among the greatest blogs over the internet. Ill suggest this web website!
  • Robert 2017/12/02 01:10 # 삭제 답글

    Hi! Someone in my Myspace group shared this website with us so I came to look it over. I'm definitely loving the information. I'm bookmarking and will be tweeting this to my followers! Great blog and terrific design and style.
  • Richard 2017/12/02 23:30 # 삭제 답글

    Regards for helping out, superb information.
  • Daniel 2017/12/05 04:44 # 삭제 답글

    Im not that much of a online reader to be honest but your blogs really nice, keep it up! I'll go ahead and bookmark your site to come back later. All the best
  • Mark 2017/12/08 09:52 # 삭제 답글

    Hello. excellent job. I did not expect this. This is a great story. Thanks!
  • Robert 2017/12/09 22:31 # 삭제 답글

    Hey very cool blog!! Guy.. Beautiful.. Wonderful.. I will bookmark your website and take the feeds additionallyKI am satisfied to search out numerous useful information right here in the publish, we want develop more techniques on this regard, thank you for sharing
  • Joseph 2017/12/12 02:16 # 삭제 답글

    Immigration ...the time to read or check out the content or sites we have linked to below the...
  • Thomas 2017/12/14 08:57 # 삭제 답글

    I needed to thank you for this good read!! I certainly enjoyed every little bit of it. I've got you bookmarked to check out new stuff you post
댓글 입력 영역


블로그 소개

블로그 소개 (영문)

트위터위젯

통계 위젯 (화이트)

319
124
71099

CCL

크리에이티브 커먼즈 라이선스