본문 바로가기

렌파이/게임 제작하기

렌파이로 육성 시뮬레이션 게임 만들기 (2) 스크린 언어로 스케쥴 화면 만들기

필요한 게 뭘까

구조는 잡았으니 이제 다음으로 필요한 게 뭔지 생각해봅시다. 렌파이의 기본 UI를 (귀찮으므로) 그냥 사용하기로 했다 치면, 그 외에 필요한 건 아래와 같습니다.

- 스탯을 표시하는 화면
- 플레이어가 스케쥴을 정할 수있게 해주는 화면
- 플레이어가 정한 스케쥴을 확인할 수 있게 해주는 화면

스탯창

일단 스탯창은 쉽게 만들 수 있습니다. 스크린 언어를 이용해서 만들어보도록 합시다.



text 가 문자열만을 받아서 화면에 표시하기 때문에, str(변수)로 변수에 저장된 정수값을 문자열로 바꾸는 역할을 해 주는 겁니다('0' 과 0 은 전혀 다른 종류의 값으로, 각각 문자열과 정수값입니다).

종전에 ui 문에서 그랬던 것처럼
text ('%s' %mental)
이라고 적어도 됩니다만 저는 % 기호를 적는 게 귀찮아서; str 함수를 이용했습니다.

스케쥴 설정 화면

그 다음은 스케쥴 설정 화면입니다. 제가 만드려는 방식은



이런 식입니다. 렌파이 튜토리얼 게임에서 ui 항목에 나와있는 예제랑 비슷한 방식입니다. 그림을 이해하기 힘드신 분들은 튜토리얼 게임에서 작동을 확인해보세요.

튜토리얼 게임에 나온 스케쥴러는, 스크립트를 확인해보시면 아시겠지만 ui 문과 파이톰이 자작한 함수 몇가지로 만들어졌습니다. 저는 스크린 언어로 한번 작성해보도록 하겠습니다.

우선 오전, 자유, 오후 시간에 어떤 스케쥴이 정해졌는지 이에 관한 정보를 담은 변수를 하나씩 만들어줍시다. 초기값은 무조건 휴식이 되도록 줬습니다.

morning = free = afternoon = '휴식'

그럼 이제 위의 그림에서 1 이라고 표시한 UI 먼저 만들어봅시다. 감이 안 오더라도 그냥 막히는 데까지만 적으면 됩니다.



이제 이 화면에 있는 텍스트 버튼을 눌렀을 때, 그 시기에 실행할 스케쥴을 정하는 스케쥴 선택지를 표시하도록 해야 합니다(그림에서 2라고 표시한 부분). 이것도 막히는 데까지 적어봅시다.



이제 그림에서 1이라고 표시한.. 그러니까 planner 스크린 문으로 다시 돌아가서, 각 텍스트버튼을 클릭했을 때 schedule 스크린이 표시되도록 만들어줍니다.



한층 자연스러워졌군요.. 는 구라고. 이쯤에서는 의문점을 가지셔야 합니다.

"세 개의 버튼이 모두 schedule 이라는 똑같은 스크린을 표시하는데, 어떻게 스케쥴 정보를 morning, free, afternoon 변수에 따로따로 저장을 할 수 있지?"

라고요.

다시 schedule 스크린의 스크립트를 살펴봅시다. '휴식', '연습' ... 등의 텍스트버튼이 제 구실을 하도록 action 속성을 입력해줘야할 필요성이 느껴집니다. Return(value) 액션은 그냥 텍스트버튼을 클릭하면 _return 이라는 변수에 value 를 저장하기 때문에 이 경우에는 그닥 적절해보이지는 않습니다. 우리가 지정한 변수에 특정한 값을 설정하도록 하는 액션으로는 SetVariable 이 더 적당합니다.

SetVariable(variable, value)
    value 를 variable 에 설정한다.

여기서 주의할 점은 variable 자리에 변수 이름이 적힌 문자열이 와야 한다는 겁니다. 이 값을 어떻게 줘야 할지 의문입니다. 어떤 변수에 "morning" 이나 "free" 같은 문자열이 planner의 텍스트 버튼들을 누를 때마다 바뀌어서 저장된다면 가능할 것같긴 합니다. 임의로 period 라는 변수와 함께 SetVariable 을 각 텍스트버튼에 적어줍시다.



흠. 그렇다면, planner 스크린에서 오전/자유/오후 텍스트버튼을 클릭할 때마다 각 시기에 해당하는 변수를, schedule 스크린으로 넘겨줘서, SetVariable 액션에 적을 variable 이 각 상황에 따라 바뀌도록 할 수 있다면 되겠군요. 알기 쉽게 그림으로 설명하자면 이런 느낌입니다.


쨌든 쉽게 설명하자면, schedule 이라는 스크린에서 사용할 변수를 planner에서 지정해주어야 한다는 이야기입니다.

다행이도 이건 스크린 문에서 간단히 해결할 수 있습니다(그렇지 않다면 제가 이와 관련한 글을 쓰지도 않았을 겁니다^*^)

아까 planner 스크린에 텍스트버튼마다 Show('schedule')이라고 적었죠. 그 옆에 약간만 뭔가를 추가해주면 됩니다.



이렇게 하면 planner 에서 버튼을 누를 때마다 period 변수의 값이 따로 지정되어서 schedule 스크린을 불러오고, schedule 의 SetVariable 에 적힌 period 에는 해당 문자열값이 대체되기 때문에, 제대로 작동이 되는 겁니다.

자 이제 완성.. 이면 좋겠지만 문제가 남아있습니다. schedule 스크린을 불러와서 텍스트 버튼을 클릭해줬는데, schedule 스크린이 사라지질 않아서 약간 거치적거립니다. SetVariable 액션이 실행되고 나면 schedule 스크린이 사라지도록 해야겠습니다.



예전에도 적었지만, 스크린 언어의 action 속성에는 액션의 리스트를 입력할 수도 있습니다. 이 때는 적힌 순서대로 해당 액션이 실행됩니다.


(위치나 모양은 좀 엉성하지만) 이제 나름의 스케쥴 설정 화면이 완성되었을 겁니다(완성된 스크립트는 각자 알맞게 만들어 보세요). 스탯창과 함께 이 화면을 게임에서 띄우면 되겠군요. 지난번에 적었던 기초 스크립트에 schedule_set 라벨이 있었는데, 그 라벨 안에 적절히 호출하면 되겠습니다.



스탯창은 그냥 화면상에 표시해야하는 거니 show screen 으로, 스케쥴 화면은 인터렉션이 필요하므로 call screen 으로 띄웁시다. show screen의 경우는 나중에 hide screen 으로 해당 스크린을 숨길 수 있습니다.