Node 강의/심화

1-3 게임 기획하기 ( 점프 게임 )

kagan-draca 2024. 9. 26. 19:47

1. 게임 장르 결정하기

 

게임의 방향성을 정할 수 있는 장르를 가장 먼저 선택해줍니다.

 

시중에는 아래와 같이 다양한 장르가 존재합니다.

액션 어드밴처 롤플레잉 슈팅
시뮬레이션 전략 퍼즐 레이싱
스포츠 리듬 파티 생존
샌드박스 MOBA 카드 MMORPG
플랫폼 탑다운 슈터 로그라이크 호러
턴제 전략 방치형 탐험 탱크
협동 멀티플레이 대전 격투 슈팅

 

"우리는 플랫폼 사이드 뷰 점핑 액션 게임"을 만들어 볼 겁니다.

ex)

 

 

2. 게임 컨텐츠

1) 스테이지 진행

 

시간에 따른 점수 획득

  • 기본적으로 오른쪽을 이동하면서 장애물을 피하는 게임
  • 오래 버틸수록 높은 점수 획득 (시간에 따른)

 

스테이지에 따라서 더 높은 점수 획득

  • 0점, 1 스테이지
  • 1000점, 2스테이지
  • 위와 같이 점수로 나눠서 스테이지 구분
  • 스테이지가 올라갈수록 시간 당 높은 점수 획득 가능

ex) 1스테이지 = 1점 per 1s, 2스테이지 = 2점 per 1s

 

2) 스테이지에 따라서 더 높은 점수 획득

  • 1스테이지에는 1번 아이템만
  • 2스테이지에는 2번 아이템까지 나오는 것
  • 높은 스테이지의 아이템에서는 더 높은 점수 획득 가능

 

3. 데이터 테이블 만들기

 

1) 스테이지

  ID #NAME SCORE
TYPE int string int
  1000 시작 스테이지(1) 0
  1001 1 100
  1002 2 200
  ... ... ...

 

'#'으로 시작하는 것은 기획 관리용 이름을 의미 합니다.(실제 데이터가 아닙니다)

 

위의 테이블을 JSON 파일 형태로 바꿔보면

 

스테이지 ID 를 PK로 SCORE를 사용하여 각 스테이지를 구분

 

같이 완성 됩니다.

 

이때, version이 있는 이유는 스테이지가 추가될 때,

스테이지 내부 변경 사항이 있을 때 마다 어떤 버전인지

알려주기 위해서 입니다.

 

2) 아이템

  ID #NAME SCORE
TYPE int string int
  1 red 10
  2 yellow 20
  3 purple 30
  ... ... ...

 

3) 아이템해금

  ID STAGE_ID ITEM_ID
TYPE int int int             or           array
  101 1001 1                                 [1]
  201 1002 2                             [1, 2]
  ... ... ...

 

 ITEM_ID에서

Int와 array의 차이는

 

Int만 적을 경우 해당 스테이지에서는 해당 숫자만 나오겠다를 의미하고

array를 적을 경우 해당 스테이지에서 array의 배열안 요소 모두가 나오겠다를 의미 합니다.

 

4. (매우 중요)API 명세서 만들기

 

클라이언트 - 서버가 주고 받을 패킷의 명세 ex) API 명세서

 

 

어떤 기능에 어떤 구조로 보내야 수신측에서는 어떤 구조로 받고

풀어서 어떤 구조를 다시 송신측에 보낼지 구체적으로 작성해야 한다.

 

이유 : 

 

1) 공통 부분(필수 내용물)

필드명 타입 설명
handlerID int 요청을 처리할 서버 핸들러의 ID
userID int 요청을 보내는 유저의 ID
clientVersion string 현재 쿨라이언트 버전("1.0.0)(고정)
playload JSON 요청 내용

 

2) 요청 예시

  • 최초 접속

  • 스테이지 이동
필드명 타입 설명
currentStage int 현재 스테이지
targetStage int 이동하는 스테이지

 

currentStage와 targetStage가 있는 이유는

 

유저가 보내는 현재 스테이지와 서버가 DB에 저장하고 있는 스테이지를

비교해서 유저가 정당하게 스테이지에 있음확인하고,

 

"다음 스테이지 이동을 정당하게 이동할려고 하는가"와

"스테이지가 존재하는가를 서버 입장에서 검증"하기 위해 사용 합니다.

  • 아이템 획득
필드명 타입 설명
itemId int 획득하는 아이템 ID
     

 

만약, itemId가 1이라면 Item JSON에 id가 1인 항목이 있는지 검증하고,

 

있다면 해당 score인 10을 얻게 됩니다.

 

 

그럼 클라이언트의 요청(Request)을 바탕으로

서버는 클라이언트에게 어떤 정보를 

응답(Response)해줘야 하냐면

 

3) 응답 예시

필드명 타입 설명
status enum "success", "fail"
     

 

 

서버가 클라이언트에게 제공하는 내용은 없습니다.

하지만, 요청을 정상 처리했는지 "success"와 "fail"로 알려줍니다.

 

(중요)status를 정수로 사용하고, 

 

성공은 클라이언트와 서버 간 합의된 정수

"~~~~" 오류는 4** 정수

 

로 실패 원인을 더 자세하게 제공할 수도 있다.