태크놀로지

WAR OF NEMO - Network 3인용 2D 게임 본문

포트폴리오

WAR OF NEMO - Network 3인용 2D 게임

원택 2020. 9. 29. 02:09

게임소개

Video : www.youtube.com/watch?v=PKQpKVNl_Ew

Git : gitlab.com/minjoooo/war_of_nemo

 

Projects · minjoo kim / War_of_Nemo NetworkGameProgramming

한국산업기술대학교 게임공학과(네트워크 게임프로그래밍 텀프로젝트) TCP/IP 멀티쓰레드를 사용한 유저간 통신게임 개발 (2d 4인용 멀티게임)

gitlab.com

개발환경

  • DirectX 2D
  • C++
  • Window Socket API

개발목적

  • 3인 대전 멀티플레이 게임 개발
  • 멀티쓰레드 활용 능력 배양
  • 서버/클라이언트 동기화 기법 습득

개발인원

  • 3인개발

담당 역할

  • 클라이언트 개발
    • DirectX 2D를 사용하여 프레임워크 및 컨텐츠 구현
    • 클라이언트 네트워크 동기화 시스템 구현

게임방식

  • 3명 플레이어들은 총알을 발사하여 상대방 플레이어를 맞춥니다.
  • 총알은 벽이나 장애물에 맞으면 튕기며, 내가 발사한 총알에 내가 맞을 수 있습니다.
  • 전투에서 살아남는 마지막 1인이 승리합니다.

조작법


프로젝트 분석

게임 흐름도

  1. Title Scene에서 IP주소 입력
  2. Lobby Scene에서 SPACE BAR 입력으로 READY상태로 전환.두 명 이상의 플레이어가 READY 상태 시 게임 시작
  3. 게임 플레이
  4. 게임 종료 시 Result Scene 전환 및 Lobby Scene으로 전환

게임 플로우 차트

  • Client
  1. 클라이언트 실행 후, 서버에 connect 한다.
  2. 요청이 받아지면 ID를 서버로부터 받는다.
  3. 로비에서 준비 상태로 바꾼다.
  4. 게임 시작 메시지(초기화된 월드 상태)를 받는다.(게임시작)
  5. 키 입력 시 해당 키에 해당하는 명령 메시지를 서버에 보낸다.
  6. 서버에서 업데이트 된 월드 상태(플레이어, 총알의 위치 등)를 받는다. 업데이트 된 내용으로 그린다.
  7. 5~6을 반복하고, 게임 결과를 받으면 로비로 이동한다.
  8. 사용자가 접속종료 시 게임을 종료한다.
  • Server
  1. 서버 실행 후, listen 상태에서 클라이언트의 connect 요청이 오면 accept 후 클라이언트에 ID부여, RecvThread를 만든다.
  2. 로비에서 2개의 클라이언트의 준비상태를 확인한다. 모두 준비상태이면 PhysicsThread를 만들고, 초기화된 월드 상태를 보낸다.
  3. RecvThread는 클라이언트의 메시지를 받는다. 그리고 타입을 구분하여 공유 자원에 넣는다. (로비에서의 처리는 RecvThread에서 한다.)
  4. PhysicsThread는 공유 자원의 값을 읽어 월드 상태를 업데이트한다. 업데이트된 월드 상태를 클라이언트에 전송한다.
  5. 3~4번을 반복한다. 생존자가 1명이 되면 모든 클라이언트에게 게임 결과를 보내준다.

클라이언트 UML

프로토콜


개발하면서 느낀점 & 배운점

졸업작품을 시작하기전 처음으로 제작한 네트워크 게임입니다. 졸업작품 팀원들과 함께 텀프를 진행하였기 때문에 졸업작품 개발전 경험을 쌓을 수 있었습니다. 기술적으로는 서버와 클라가 개발전 구조를 설계하고,프로토콜 회의, 동기화작업을 같이 진행하게 되었는데 이 텀프로젝트를 통해 구조는 어떤식으로 짜야하고 주의해야할점은 무엇인지를 경험으로 얻을 수 있었습니다. 

※ 최초로 만든 네트워크 게임일뿐더러, 졸업작품 시작전 정말 많은 도움이 된 프로젝트라 기억에 남습니다.