Renpy with Python 3. 간단한 게임 만들기

qjfrntop·2019년 11월 18일
0

Renpy with Python

목록 보기
3/3

들어가며

저번에는 코드에 대한 설명조차 없이 일단 코드를 수정하는 법까지 알아보았습니다.

오늘은 처음부터 하나하나 코드를 작성하며 각 코드의 뜻을 알아보겠습니다.

간단한 대사

저번에 열었던 script.rpy 파일을 다시 열어 안의 내용을 모두 지워주세요.

label start:
    '안녕하세요.'

    '렌파이 튜토리얼이에요!'

그리고 위 코드를 써주세요.

두 대사 앞의 빈 공백은 스페이스 바가 아닌 Tab 키를 이용해 넣어주세요.

그리고 게임을 실행해보면 나레이션으로 두 대사가 출력되는 것을 확인할 수 있습니다.

label start:
	'안녕하세요.'
    
    '시프트' '시프트입니다.''

이번엔 이렇게 두 문자열을 써주세요.

그럼 나레이션이 아닌 '시프트'라는 이름을 가진 사람의 대사가 출력되는 것을 확인할 수 있습니다.

하지만 이런 방식은 불편합니다. 매 대사마다 캐릭터들의 이름을 하나하나 입력해줘야 하기 때문이죠. 만약 '김수한무거북이와두루미삼천갑자동방삭...'이라는 이름의 캐릭터라도 등장했다가는 얼마 못가서 게임 제작을 그만두게 될지도 모를거에요.

이런 불편함을 줄이기 위해서 캐릭터를 만들 수 있습니다.

캐릭터 만들기

define s = Character('시프트')

label start:
    '안녕하세요.'

    '렌파이 튜토리얼이에요!'

    s '안녕하세요. 시프트입니다.'

맨 위에 define s = Character('시프트')는 시프트라는 이름을 가진 캐릭터를 s 라는 변수에 담아두겠다는 뜻입니다. 이로서 마지막 줄의 s는 미리 만든 시프트라는 캐릭터가 됩니다.

define s = Character('시프트', color='#2f992f')

이번엔 캐릭터를 만드는 부분을 위와 같이 변경해주세요.

이렇게 써 두면, 캐릭터의 이름이 초록색으로 표시될 것입니다.

이미지 보여주기

이번에는 비주얼 노벨답게 여러 이미지를 추가해보겠습니다.

image bg first = 'images/background.jpg'

image yui before = 'images/yui_after.png'
image yui after = 'images/yui_normal.png'

define y = Character('유이', color='#2f992f')

label start:
    scene bg first

    '안녕하세요.'

    show yui before

    y '안녕하세요. 유이입니다.'

    show yui after

    y '일러스트가 변경되었습니다'

중간중간 바뀐 부분이 많습니다. 하나하나 설명해드릴게요.

우선 맨 위에 image로 시작하는 3줄이 추가되어있습니다. 이는 이미지를 미리 정의해두는 것입니다.

그리고 해당 이미지들은 각각 bgfirst처럼 두가지 이름을 가지고 있습니다.

이미지 이름에서 첫 번째 부분은 이미지 태그라고 합니다.

yui before가 나오려고 할 때, bg firstyui before다른 태그를 가지고 있기 떄문에 배경 위에 그대로 표시됩니다.

하지만 yui after가 나오려고 할 때 yui beforeyui after같은 태그를 가지고 있기 떄문에 yui before는 사라지고 yui after바뀌게 됩니다. 물론 bg first는 관계없이 그대로 표시됩니다.

그 뒤에 'images/background.jpg'와 같이 파일의 경로를 입력해주면 됩니다. 저는 위와 같이 이미지를 미리 넣어두었습니다.

이렇게 미리 정의해 둔 이미지들은 sceneshow로 보여줄 수 있습니다.

위 코드에 써있는 대로 scene 혹은 show 뒤에 이미지 이름을 적으면 됩니다.

show는 일반적인 이미지를 보여주는 기능입니다. 같은 태그를 가진 이미지가 아닌 이상 다른 이미지를 지우지 않습니다.

scene은 화면을 전환하는 기능입니다. 이미지를 보여주기 전 화면을 비워줍니다.

show yui before

y '안녕하세요. 유이입니다.'

hide yui

y '일러스트를 없앴습니다.'

이미지를 없앨 때는 위와 같이 hide를 사용합니다.

(hide에서 태그만을 입력하는 이유는 간단합니다. 한 태그에 대해 이미지는 화면 위에 딱 하나만 존재하기 떄문이에요.)

파이썬 사용하기

하지만 지금까지 배운 문법들은 모두 렌파이 자체 문법입니다.
이런 알 수 없는 코드(?)를 사용했다가는 파이썬 과제에서 0점을 맞게 될 것입니다.

이제부터 지금까지 배운 여러 문법들을 파이썬 문법으로 변경해보겠습니다.

파이썬을 사용할 준비

일반적으로 렌파이는 자체 문법을 사용하기 때문에 그냥 파이썬 문법을 사용하게 되면 오류가 발생하게 됩니다. 그래서 렌파이를 사용할 준비를 해줘야 합니다.

label start:
	python:
    	renpy.say(None, '나레이션입니다.')

label start 블록 안에 python이라는 블록이 하나 더 생겼습니다.

그리고 renpy.say라는 함수가 실행되고 있습니다.

python 블럭을 사용하면 해당 블럭 안은 렌파이 문법이 아닌 파이썬 문법을 사용하게 됩니다.

간단한 대사

python:
	renpy.say(None, '안녕하세요.')

    renpy.say('시프트', '저는 시프트입니다!')

renpy.say는 대사를 출력하는 함수입니다. 첫번째 인자로는 대사를 출력하는 캐릭터의 이름을 문자열로 받거나, 곧 설명할 캐릭터를 그대로 받습니다.

만약 None이 들어온다면 나레이션을 출력하게 됩니다.

캐릭터 만들기

init python:
    shift = Character('시프트', color='#2f992f')

label start:
	python:
        renpy.say(None, '나레이션입니다.')
        renpy.say(shift, '시프트입니다.')

start 라벨 위에 init python이라는 블럭이 생겼습니다.

이는 start 라벨이 시작되기 전 실행되는 초기화 코드를 작성하는 곳입니다.

shift라는 변수에 위에서 했던 대로 Character를 이용해 캐릭터를 만들어 대입해줬습니다.

해당 변수를 이용하여 캐릭터를 사용할 수 있습니다.

이미지 나타내기

init python:
    yui = Character('유이', color='#2f992f')
    
    renpy.image('bg normal', 'images/background.jpg')

    renpy.image('yui before', 'images/yui_normal.jpg')
    renpy.image('yui after', 'images/yui_after.jpg')

renpy.image함수를 이용하여 이미지를 정의할 수 있습니다.

첫 번째 인자로 이미지의 이름을, 두 번째 인자로 이미지의 경로를 넣으면 됩니다.

이 때, 이미지의 이름은 위에서 했던 대로 이미지 이름을 두 단어로 해야 합니다.

label start:
	python:
      renpy.scene()
      renpy.show('bg normal')

      renpy.say(None, '안녕하세요.')

      renpy.show('yui before')

      renpy.say(yui, '안녕하세요 유이입니다.')

      renpy.show('yui after')

      renpy.say(yui, '일러스트가 변경되었습니다.')

scene이나 show 문 등은 위와 같이 renpy.scene 함수나 renpy.show 함수를 이용해 표현합니다.

다만 다른 점이 하나 있습니다. renpy.scene 함수는 아무런 인자도 받지 않고 그 밑에 renpy.show 함수를 다시 사용합니다.

렌파이 문법에서의 scene 문은 모든 이미지를 지우고 해당 이미지를 표시하는 역할을 합니다.

하지만 파이썬에서의 renpy.scene 함수는 모든 이미지를 지우는 역할만 합니다. 즉 새로운 scene에서의 이미지는 뒤에 renpy.show 함수를 이용하여 다시 표시해줘야 합니다.

즉, 렌파이에서의 scene 문은 파이썬의 renpy.scene + renpy.show 함수와 같은 역할을 합니다.

하지만 파이썬을 기반으로 하기 때문에 직접 함수를 만들어 다음과 같이 사용할 수도 있습니다.

init python:
    def scene(img):
        renpy.scene()
        renpy.show(img)

lable start
    python:
        scene('bg normal')

마지막 줄의 scene 함수가 renpy.scene이 아닌 위에서 직접 만든 함수임에 주의하며 읽으면 됩니다.

마무리

이렇게 기본적인 렌파이 사용법에 대해 알아보고, 이를 파이썬 코드로 변경해보았습니다.

다음번 강좌부터는 다양한 기능들을 이용하여 본격적으로 게임을 만들어나가 보겠습니다.

감사합니다.

profile
👋

0개의 댓글