RPG Maker
2009.11.03 11:50

은행 시스템 구현하기

조회 수 812 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
http://littlebrain.tistory.com/107

몇 년만에 와서 쓴다는 게 중복자료네요~_~


하지만 그냥 은행이 아니고 9999,9999까지 입금할 수 있는 거대은행이니 용서해 주세요(...)


원본은 제 블로그에 있으니 한번씩 와서 카운터 좀 늘려주시구요(?)


 


--------------------------------


 


RPG Maker 2000의 한계는 가질 수 있는 최대 돈의 액수와, 변수의 최대값이 999999로 fix되어 있다는 것입니다. 때문에 이것을 극복하기 위해 여러가지 방법이 동원됩니다. 몇 가지 예를 들어 보자면,



  • 일부러 물가를 매우 낮게 맞춰 버린다거나
  • 고가의 보석 등을 도입해 상위 화폐 대용으로 사용하도록 하거나
  • n개의 변수를 이용해 BigInteger를 자체적으로 구현하거나

하는 방법들이 있겠습니다. 여기에서 제가 사용하고자 하는 방법은 세번째 방법으로, 게임 상에 『은행』시스템을 도입함은 물론, 은행에 예금할 수 있는 최대 예금액을 9999,9999까지 늘릴 수 있도록 하겠습니다.



먼저, 게임 Save 상에 구현된 은행을 스크린샷을 통해 살펴보도록 하죠.

 


은행원에게 말을 걸면 이런 메뉴가 나타납니다. 그럼 먼저 예금을 해 보도록 할까요?










 


 

 

 

 

 

 

 

 

 

 

 


현재는 계좌에 한 푼도 입금되어 있지 않습니다. 이런 식으로 예금액을 보여주는 것은 변수 8개의 나열로 처리한 것입니다.


 


 


 


 


 


 


 


 


 



 


 


 





예금을 하기 전에 현재 소지금을 표시해 줍니다. 이를 통해 플레이어가 얼마를 입금할 지 헷갈리지 않게 되므로 이런 처리는 사소하지만 매우 중요한 것 중 하나입니다.





 

 

 


 

 

 

 

 

 

 

 

 

 

 

 




이번에는 천 리프를 입금해 보도록 하겠습니다.





 


 

 

 

 

 

 

 

 


 

 

 

 

 

 




처리되었다고 하는군요. 과연 제대로 입금이 됐는지 확인해 봅시다.







 


 

 

 

 

 

 


 

 

 

 

 

 

 




다시 예금을 선택해 보았습니다. 확실히 1000리프가 예금되어 있군요.





 


 

 

 

 

 

 

 


 

 

 

 

 

 




한 번 가진 돈보다 더 많은 액수를 입금해 보았습니다.







 


 

 

 

 

 

 

 


 

 

 

 

 

 

 




당연한 일이겠지만, 이 경우에는 입금을 할 수가 없습니다. 이 처리를 해 주지 않는다면, 버그 악용으로 게임 내에 엄청난 인플레가 발생하겠죠.



 

 


 

 

 

 

 

 

 

 

 

 

 

 


 




그럼 이번엔 출금을 해 보도록 합시다. 출금시에도 현재 예금액을 표시해 주어, 헷갈리지 않도록 해 줍니다.





 

 

 

 

 

 

 

 


 

 

 

 

 

 

 




얼마를 인출할까요? 소지금은 999999리프가 한도액이므로 현재 소지금을 표시해 주어 너무 많이 인출하지 않도록 해 줍니다.





 

 


 

 

 

 

 

 


 

 

 

 

 

 




500리프를 인출해 보았습니다. 과연 이 은행원 녀석이 떼먹지 않고 제대로 넣어 줬을까요?





 


 

 

 

 

 

 

 

 

 

 

 

 

 

 




가진돈이 402601리프라고 나옵니다. 확실히 500리프 들어왔네요. 다행히도 정직한 은행원이었나 보군요.



 

 


 

 

 

 

 

 

 

 

 

 

 

 

 


 




이번에는 예금액보다 더 많은 1만 리프를 인출해 보도록 하겠습니다.





 


 

 

 

 

 

 

 

 

 

 

 

 


 




역시 당연한 일이겠지만, 인출하지 못하도록 막습니다.







 


 

 

 

 

 

 

 

 

 

 

 

 

 

여기까지가 기본적인 입,출금 시스템의 실제 구현이었습니다. 어떤가요? 꽤 쉬워 보이나요? 그렇다면 이 시스템의 자세한 구현은 어떤 식으로 되어 있는지 알아봅시다.

 



 

은행원 이벤트 작성 화면입니다. 상당히 짧게 끝났군요. 상단의 '명성' 부분은 따로 언급될 명성 시스템에 해당하는 부분이니, 무시하셔도 좋습니다. 핵심인 입/출금 파트는 입금할지, 출금할지만 정한 이후 커먼 이벤트로 처리되어 있습니다. 커먼 이벤트로 처리하는 것은, 프로그래밍 언어에서 라이브러리를 사용하는 것과 동일한 효과를 얻기 위해서 입니다. 다른 어느 곳에서도 '은행입출금' 이벤트를 호출하는 것 만으로 은행 지점을 만들 수 있는 것이죠. 그렇다면 '은행입출금' 이벤트는 어떤 식으로 구성되어 있을까요?

 


 


 


개복잡하죠~_~ 근데 이게 전부가 아니라 이건 예금 파트일 뿐입니다.

그냥 따라해도 되겠지만, 이해를 한다면 더 좋을테니 하나씩 설명해 보도록 하겠습니다. 앞서 은행원 이벤트에서 입금을 선택했을 경우 '은행입출금' 변수의 값을 1로 세팅해 주었습니다. 때문에 '은행입출금' 변수의 값이 1일 경우로 한정해 줍니다. 여기에서 미리 8개의 변수를 세팅해 두었는데, 각각의 변수 이름은 알기쉽게 '천만', '백만', ..., '십', '일' 이런 식으로 해 두도록 합시다. 이 변수들은 최소값 0, 최대값 9를 갖습니다. 이제 은행원의 대사가 나옵니다. 현재 예금액을 쭈루룩 표시해 주고, 얼마를 예금할 지를 물어봅니다. 수치 입력을 받기 전 라벨을 하나 설정해 두는데, 입력받은 수치가 기준 이상일 경우 다시 입력을 받기 위해서입니다. 이제 수치 입력을 받습니다. 그런데 0을 입력했다면, 입금하지 않는다는 것이겠죠. 여기에서 이벤트를 끊어 줍니다. 또한 입력한 값이 가진 돈보다 많은 경우에도 끊어서 미리 지정해 둔 라벨로 보내줍니다.

 이제 입력이 제대로 들어온 경우의 처리입니다. '17번 변수'는 나중에 출력을 위해 예비해 두는 변수로 계산 과정에서는 사용되지 않습니다. '18번 변수'는 예금액을 입력받은 변수입니다. '19번 변수'는 예금액을 단위별로 자르는 데 어시스트 역할을 합니다. 이제 계산 과정을 따라가 봅시다. 먼저 19번 변수에 18번 변수값을 대입한 후 '승제' 10을 했습니다. '승제'로 잘못 번역되어 있지만 '10으로 나눈 나머지'를 구하는 것입니다. 여기서 얻어진 값을 '일'에 더해줍니다. 그리고 이 과정에서 '일'의 값이 9를 초과했다면 '일'에서 10을 빼고 '십'에 1을 더해줍니다. 다시말해 윗 단위로 넘겨줍니다. 이제 마지막으로 18번 변수를 10으로 나눕니다. 이제 '십'의 자리를 처리할 준비가 되었네요. 마찬가지의 프로세스를 돌려줍니다. 이 과정을 '십만'의 자리까지 반복합니다. '십만'의 자리까지 처리한 후 '백만'과 '천만' 자리는 변수값이 9를 초과했는지만 체크해 주도록 합니다. 이 은행은 부패했기 때문에 9999,9999리프 보다 많이 예금하면 그냥 먹어버리네요.

 여기까지 계산이 완료되었습니다. 이제 고객에게 예금이 제대로 됐는 지를 알려줘야겠죠. 처음에 세팅했던 17번 변수가 여기서 사용됩니다.

 어떤가요? 어떤 방식으로 예금이 처리되는지 이해할 수 있었나요? 그럼 다음에는 출금의 처리에 대해 알아보도록 합시다.

 


 


 


스크린샷의 질이 점점 더 구려지네요~_~

보시다시피 예금 파트와 비슷한 구조로 되어 있습니다...만, 이쪽이 예금보다 조금 더 깁니다. 잘못된 출금액을 입력했을 때 원래의 예금액으로 복원해 주는 과정이 필요하기 때문이죠. 예금 파트와 출금 파트는 한 이벤트 안에 있다는 것에 유의해 주세요.

현재 예금액을 찍어 주고, 출금액을 입력받은 다음에 그 값이 0이거나 출금하고 나면 가질 수 있는 돈의 최대치가 초과될 경우에는 미리 안된다고 끊어 줍니다. 이 때 라벨의 번호가 2임에 주의해 주세요. 실수로 1을 또 쓰면 예금 파트로 가 버립니다. 이제 앞서 예금 파트에서 했던 대로 입력한 액수를 자리수별로 끊어서 예금액에서 빼 줍니다. 그 과정에서 예금액이 0보다 작아지면 상위 자리수에서 1을 꾸어온 후에 자기 자리수에 10을 더해줍니다. 이런 식으로 십만, 백만, 천만까지 쭉 올라가 보았는데... 천만 자리가 0보다 작아지게 되는 수가 있습니다. 현재 예금되어 있는 액수보다 많은 액수를 출금하려 시도했을 경우이죠. 이 때문 예금 파트의 계산 과정을 복-붙 해서 예금액을 복원해 주어야 합니다. 이 과정을 거치지 않으면 전체 예금액이 음수가 되어 버리는 불상사가 생길 수 있기 때문에 주의해야 합니다. 



자, 어떤가요? 처음에 스크린샷을 통해 봤을 때의 느낌 그대로 참 쉽죠? (밥아저씨 풍으로) 이걸 다 이해하기가 너무 어렵다면, 소스를 그대로 공개해 놓았기 때문에 그냥 나온 고대로 따라하기만 하셔도 됩니다. 이해야 뭐 차차 해 나가면 될테니까요.

그럼 다음 번에는 Save의 자체 메뉴는 어떤 식으로 만들어졌는지 알아보도록 하겠습니다. 스크린샷 만들기가 꽤나 귀찮다는 걸 깨달았기 때문에, 퀄리티는 훨씬 낮아질 것 같지만, 아무튼 기대 많이 해 주세요~

 

 

-------------------------

 

이건 뭐 에디터로 볼 때랑 미리보기로 볼 때랑 글 쓰고 볼 때랑 다 달라서 어느 장단에 맞춰야 될 지 모르겠네요~_~

뭐, 알아서들 잘 봐 주실 거라고 생각하겠습니다.(어?!)

?
  • ?
    The_cat 2009.11.03 11:50
    음냐.. 옛날에 이곳에서 적었던적 있는 내용이네요..
    뭐 그때 올린 간단 시험식보단 깔끔해서 보기 좋지만..
    일단 몇가지 이야기 하자면 보맨님께서 제작하실때 각 자리수마다 변수를 생성해주셨는대..
    그러는것 보단 "일~만 자리까지 하나의 변수", "십만 이상의 변수" 이렇게 두개정도로 묶는게 좋습니다.
    그렇게 되면 계산식에서도 작은변수에서 십만단위만 큰변수로 넘겨주면 되게되고..
    이것만으로도 예금액의 단위가 99,999,9/99,999까지 오르게 됩니다.
    그리고 일정금액이상은 먹는다고 하셨는대..
    입금계산식에서 마지막 천만단가 9이상일시 9로 초기화시켜주는 코드만 삭제해도..
    최대예금액이 4~5자리수가 더 늘어나게되고 더 많이 그런문제가 감소하게됩니다.
    완전히 없에시고자 한다면 만약 사용하신 코드 그대로 사용하신다 하면 일일이 감소를 다시 해줘야하지만..
    불가능하진 않습니다.
    .....
    적고있다보니 3시가 다되가는..=ㅅ=
    예비군훈련하고와서 이 뭐하는짓인지...
    일단자고 자세한건 내일 직접 적어야겠군요..=ㅅ=
    역시 이벤트,변수의 활용성은 엄청난것인듯..

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
944 RPG Maker [R2K]변수값을 픽쳐로 표시하기 file Iriaroan。 2010.04.11 982
943 RPG Maker rpg만들기2003사용법 2 C8마린 2010.02.24 884
942 RPG Maker MID 파일의 소리를 개선해보자. 1 file 밀크커피 2010.02.07 815
941 언어/기타 자작광석4개 A.M.S 2010.02.07 723
» RPG Maker 은행 시스템 구현하기 1 앞만보맨 2009.11.03 812
939 RPG Maker RPG의뜻 1 zl게임을만들고파 2009.09.06 648
938 RPG Maker 다운로드 1 zl게임을만들고파 2009.09.06 759
937 언어/기타 마법에관한것들 zl게임을만들고파 2009.09.06 579
936 언어/기타 사운드 zl게임을만들고파 2009.09.06 419
935 언어/기타 화성학 기초 2 file C코드선생 2009.07.21 1018
934 언어/기타 게이지 강좌~~~ (자작자료사용) 3 file 게이지의달인 2009.05.29 926
933 언어/기타 잠입액션에서 적의 시야 설정하기 (예제有) 3 file rhj 2009.05.06 3324
932 RPG Maker 넷플레이 스크립트 2.0 사용법 3 독도2005 2009.05.03 3167
931 언어/기타 커맨드입력 4 엘류트 2009.04.17 2795
930 언어/기타 알만툴에서 윤년표현 file 엘류트 2009.04.17 2803
929 RPG Maker RPG2000 마우스 사용 관련 자료 1 file Black-☆ 2009.04.02 766
928 RPG Maker RPG2003 에서요 6 완폐남™ 2009.03.18 739
927 언어/기타 0.0초를 다룰때 조심할점 3 A. 미스릴 2009.03.13 2646
926 RPG Maker [vx]주인공들 체력 변수로 관리하기 (스크립트) 나나야츠루 2009.03.13 2880
925 언어/기타 게임을 시작한다음 튕기게 해보자(?) 4 file 켈군 2009.02.04 2945
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)