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** 정수
로 실패 원인을 더 자세하게 제공할 수도 있다.
'Node 강의 > 심화' 카테고리의 다른 글
1-6 유저 접속 관리 ( 점프 게임 ) (0) | 2024.09.27 |
---|---|
1-5 서버 로직 개발(데이터 테이블 로드)( 점프 게임 ) (0) | 2024.09.26 |
1-4 개발 환경 세팅 ( 점프 게임 ) (0) | 2024.09.26 |
1-2 HTTP와 TCP 그리고 웹소켓 (0) | 2024.09.26 |
1-1 게임 개발의 시작 (0) | 2024.09.26 |