LCS
조회 수 3729 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

레벨 방식의 RPG가 아니라, 미니게임이나 횡스크롤 등에서 점수를 화면에 실시간으로 표시할 수 있습니다.

RPG XP에서도 가능합니다. 아마 RPG2000 에서도 가능할겁니다.

 

Chapter 1 : 선제조건 가정, 준비물

점수를 나타내는 변수를 [0001] 로 하겠습니다.

 

일단 준비하실 것이 있습니다.

0부터 9까지 그림 파일을 만들어야 합니다. 제가 쓰던 것을 첨부해 드렸습니다.

Pictures.zip 파일로 첨부해 드렸습니다. 물론 직접 만드셔도 됩니다.

 

첨부된 Pictures.zip 에서 0s.png, 1s.png, 2s.png, ..., 9s.png 이렇게 총 10개 파일만 빼서 쓰시면 됩니다.

 

 

 

변수들을 설계해 봅시다.

우선 점수를 최종적으로 나타낼 변수는 [0001]입니다.

이 변수는, 점수가 몇 점 이상일 때 이 이벤트를 실행 이런 것을 할 때 쓰입니다.

 

숫자 출력의 핵심은 바로 자리수입니다.

자리수별로 전부 변수를 설정해 주셔야 합니다.

 

제 경우 6자리까지 표시하면 좋으니, 아래와 같이 했습니다. 6자리 이상의 자리수는 의미가 없으므로 특별 취급해서 숫자로 표시하지 않고 그림으로 표시했습니다. 그렇게 100억 자리까지 의미를 부여했습니다. 100억 자리 이상은 달라지는 것이 없게 해놨습니다. 제가 만드는 게임에서는 점수로 이걸 쓴 게 아니라 돈으로 이걸 썼습니다. 돈을 실시간으로 화면에 표시되도록 한거지요.

 

[0001:자금]

[0004:자금 1의 자리]

[0005:자금 10의 자리]

[0006:자금 100의 자리]

[0007:자금 K의 자리]

[0008:자금 10K의 자리]

[0009:자금 100K의 자리]

[0010:자금 M의 자리] --> 출력하고자 하는 자리수보다 1자리 높은 자리수입니다.

...

 

K는 1000을 나타냅니다. 킬로미터는 미터의 1000배이지요? 그것처럼요.

예를 들면, 100K는 100000 입니다. 이런 식으로요. M은 1000000 입니다. 메가바이트 할때를 생각하세요. 2MB는 몇 바이트?

 

그런데, 이걸로 끝나는 게 아니라, 변수가 더 필요합니다.

제 경우

 

[0003:자금 총합 출력대기]

[0011:자금 출력대기 10]

[0012:자금 출력대기 100]

[0013:자금 출력대기 K]

[0014:자금 출력대기 10K]

[0015:자금 출력대기 100K]

[0016:자금 출력대기 M]

...

 

이렇게 변수가 더 필요합니다.

출력대기 시리즈들은, [0001:자금]을 계산하기 위해 필요한 것들입니다.

 

 

저런 식으로

M 다음자리에 다음자리에...

10M, 100M, G 까지 변수와 출력대기 변수를 각각 부여했습니다. 10M 이후 자리는 나중에 추가했는지라 변수 번호가 [0118] 이렇습니다.

(G는 10억입니다. 1000000000 입니다. 기가바이트 생각하시면 되요.)

 


Chapter 2 : 커먼 이벤트 넣기.

 

이제 기나긴 여정을 시작해 봅시다.

게임공유 자료실에 Q 라고 있습니다. 버전 0.3 소스공개용으로 받아서 그걸 RPG VX로 불러와 테스트 실행해보세요.

게임 실행하고, 처음에 특별 코드 물어볼 때 12345678 을 입력하시면 테스트를 할 수 있을겁니다.


아래 보고 까무러치지 마시고, 그냥 한번 쓱 읽어 보세요.

흐름이 읽혀지실 겁니다. 그리 어려운 건 아닙니다. 단지 노가다일 뿐이지.

저야 6자리까지 표시하는데다 그 이상의 자리수까지 상징 이미지로 표시하니까 길어진 거고,

표시하고자 하는 자리수가 줄어들면 이보다 훨씬 짧아집니다.

 

그거랑 아래를 비교해보세요. (RPG VX로 불러와서 커먼 이벤트 보시면 주석빼고 그대로 있을겁니다.)

아래의 주석을 참고하세요. 아래처럼 커먼 이벤트를 넣는 겁니다. 병렬 처리, 시작조건은 스위치 "출력 시작"이 켜져 있을 때.

all.jpg

이건 커먼 이벤트로 들어가야 하고, 병렬 처리되어야 합니다.

위의 주석에서 "출력시작 스위치" 라 함은, 커먼 이벤트 시작 조건 스위치로 넣은 스위치를 말합니다.

스위치 조건 안넣어도 됩니다.

 

이제 깨달으셨으리라 믿습니다.

"스크립트 없는 RPG VX" = "쌩노가다 연습 툴" 임을..

 

자금은 세분화할 필요가 있어서 저렇게 했구요 (타이쿤 방식이니 돈이 중요하죠..)

저거외에 시간제한도 저렇게 표시했는데 그건 저거보다는 간단합니다. 단위 넘어갈 때 이미지로 대신 표시하는 부분이 없고 자리수도 100자리가 최대니까요. 대신 타이머로 쓰는만큼 추가적인 이벤트가 들어가죠. 이건 Q 불러오면 커먼 이벤트 2번째에 있습니다.


일단 구현 자체는 이걸로 끝났습니다.

근데, 저 수치에 얼만큼을 더하거나 빼려면 어떻게 해야 할까요?



Chapter 3 : 덧셈과 뺄셈

변수 0001을 건드려서는 안 됩니다.

제 게임의 경우 돈을 저렇게 표시한 거니 돈을 예로 들자면


돈을 100원 추가하고 싶습니다.

이 때, [0001:자금]에 100을 더하면 절대로 안됩니다.

이걸 하려면 3가지 방법이 있습니다.


[0006:자금 100의 자리]를 1 더하는 방법이 있고,

또는 [0005:자금 10의 자리]를 10 더하는 방법이 있습니다.

그것도 아니면 [0004:자금 1의 자리]를 100 더하는 방법이 있습니다.


이 3가지 중 하나만 택해서 넣으면 됩니다.

뺄 때도 마찬가지입니다.


그럼, 다른 변수 만큼을 더하거나 뺄 때는 어떻게 해야 할까요?

[0004:자금 1의 자리]에 더하거나 빼면 됩니다.

단, 그 "다른 변수"의 값이 너무 크면 렉이 걸릴 수 있습니다. 이 때는

그 "다른 변수"가 10의 배수가 되도록 만드는 것이 중요합니다.

만약 100의 배수가 되도록 만들었다면 100으로 나누고 [0006:자금 100의 자리]에 더하거나 빼게 만들면 되는 겁니다.



Chapter 4 : 곱셈

문제는 곱셈인데, 저 상태로는 곱셈을 제대로 구현할 수 없습니다.

이 때는 2가지 방법이 있습니다.



1번째 방법.


스위치를 하나 넣어야 하는데, 넣은 커먼 이벤트 위쪽 부분에 승계 관련 이벤트가 있습니다.

1의 자리가 10 이상이면 10의 자리에 1 더하고 1의 자리에서 10 빼고.. 이런거 있죠?

왜 초등학교 때나 유치원 때 손가락으로 덧셈하다가 4+7은 뭐? 하면서 10의 자리를 배우죠?

이렇게, 다음 자리 수로 올라가는 것을 승계라 합니다.


그 작업을 어떤 스위치가 꺼졌을때만 수행하도록 만들어야 합니다. 켜졌을때만 으로도 만들 수 있지만 쬐끔 더 귀찮아질 겁니다.

당연히 조건 분기로 해야지요.


그런 다음, 곱셈을 수행하는데요, 그 전에 위에서 조건 분기로 넣은 스위치를 켭니다. 승계 계산을 잠시 중지시키기 위함입니다.

그리고 각 자리수에 해당하는 변수를 전부 각각 곱해주세요.

[0004:자금 1의 자리]에도 곱하고, [0005:자금 10의 자리] 에도 곱하고... 이건 노가다지만 기껏해야 10개정도밖에 안되요.

다 했으면 스위치를 다시 끕니다. 승계 계산을 재개하는 겁니다.





2번째 방법.


초간단하지만 왠지 불안한 방법.

그런데 이게 오히려 안전한 방법일 지도 모릅니다.


간단합니다. 작업을 하기 전에 "출력 시작" 스위치를 끕니다.

Q를 불러오셨으면 알겠지만, 저 커먼 이벤트 시작 조건으로 넣은 스위치가 "출력 시작"입니다.

즉, 저 커먼 이벤트는 "출력 시작" 스위치가 켜져 있어야만 동작하도록 되어 있는 겁니다. 그걸 끕니다.

그러면 저 위의 쌩노가다 커먼 이벤트는 잠시 작동을 정지합니다.


그리고 1번째 방법대로 각각 자리수에 원하는 변수만큼을 곱합니다.

그리고 출력 시작 스위치를 다시 켜면 끝.




Chapter 5 : 나눗셈

일단, 변수로의 나눗셈은 알아서 생각해 보세요. 전 생각하지 않으렵니다.

한 가지 분명히 말씀드자면, 이건 덧셈 뺄셈 곱셈 따위보다 훨씬 어렵다는 겁니다..


당연하죠. 최대 큰 자리수값이 1이면 그다음 나눗셈에서는 자리수 하나가 줄어드는 거잖아요? 이걸 조건 분기로 넣어주어야 하구요.

게다가, 그걸로 끝나는 게 아니에요. 각각 자리수별로 나눌 때도 각각 위와 같은 문제가 발생하는 겁니다. 어중간한 위치의 자리수가 1이면 어떻게 할거에요? 또 3이나 5, 7이면 어떻게 할거에요? 일일히 조건 분기 써가며 구현해 주어야 합니다. 제 생각인데, 나눗셈 구현은 위와 같은 커먼 이벤트를 가볍~게 능가하는 쌩노가다 작업이 될 겁니다. 게임 만들 때 이점 신경써서 만드세요.



궂이 변수로 나눗셈을 하지 않더라도, 어떤 값으로 나눈다.. 라는 것의 구현은 가능합니다. 방법은 다양합니다.

특히, 위와 같은 커먼 이벤트는, 10으로 나눗셈 하기는 매우 쉽게 설계되어 있습니다. 자리수마다 변수 하나씩 추가로 설정해줘서 거기에 자리수들을 각각 대입시키고, 그걸 원래 자리수보다 한 단계씩 낮은 자리수에 대입시켜주면 끝납니다. 그리고 조건 분기 넣어서 원래 1의 자리가 5 이상이면 계산 결과에서 1의 자리에 1 더해주고(반올림), 이외의 경우 그냥 무시하고 하면 되죠.


이를 이용하면 2로 나눗셈 하기도 쉽습니다. 10으로 나눗셈한 뒤에 5를 곱해주면 끝나요.

100으로 나눗셈 하기는.. 아시겠죠? 자리수 하나씩 더 밀어주면 된다는 거요.

그걸 이용하면 4로 나눗셈 하기도 쉽습니다. 100으로 나눈 뒤 25를 곱하면 되요.

20으로 나눗셈하려면 100으로 나눈 뒤 5를 곱하면 되구요.



 

 

Epilogue(맞나?)

저야 이미 만들어놨었는지라 썼지만, 여러분들에게는.. 되도록이면 스크립트 쓰라고 추천해 드리고 싶네요...

단, 숫자 모양을 원하는 것으로 바꾸고 싶은 분들에게는 또 이 방법이 좋을 지도 모릅니다. 숫자 이미지 파일만 바꿔주면 숫자모양이 바뀌니까요.

  • ?
    RPG세상 2012.02.24 18:44
    기.... 길다..... 스크립트가 더 낳겠군....
  • profile
    만원만주라 2013.06.30 16:39
    하하..만들수는있는데 이거 후손한테 물려줘서 해야할듯


Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45