게임은 한 달 전에 침착맨 팬 게임으로 카드 게임 만들어본 게 다입니다.
동시 접속 게임은 어떻게 만드는 건지 알아보려고, 전투 부분만 테스트 버전으로 만들어봤어요.
열흘 걸렸네요.
여러 사람이 접속했을 때 어떤지 보고 싶어요.
https://chimgame.onrender.com/
침게임 온랜더 닷컴입니다. 무료 서버 썼습니다. 얼마나 버틸지 궁금하네요.
별도의 설치 없이 웹 상에서 돌아갑니다.
모바일에서 되긴 하지만, PC 기준으로 만들었습니다.
비쥬얼은 인터넷에서 받은 무료 에셋으로 만들어서 아주 옛날스럽습니다. 😅
참고: 그래픽이 좋고 나쁘고는 멀티플레이 서버와는 무관합니다.
좋은 캐릭터 도안만 있다면 얼마든지 바로 향상 가능합니다.
얘나 쟤나 쟤나 서버 입장에서는 모두 다 격자 위의 점일 뿐이라는 거
쌈국지는 전투 맵에 하나의 성만 있는 것 같은데, 테스트 버전에서
먹고 먹히는 것까지 보고싶어서 성을 6개를 넣었습니다.
대략 요런 위치입니다.
이동은 키보드 W A S D와 Q E 입니다.
Q와 E 대신 J와 K를 눌러도 됩니다.
모바일을 위해 가상 키보드를 넣었지만, 클릭하다가 줌인이 된다든지 드래그가 되는 경우가 있습니다.
병종은
검 Q: 정면 1인 공격 6뎀 E: 1초동안 데미지 30%로만 받기
도끼 Q: 8방 모두 공격 4뎀 E: 도끼 던지기
활 Q: 정면 1인 공격 3뎀 E: 활 쏘기
기병 Q: 정면 1인 공격 8뎀 E: 몇 초간 빨리 달리기
처음 체력은 30
체력은 자기 팀의 마을 위에 올라가면 치료가 됩니다.
성 점령은 본성 위에 올라가면 점령이 됩니다.
성이 점령되면 주변의 마을들도 소속이 바뀝니다.
킬을 하거나 점령을 하면 레벨이 오릅니다.
레벨이 오르면 최대 체력만 오릅니다. 최대 99
리스폰 지역에 있으면 새로 생성된 캐릭터와 겹쳐서 둘 다 이동 못하게 되는 수가 있습니다.
리스폰 지역(무덤가)에 오래 머무르지 마세요.
일단 테스트 버전은 통일이 없습니다.
지렁이 게임이나 세포 게임처럼 그냥 계속 돌아갑니다.
플레이 해보시고 더 재밌기위해 어떤게 추가되면 좋을 지 알려주세요.
여기서부터는 만드는 것 관련한 이야기.
(스압)
코드는 https://github.com/chimlang/realtime 여기에 다 공개해뒀습니다.
하지만 아직 정리를 하지 않아서 해독하는건 불가능한 수준입니다.
곧 정리해 볼 생각입니다.
지금은 상남자식으로 서버는 app.js 파일 하나에, 클라이언트는 index.html 하나에 다 때려박았습니다.
다같이 오픈소스로 게임을 완성하는 것도 좋을지도?
서버는 nodejs
클라이언트는 그냥 javascript입니다.
서버는 render.com에서 그나마 가까운게 싱가포르라 거기로 선택했습니다.
핑이 저는 120 ms 정도가 나오네요. 많은 사람이 이것저것 누를 때 어떠련지 궁금하네요.
아이폰에서는 300 ms까지도 올라가는데 이건 사파리 브라우저에서 뭔가 있나봐요.
서버에서 게임 진행하는 방식을 만들 때 큰 갈림길 하나가 있었습니다.
input이 왔을 때 바로 처리할지,
서버에서 tick 당 하나씩만 처리할지인데,
지금은 input이 왔을 때 바로 처리하는 식으로 했는데, 도중에 조금은 후회를 했습니다.
하지만 장단점이 있어서 지금도 뭐가 더 좋은지는 모르겠습니다.
서버를 돌려보고 경험해봐야 알 것 같습니다.
이런 게임을 만들면서 결국 병목은 뭘까 생각해보면, 서버 회선인 것 같아요.
n명이 접속하면, n명 각자에게 n명의 정보를 보내야하니 n^2으로 서버의 전송량이 늘어납니다.
한 명의 정보(x좌표, y좌표, 체력, 동작여부)를 한 명에게 보내는 것을 50바이트 정도라고하면 (더 최적화를 할 수 있을 것 같긴 합니다만)
60 ms에 한 번 보내면, 17 fps정도인데, 이러면 초당 1 킬로바이트 정도입니다.
플레이어 입장에서는 100명이어도 1mbps의 알뜰폰 무제한으로도 해결가능한 정도입니다.
서버 입장에서는 100 * 100이 되어버리니.. 좀 더 계산해보면 100메가 랜 쓰는 가정집이면 300명 정도 이론상 커버 가능합니다.
트위치대 유튜브로 1,000 대 1,000은 볼 수 없겠네요.
홈 서버 만드는건 넘어야 할 산이 아주 많은 것 같고,
클라우드 서버를 써야할텐데 비용이 어떻게 나올지는 모르겠어요.
일단은 render.com말고 다른 곳을 유료로 쓴다면 일본에 서버가 있는 linode를 써볼 것 같습니다.
아마존이나 마소, 구글 서버는 한도없이 청구되는 것 같아서 무섭네용
서버 부담을 낮출 수 있는 최고의 방법은 구역을 나눠서 사람 수의 제한을 두는 방식인 것 같아요.
m개의 구역으로 나눠버리면 한 서버당 (n/m)^2 만큼만 처리하면되니까요.
쌈국지처럼 만든다면 여러 성에서 동시에 전투가 일어날테니 분산이 되겠죠? 전투에 참여안하고 내정하는 사람들도 있을테고.
서버가 게임 진행을 계산하는데는 얼마나 부하가 걸리는지는 아직 계산을 안해봐서 모르겠어요.
보니까 결국, 계속해서 크기 비교를 하는게 서버의 일이더군요.
플레이어와 플레이어가 겹치는지
플레이어와 벽이 겹치는지
플레이어와 다른 플레이어의 공격 범위가 겹치는지.
플레이 해보시고 더 재밌기위해 어떤게 추가되면 좋을 지 알려주세요.
일단 저는 날씨 요소, 책략가 뭐 이런 것들이 떠오르네요.
아니면 필드에 다람쥐를 배치한다거나
클라이언트를 유니티나 언리얼로 바꿔서 그래픽을 높이면 더 재밌으려나요?
키보드 말고 롤 처럼 마우스 클릭으로 이동 공격하는 게 더 재밌으려나요?
그림을 잘 그렸더라면 좀 더 영걸전이나 조조전 풍의 캐릭터들을 썼을 텐데요. AI한테 시키면 되려나..?




