Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions week6/15 박서영/6주차_오픈소스_분석.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# 6주차 페이지

## 프로젝트명 & GitHub 링크

프로젝트명: Snowball Fight

깃허브 링크: https://github.com/decentraland-scenes/snowball-fight

## 게임 및 기능 설명

Decentraland 플랫폼용으로 제작된 멀티플레이용 게임. 게임 내에서 눈싸움을 하면서 진행됨. 여러 플레이어가 가상공간(Decentraland 플랫폼)에 접속하여 눈덩이를 던져 상대를 맞추고 점수를 얻는 구조. 레드팀과 블루팀이 존재하며, 서로 점수를 내며 경쟁하는 방식으로 진행하는 게임.

+Decentraland란?

: 이더리움 블록체인 기반의 분산형 3D 가상 세계 플랫폼.

## 클라이언트와 서버 구조

### <클라이언트 (플레이어)>

-Decentraland Scene

-눈덩이 던지기 등의 액션

-유저의 입력이 이루어짐 (이동/눈덩이 던지기)

### <Colyseus 서버>

-룸 관리 (생성/관리)

-상태 동기화 (플레이어 위치 관리하기/ 행동 상태 관리하기/ 메시지 처리하기)

⇒ 이 둘을 웹소켓이 연결?해줌

## Colyseus가 사용된 부분

1. 룸 관리
- SnowballFightRoom.ts 파일에서 Room 클래스를 상속받아 게임룸을 생성
- 플레이어가 입장하면 onJoin, 퇴장하면 onLeave 메소드(?)를 통해서 처리함
- 새로운 플레이어 추가/ 퇴장하면 삭제?처리
- 룸 내에서 플레이어간의 동작/상호작용 등을 관리

2. 상태 동기화
- GameState, Player, Snowball 등의 클래스를 통해서 상태를 정의
- 서버에서 상태 변경 → 자동으로 모든 클라이언트들에게 동기화됨
- setSimulationInterval( )을 통해 주기적으로 업데이트해줌

3. 메시지 처리
- 클라이언트(플레이어)가 send(”throw”, data) 형태로 눈덩이를 던지는 이벤트 발생시키면
- 서버는 onMessage(”throw”, callback)으로 해당 메시지를 처리함

## 배운 부분과 연결되는 부분

Room 클래스를 활용하여 플레이어의 입장/퇴장 등을 관리하는 부분과 메시지를 처리하는 부분이 스터디에서 배운 내용이었다고 생각했습니다. 뿐만 아니라 State를 통해서 플레이어의 상태(피격/눈덩이 던짐) 등등의 상태를 계속 체크 및 모든 플레이어들에게 업데이트되도록 관리하는 부분 역시 스터디한 내용이었다고 생각했습니다. onJoin, onLeave, onMessage 등 스터디했던 내용이 나와서 흥미로웠습니다.

## 인상 깊었던 구조/아이디어

실제로 어떻게 Room, State 등이 활용되는지 볼 수 있었던 부분이 인상깊었습니다. State 안에서도 GameState, Player, Snowball 등의 클래스를 통해서 객체 등을 정의하고 이를 활용해 서버가 상태를 관리하는 점이 인상깊었습니다. 모든 관리가 서버를 중심으로 이루어지는 구조인 것 같아 인상깊었습니다.

## 개인 소감 & 회고

### 이 프로젝트에서 흥미롭거나 배운점

실제 게임에서 어떻게 Colyseus 서버를 활용하여 플레이어 및 게임의 다양한 요소들의 상태가 관리되는지를 확인하니 조금 더 이해 및 활용도에 대해서 생각할 수 있었던 것 같습니다. 게임의 로직은 간단하지만, 이런 간단한 것도 다양한 부분의 고려가 필요하다는 것 역시 느끼게 되었습니다. Colyseus를 활용한 서버 중심의 관리가 이루어지는 로직을 보니 의미있었고, 해당 게임이 가상 환경에서 실행되는 부분 역시 굉장히 인상깊었습니다.

### Colyseus/TypeScript를 활용한 서버 개발에 대한 느낌

우선 TypeScript의 문법과 구조에 대해서 실습을 해볼 수 있었던게 의미있었던 것 같습니다. JavaScript와 비슷한 부분이 많았고, 유용할 것 같다고 생각했습니다. 멀티플레이게임을 웹 서버를 통해서 실행하고 플레이해보는 것을 잘 상상해보지 못했어서 Colyseus를 활용해서 이런 것들을 구현할 수 있다는게 굉장히 신기했습니다. 스터디를 더 진행하고 익혀서 이런 서버 구조를 활용한 웹 게임을 만들어보는 것도 굉장히 의미있을 것 같다고 생각하였습닏