N vs N 네트워크 게임

2017. 10. 18. 14:27기술/네트워크

반응형

N vs N 네트워크 게임에 대해서 제가 생각해본 이론입니다.


예시)


1. Server는 UDP/TCP Server이고 Packet을 보낼 때는 아답터 패턴을 사용합니다.

2. 아답터 패턴을 사용하는 이유는 프라우드넷이나 텐센트의 G-Cloud등 서버가 변경될 시 유연한 설계 때문입니다.

3. Server에 접속된 총 (N+N)명의 유저가 한 게임맵에 들어옵니다.

4. Character Move 관련된 정보는 UDP로 보냅니다. 나머지는 TCP로 보냅니다.

5. Move 관련된 정보를 받는데 moveChrData는 배열이며 움직임이 있는 유저의 정보를 보내줍니다.

6. Character는 (N+N-1)명의 다른 Character 정보를 배열로 가지고 있습니다.

7. moveChrData를 받으면 Character ID를 통해 해당 Character를 이동시킵니다.

8. 한 유저가 어떠한 동작을 취했습니다. 예를 들어 공격 버튼을 터치하면 SendActionPacket을 서버로 보냅니다.

9. Server에서는 다른 9명의 유저에게 한 유저가 동작한 정보를 보내줍니다.

10. actionChrData를 받아서 동작한 Character ID를 통해 해당 Character를 동작시킵니다.

11. actionChrData 클래스에 동작에 관한 열거형(enum)이 중요합니다.

12. Packet을 자주 주고 받기 때문에 Packet 내용도 중요하지만 최적화(경량화)도 중요합니다. 프라우드넷에 메시지 압축기능이 있네요.

13. NPC(Monster)등이 생성되었을 경우 서버에서 (N+N)명의 유저에게 알립니다. 클라이언트에서 몬스터 출현(SpawnMonsters)을 처리합니다.

14. 하나의 필요한 기능에 대해서 하나의 함수가 필요할테인데 프라우드넷에 RMI PIDL이라고 있습니다.

15. SendAttackMonster (MID, int dmg), NotifyAttackMonster (...) 이런식으로 필요에 따라 함수들을 추가해 주어야합니다.

16. 자주 그런건 아니지만 한국에서 중국서버에 접속해서 게임을 할 때 통신상태가 안 좋아서 접속대기중... 같은 상황이 발생하기도 합니다. 이러한 상황에 모든 Character, NPC(Monster)의 정보(HP, 상태등) 갱신 처리도 해주어야 합니다. 

17. 또한, 완전히 접속을 해제한 경우 그냥 패배 혹은 다시 접속해서 게임에 참여한 경우도 처리해 주어야 합니다.

18. 프라우드넷을 사용하여 실습해봐야겠습니다.


예) 던파 3 vs 3 팀전


예) 왕자영요(王者荣耀)5 vs 5 팀전


반응형