슈퍼마리오 멀티플레이어 개발 후기

coolspeed

왓 스튜디오 팀 합류 과제로 게임제작 미션을 받았다.

나는 과제로 “슈퍼마리오 멀티플레이어 게임”을 만들었다:

EnemyCD.gif

과제 결과물을 왓 스튜디오의 허락을 받고 소스코드를 Github 에 공개하였다:

https://github.com/coolspeed/MarioMultiplayer

관심 있으신 분들은 별표 하나씩 찍어 즐찾해주시길 부탁립니다.

게임 룰: 위의 GIF 움짤  그대로. 먼저 상대방을 밟는 쪽이 이긴다.

 

과제가 1차, 2차로 나뉘는데 1차에서는 싱글 플레이어 슈퍼마리오를 만들었고 2차에서는 그것을 멀티플레이어 게임으로 발전시켰다.

최종 클라 Java (Processing) 1500 줄, 서버 C# 22줄로 짜여졌다.

클라

Processing 으로 만들었다. 왜?

  1. Processing 이 좋아서. (유쾌한 시각적 프로그래밍)
  2. Unity 쓸줄 몰라서.
  3. 다른 엔진도 쓸줄 몰라서.
  4. 엔진부분이 더 재밌어서.
  5. 웹에다 배포하고 싶어서. (P5.js 를 통하여. 하지만 망했다. 그냥 일반 Processing 애플리케이션처럼 exe 파일로 빌드했다.)

서버

단순한 릴레이 서버.

big_mirror.png

넷코드

ZeroMQ 를 네트워크 라이브러리로 사용했다.

Continue reading

Advertisements

오픈소스 네트워크 라이브러리 일람

1. Century

coolspeed 가 만든 Go 언어 네트워크 라이브러리 입니다:
https://github.com/coolspeed/century

이것이 1등입니다. 그냥 말이 필요 없습니다 ( __ __)

2. Skynet

https://github.com/cloudwu/skynet/graphs/contributors

C 언어와 lua 로 된 네트워크 라이브러리.
중국 게임 업계 제일 유명한 스타 개발자인 cloudwu 가 개발한 네트워크 라이브러리 입니다.
아직도 활발하게 개발 중이네요. Pull Request 도 활발하나 봅니다.

천하의 netty 가 github 에서 별표 7000개인데, Skynet 이 무려 4000개.

3. Netty

Java 네트워크 라이브러리.
한국인이 개발하고 (게임 업계 포함하여) 전 세계 개발자들이 추앙하는 네트워크 라이브러리인데  정작 한국에서는 많이 안쓰이는?

https://github.com/netty/netty

4. SuperSocket

C# 네트워크 라이브러리.
중국인이 만들었는데 한국 게임 업계에 많이 쓰이는..

https://supersocket.codeplex.com

5. Boost.ASIO

C++ 슈퍼천재(괴짜)들이 만든거라 워낙 웰메이드. 사용도 쉽고.
언뜻만 보기에도 탑 솔루션인데, C++ 17 표준에 포함된다는게 거의 확정이라 (개인적으로 80%확률일거라 봄) 가장 핫하다고 볼 수 있지 않을까요.

Continue reading

[번역] ZeroMQ설계자: 세계를 구원하라

  • 번역: coolspeed

이 글은 ZeroMQ설계자가 지은 책이며 ZeroMQ의 “바이블”이라 불리는 ZGuide 의 머리말이다.

이 책은 다양한 프로그래밍 언어 예시 버전의  PDF, epub 등 이북 포맷으로 다운로드도 가능하고[1], 한글 번역도 온라인에서 읽을 수 있다. 당연히 그속에는 이 머리말의 한글번역도 포함되어 있었다. 다만 번역이 만족스럽지 못해 필자가 직접 번역했다.


ZeroMQ 100 자 요약

ZeroMQ (ØMQ, 0MQ, or zmq 라고도 표기함) 는 임베드블 네트워킹 라이브러리처럼 생겼는데 실제론 컨커런시 프레임웤처럼 작동한다. ZeroMQ 는 원자적으로 메시지를 배송하는 소켓을 제공하는데 그 배송수단으로는 스레드간 통신, 프로세스간 통신, TCP 그리고 multicast 등 다양하다. 당신은 ZeroMQ 소켓을 N-to-N 방식으로, fan-out, pub-sub, task distribution, 그리고 request-reply 등 패턴으로 사용할 수 있다. 이것은 클러스터 제품들의 뼈대로 사용하기에 전혀 문제 없는 높은 성능을 가지고 있다. 이것의 비동기 I/O 모델은 당신이 message-passing task처럼 짜여진, 확장성 있는 멀티코어 애플리케이션을 만들 수 있게 해준다. 언어 API 만큼 고득점을 갖고 있으면서 거의 모든 OS에서 돌아간다. ZeroMQ 는 iMatix 에서 개발했으며 LGPLv3 라이센스로 소스가 오픈되어있다.

 

세상을 구원하다

ZeroMQ 요놈은 정말 좋은데. 어떻게 말로 표현할 방법이 없네.  ZeroMQ의 가치를 설명하기 위해, 일부 사람들은 요놈이 제공하는 모든 훌륭한 기능들을 나열하는 것으로 부터 시작하려고 한다:

  • 이놈은 스테로이드를 처먹은 소켓이야.
  • 이놈은 라우팅 기능이 있는 우편함으로 비유할 수 있지.
  • 존나 빠름.

Continue reading

차세대 Go언어 게임서버 Century 뼈대

소스코드 주소: https://github.com/coolspeed/century

Amazon Gamelyft 때문에 맥나서 안짤려다가 블로그글 에서 쳐놓은 허풍들이 죄가 되여 끄적여보았습니다.

일단 현재는 실행 가능한 채팅서버이구요.

벤치마크결과는 8만5천 TPS 씩이나 나와서 벤치마크 프로그램을 의심하는 중입니다.

그 어떤 비평도 다 저에게 다 도움이 될 것이니 어떤 비평이든 아끼지 말고 주시기 바랍니다.
(라고 쓰고 “칭찬과 좋은 비평만 듣겠다” 라고 읽는다.)

매니지드 언어로 MMORPG 만들기

사건의 유래는 게임코디에 어느분이 이런 질문을 올린겁니다.

MORPG까지는 만들어봤는데, 심리스한 MMORPG를 Java나 C#으로 ( 메이저 한 언어로 갑시다…! ) 만든다고 하면 막연히 가장 걱정되는게 Full GC 상황에서의 world stop입니다. 아무리 concurrent gc나 vm 옵션을 건드려서 최적화 한다고 해도 언젠가는 Full GC를 마주칠텐데 1초만 world가 멈춘다고 해도 썩 유쾌한 경험은 아닐거 같거든요.

두번째로는 최대가용 메모리 입니다. Full GC랑 연관이 있는데 결국 Full GC상황에서의 GC 수행시간은 vm에 할당한 최대 heap size에 어느정도 비례합니다. 이 주제를 놓고 지인들과 몇번 토론을 했는데 주로 나온 얘기들은…

‘마영전은?’
‘누가 시도해 본 사람?’
‘요즘 하드웨어 좋은데 괜찮지 않을까?’
‘C++ 놓은지 너무 오래되서…(?)’
‘최소화 할 수는 있겠다, 죄다 pooling 한다던가, 그런데 적당히 해야지 이럴거면 왜 java나 c#을 써야할까?’

와 같은 얘기 -_- 어떻게 생각하시나요?

Continue reading

차세대 실시간 게임서버 엔진 Century 설계 설명

피터 틸의 <ZERO to ONE> 은 이런 물음으로 시작된다:

사람을 채용하려고 면접을 볼 때 내가 자주 하는 질문이 하나 있다.

“정말 중요한 진실인데 남들이 당신한테 동의해주지 않는 것은 무엇입니까?”

그리고 책 중간에도 이런 문장들이 있다:

“대부분의 사람들은 더 이상 찾아낼 숨겨진 비밀이 없는 것처럼 행동한다.” (P126)

“사람들이 숨겨진 비밀을 무서워하는 것은 틀릴까 봐 무서워하기 때문이다. 숨겨진 비밀이라면 당연히 주류 세력의 점검을 받은 적이 없다. 인생에서 실수하지 않는 것이 목표인 사람은 숨겨진 비밀을 찾아다니면 안 된다. 혼자서만 옳은 것도 쉬운 일이 아닌데, 혼자이면서 ‘틀리는 것’ 은 견딜 수 없을 테니 말이다.” (P130)

“세번째 추세는 ‘무사 안일주의’ 다. 사회의 엘리트들은 새로운 사고를 탐구할 수 있는 자유와 능력을 가장 많이 지녔다. 하지만 그들이야말로 숨겨진 비밀을 가장 믿지 않는 사람들인 것 같다. 이미 다 해놓은 것들을 토대로 편안하게 지대(地代)나 받고 있으면 되는데, 무엇하러 새로운 숨겨진 비밀을 찾아 해매겠는가?” (P130)

“숨겨진 비밀을 찾겠다는 포부를 가진 사람들은 먼저 이렇게 자문하게 될 것이다. ‘뭔가 새로운 것을 발견하는 게 가능하다면 똑똑하고 창의적인 글로벌 인재들 중 누군가가 벌써 발견하지 않았을까?’ ” (P131)

“숨겨진 비밀은 찾아다니지 않으면 발견할 수가 없다. 이 점을 잘 보여준 사람이 페르마의 마지막 정리를 증명한 앤드루 와일스였다.” (P135)

“진짜 진실은 아직 찾아내지 못한 숨겨진 비밀들이 많이 있다는 점이다. 하지만 그 비밀들은 오직 그칠 줄 모르고 찾아 헤매는 사람들에게만 그 모습을 드러낼 것이다.” (P136)

“숨겨진 비밀을 믿고 그것을 찾아다니는 것만으로도 우리는 보편화된 관습을 넘어 뻔히 보이는 곳에 숨어 있는 기회들을 볼 수 있다.” (P137)

“숨겨진 비밀을 발견한 사람은 선택의 기로에 놓인다. 누군가에게 얘기를 할 것인가? 아니면 혼자서 간직할 것인가? 이는 숨겨진 비밀의 종류에 달려 있다. 파우스트가 바그너에게 들려준 것처럼 위험한 진실들도 있으니까 말이다.” (P141)


Continue reading