일기

타워 디펜스 프로젝트

Realuda72 2025. 1. 2. 19:27

 

브라우저에서 작동하는 타워 디펜스 게임 프로젝트가 끝났다.

 

 클라이언트는 html과 캔버스로, 미리 주어직 스켈레톤 코드를 조금씩 변형해서 만들었다.

 서버는 node.js로 작성했다.

 데이터베이스는 유저 정보를 mySql로, 게임 데이터를 json으로 저장했다.

 

 대부분의 게임 로직을 서버에서 처리하며, 클라이언트는 플레이어의 조작을 서버로 전달하고, 서버로부터 데이터를 전달받아 디스플레이하는 정도의 작업만 수행한다.

 

 게임 개요

 타워를 설치해서 계속해서 생성되는 몬스터를 처치해야한다. 필드에 존재하는 몬스터의 수가 일정량을 넘어서면 타이머가 시작되며, 타이머가 모두 끝날때까지 몬스터를 충분히 처치하지 않으면 패배한다.

 타워는 단일, 다중, 범위 타격의 세 종류가 있으며, 1~5까지의 티어가 있다. 같은 타입, 같은 티어의 타워를 드래그&드랍으로 합성하면 상위 티어의 무작위 타입 타워가 생성된다.

 타워의 타입별로 업그레이드를 할 수 있다. 타워를 업그레이드 하면 해당 타입의 모든 타워가 강화된다.

 

 서버 개요

 서버는 restful api로 유저의 로그인, 회원가입을 받는다. 방을 생성하고 참여하는 부분까지 restful api로 작동한다.

 게임을 시작하면 socket.io를 통해 클라이언트와 통신을 연결한다. 이후 플레이어의 조작을 받고, packetId를 통해 적절한 핸들러를 통해 서버 로직을 처리하고, response메시지로 클라이언트에 메시지를 전달한다.

 

 서버의 주요 기능은

  1. 게임룸 생성 및 관리
  2. 몬스터 생성 및 이동 동기화
  3. 타워와 몬스터의 충돌, 피격 판정
  4. 타워 설치, 합성, 강화 및 동기화
  5. 채팅

이 있다.

 

 이 중 내가 맡은 부분은 타워 합성, 강화 및 동기화, 골드 획득 및 사용 동기화가 있다.

 

후기 KPT

Keep:

우선 프로젝트를 끝까지 완성한것

내가 맡은 파트에 문제 없이 잘 돌아가는 것

다른 사람 코드도 읽어서 프로젝트의 전체적인 흐름을 파악한 것

중간중간 함께 머지 하면서 프로젝트 공유한 것

 

Problem:

유사한 기능이 서로 다른 파일에 있거나, 한 파일에 둘 이상의 기능이 구현된 것

디버깅용 코드들을 제거하지 않고 그대로 데브 브랜치에 병합한 것

다른 사람이 내 코드를 읽고 이해하기 어려웠던 것

 

Try:

한 파일에 하나의 기능만 구현하기

디버깅용 코드들 꼭 제거하고 커밋하기

내 코드를 읽고 이해할 수 있게 주석으로 잘 설명하기

 

 

'일기' 카테고리의 다른 글

OSI 7계층 어플리케이션 계층  (0) 2024.12.30
TCP와 UDP  (0) 2024.12.27
(JavaScript) 신고 결과 받기  (0) 2024.12.27
(JavaScript) 공원 산책  (0) 2024.12.26
(JavaScript) 달리기 경주  (0) 2024.12.25