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
  • Donald 2017/12/19 13:42 # 삭제 답글

    I truly appreciate this article.Really thank you! Fantastic.
  • Paul 2017/12/26 02:27 # 삭제 답글

    Your goal is to breed all the different dragons available
  • Donald 2017/12/27 11:03 # 삭제 답글

    Keep working ,fantastic job!
  • Michael 2018/01/04 21:20 # 삭제 답글

    Excellent post. I was checking continuously this blog and I'm impressed! Very useful info particularly the last part
  • David 2018/01/06 06:48 # 삭제 답글

    location within my public complexes!
  • David 2018/01/16 22:06 # 삭제 답글

    A big thank you for your article.Really thank you! Cool.
  • Mark 2018/01/23 01:03 # 삭제 답글

    If you are going for best contents like myself, simply go to see this site all
  • Charles 2018/02/01 08:15 # 삭제 답글

    Good blog! I really love how it is easy on my eyes and the data are well written. I am wondering how I could be notified whenever a new post has been made. I have subscribed to your feed which must do the trick! Have a nice day!
  • Richard 2018/02/02 08:04 # 삭제 답글

    My own wife and I fell over here by a poles apart trap forward also contemplated I'd personally restraint points unconscious. I like exactly what I envision i really am located absolutely charting you. Look forward to
  • William 2018/02/23 14:22 # 삭제 답글

    Farmville coins are used to make experience points and to purchae things for tthe farm.
  • Joseph 2018/02/27 03:28 # 삭제 답글

    I just couldnt depart your site prior to suggesting that I incredibly enjoyed the standard information an individual supply for your visitors? Is gonna be back often so that you can inspect new posts
  • Mark 2018/03/09 02:04 # 삭제 답글

    mometasone spray over counter
  • Michael 2018/03/13 03:58 # 삭제 답글

    An fascinating dialogue is value comment. I believe that it is best to write more on this matter, it might not be a taboo topic but generally individuals are not sufficient to talk on such topics. To the next. Cheers
  • Joseph 2018/03/28 19:12 # 삭제 답글

    I'm glad that it turned out so effectively and I hope it will continue in the future because it is so worthwhile and meaningful to the community.
  • Daniel 2018/03/31 09:10 # 삭제 답글

    whoah this blog is fantastic i really like studying your articles. Keep up the good paintings! You understand, many individuals are looking around for this info, you could aid them greatly.
  • Paul 2018/04/04 16:56 # 삭제 답글

    Hello, always i used to check blog posts here in the early hours in the daylight,
  • John 2018/04/11 19:03 # 삭제 답글

    Hey esto es un gran poste. Puedo utilizar una porcin en ella en mi sitio? Por supuesto ligara a su sitio as que la gente podra leer el artculo completo si ella quiso a. Agradece cualquier manera.
  • George 2018/04/27 06:42 # 삭제 답글

    Wonderful work! This is the kind of info that are meant to be shared across the internet. Disgrace on the search engines for not positioning this post higher! Come on over and consult with my website . Thank you
  • Paul 2018/05/05 09:04 # 삭제 답글

    coumadin valtrex interaction
  • Paul 2018/06/01 16:19 # 삭제 답글

    What's Happening i'm new to this, I stumbled upon this I have discovered It positively helpful and it has aided me out loads. I hope to contribute &amp help other users like its helped me. Good job.
  • Richard 2018/06/05 12:40 # 삭제 답글

    Article Source a viral game app is not
  • Richard 2018/06/16 04:31 # 삭제 답글

    Wonderful work! This is the kind of info that are meant to be shared across the internet. Disgrace on the search engines for not positioning this post higher! Come on over and consult with my website . Thank you
  • William 2018/06/19 11:47 # 삭제 답글

    Several of these games are worth some time and are actually
  • George 2018/06/21 02:07 # 삭제 답글

    Rattling great visual appeal on this web site, I'd value it 10.
  • William 2018/06/27 20:27 # 삭제 답글

    Very efficiently written post. It will be valuable to anyone who usess it, as well as myself. Keep doing what you are doing i will definitely read more posts.
  • Robert 2018/06/30 19:36 # 삭제 답글

    Hey very nice blog!! Man .. Excellent .. Amazing .. I will bookmark your site and take the feeds alsoI'm satisfied to find a lot of useful info right here within the post, we'd like develop extra strategies in this regard, thanks for sharing.
  • Paul 2018/07/17 22:18 # 삭제 답글

    Wonderful blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I've been trying for a while but I never seem to get there! Thanks
  • Michael 2018/07/24 17:23 # 삭제 답글

    This kind of game gives a real experience of building a farm and planting
  • John 2018/07/28 10:46 # 삭제 답글

    I'm trying to find sites that have already fantastic useful information on what's popular and what is the optimum makeup products is..
  • Mark 2018/08/04 23:45 # 삭제 답글

    Im thankful for the post. Great.
  • Charles 2018/08/10 21:34 # 삭제 답글

    I think you have observed some very interesting details , appreciate it for the post.
  • Mark 2018/08/23 06:23 # 삭제 답글

    Hey are using WordPress for your blog platform? I'm new to the blog world but I'm trying to get started and set up my own. Do you require any coding knowledge to make your own blog? Any help would be really appreciated!
  • Richard 2018/08/29 23:21 # 삭제 답글

    Your goal is to breed all the different dragons available
  • Joseph 2018/09/01 05:04 # 삭제 답글

    Do you agree with my statement that this post is awesome?
  • Daniel 2018/09/06 05:35 # 삭제 답글

    Mudbox is a software for 3D sculpting and painting which
  • Robert 2018/09/14 08:14 # 삭제 답글

    Some genuinely great information, Glad I discovered this. Good teaching is onefourth preparation and threefourths theater. by Gail.
  • William 2018/09/18 08:43 # 삭제 답글

    Keep working ,fantastic job!
  • Charles 2018/09/22 09:50 # 삭제 답글

    Hello There. I found your blog using msn. This is a really well written article. Ill make sure to bookmark it and return to read more of your useful information. Thanks for the post. I will definitely return.
  • John 2018/09/23 22:18 # 삭제 답글

    hi and thanks for the actual blog post ive recently been searching regarding this specific advice online for sum hours these days as a result thanks
  • Michael 2018/09/25 08:12 # 삭제 답글

    I like the valuable info you provide in your articles. I will bookmark your blog and check again here regularly. I am quite certain I'll learn a lot of new stuff right here! Best of luck for the next!
  • Donald 2018/09/26 12:04 # 삭제 답글

    I am sure this post has touched all the internet people, its really really nice post on building up new web site.
댓글 입력 영역


블로그 소개

블로그 소개 (영문)

트위터위젯

통계 위젯 (화이트)

46
54
74479

CCL

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