Skip to content
 

RPG 게임을 만들어 보자

한동안 대항해시대를 하다가 게임을 접고나니 허전한 마음에 이번엔 게임서버 개발에 도전해 볼려고 몇일째 끙끙대고 있다.

거창하게 rpg를 꿈꾸며 내부 구성을 최대한 확장성을 고려해서 디자인 해봤다. 아마도 다른 게임서버 엔진도 비슷하지 않을까 기대하면서

thread 방식과 poll 방식 두가지 모두 게임에 적합하지 않은거 같아서 이번엔 좀더 복잡한 효과적인 방법을 고민하게 되었다.

Thread 방식은 코딩하기 편한반면 다중 접속자에 대한 부하가 증가되면 접속 클라이언트간 데이타 교환에 어려움이 많다. Poll방식은 Thread방식에 비해서 부하가 적은 반면 속도가 느린 클라이언트로 인한 전체 네트웍의 랙 현상이 두드러지게 된다.

Server, Connection Pool, Thread, Poll 의 혼용과 모든 기능을 object로 통일하여 설계 해 봤다.

완성이 될때까지는 무식하게 텔넷으로 일일이 프로토콜 쳐가며 테스트 중인데 언능 GUI 클라이언트를 만들던지 해야겠다.

클라이언트가 서버에 접속하게 되면 최초 Connection Pool에 대기모드로 들어가고 최초 스래드가 클라이언트를 컨넥션 풀에서 끌어온다음에 게임에 필요한 object 정보들을 내려주고 최종 로그아웃한 스래드로 이동시켜 주는 방식이다.

각 스래드 간에서는 BroadCasting이 될수 있도록 하여 이동이나 대화가 가능하도록 하였다.

대항해시대에 비추에 생각하면 하나의 도시나 해역이 하나의 데몬에 해당하고 광장 또는 주점과 같이 데몬안에 스래드로 구역이 나눠질 수 있다.

오브젝트는 Gate, NPC, User, Item, Quest 로 구분된다.

Gate 는 스래드간 이동 또는 데몬/서버간 이동을 위한 통로로 Object 실행으로 해당 장소로 이동하게 된다.
NPC는 자동 동작 오브젝트로 User가 근접할때 자동 인식을 하게 되어 특정한 동작(공격, 인사)을 하게 된다.
User는 로그인 한 유저의 정보를 관리하게 된다.
Item 은 User 또는 NPC가 소지하게 되는 오브젝트로서 무기,스킬,소비아이템등의 성격을 부여할 수 있게 된다.
Quest는 시나리오 오브젝트로서 장소이동, NPC 선택 또는 전투, Item 취득 과같은 내용을 포함하게 된다.

오브젝트 실행 명령은 create, delete, object, move, exchange 로 구성하고 있다.

create, delete는 스래드에 입장시 초기 오브젝트들의 목록이나 아이템등의 표시를 위해서 이용되면 user object 의 생성도 같은 방식을 이용한다.
object는 해당 오브젝트를 실행하는 명령으로 아이템의 사용 또는 npc와의 대화, gate 로의 이동등이다.
move 는 자신의 object 또는 다른 user또는 npc의 움직임을 수행한다.
exchange는 아이템 또는 퀘스트의 구매, 취득, 교환등의 기능을 수행한다.

이제부터는 클라이언트 쪽을 만들어야 되는데 머드게임같이 간단히 텍스트 베이스로 할지 아니면 오픈소스 클라이언트로 할지 고민중이다. 3d나 2d로 하면 이쁘기는 한데 그래픽에 대한 막막함으로 어떡할지 고민스럽니다. 딱 2d로 돌아가는 비트맵수준의 클라이언트가 있다면 간단히 그려가면서 만들기도 할텐데…

게임개발을 한번도 안해봤기 때문에 이런구성이 정답인지는 잘 모르겠다. 또한 이러 형태의 오픈소스 서버가 이미 존재할 수도 있을것이고. 암튼 공부하는 차원에서 시작한거니까 minimsn처럼 공개하는 그날까지 열심히 코딩해 볼려고 합니다.

약칭 minitrade 게임 완성을 꿈꾸며…

One Comment

  1. close says:

    mini msn을 알게되어 사용하고 있는 학생입니다! 기대가 되네요

Leave a Reply