학습
PD가 되어보자!
시나리오, 장르, 방향성 정하기
🔷 장르를 정하고 장르에 맞는 서비스 탐색
장르
- 액션 게임
- 어드벤처 게임
- 롤 플레잉 게임(RPG)
- 시뮬레이션 게임
- 전략 게임(RTS)
- 스포츠 게임
- 레이싱 게임
- 퍼즐 게임
- 호러 게임
- 음악/리듬 게임
각 장르에 맞는 서비스 및 구현 가능한 기능과 추천 게임 리스트입니다.
1. 액션 게임
- 서비스 아이디어:
- 빠른 반응과 조작감을 위한 정밀 컨트롤 시스템.
- 리더보드 및 랭킹 시스템 제공.
- PVP 모드와 협동 모드.
- 다양한 캐릭터와 무기의 커스터마이징 기능.
- 추천 게임:
- Devil May Cry 5
- Hades
- Cuphead
2. 어드벤처 게임
- 서비스 아이디어:
- 스토리 분기점 제공 및 플레이어 선택에 따른 다양한 결말.
- 오픈월드에서의 탐험과 수집 시스템.
- 몰입을 돕는 사운드와 시각적 연출.
- 추천 게임:
- The Legend of Zelda: Breath of the Wild
- Life is Strange
- Firewatch
3. 롤 플레잉 게임 (RPG)
- 서비스 아이디어:
- 깊이 있는 캐릭터 성장 시스템과 스킬 트리.
- 멀티플레이를 지원하는 길드 시스템.
- 퀘스트 기반 진행 및 보상 시스템.
- 추천 게임:
- The Witcher 3: Wild Hunt
- Final Fantasy XIV
- Genshin Impact
4. 시뮬레이션 게임
- 서비스 아이디어:
- 현실감을 살린 AI 상호작용.
- 경제 관리 및 자원 관리 시스템.
- 사용자가 원하는 요소를 추가할 수 있는 모드 지원.
- 추천 게임:
- The Sims 4
- Stardew Valley
- Cities: Skylines
5. 전략 게임 (RTS)
- 서비스 아이디어:
- 실시간 대전 시스템.
- 맵 에디터와 커뮤니티 기반 공유.
- AI 난이도 선택 가능.
- 추천 게임:
- Starcraft II
- Civilization VI
- Age of Empires IV
6. 스포츠 게임
- 서비스 아이디어:
- 실제 선수 데이터 기반 시뮬레이션 매치.
- 친구와 함께 즐길 수 있는 로컬 멀티플레이.
- 리그 시스템 및 트레이딩 기능.
- 추천 게임:
- FIFA 23
- NBA 2K24
- Rocket League
7. 레이싱 게임
- 서비스 아이디어:
- 차량 튜닝 및 커스터마이징.
- 다이나믹 날씨 시스템을 통한 현실감 증대.
- 멀티플레이 및 실시간 경기 중계.
- 추천 게임:
- Forza Horizon 5
- Mario Kart 8 Deluxe
- Gran Turismo 7
8. 퍼즐 게임
- 서비스 아이디어:
- 직관적인 조작과 깔끔한 인터페이스.
- 친구와 경쟁할 수 있는 타임어택 모드.
- 난이도 조절 및 힌트 제공.
- 추천 게임:
- Tetris Effect
- Portal 2
- The Witness
9. 호러 게임
- 서비스 아이디어:
- 몰입감을 극대화하는 VR 지원.
- 랜덤으로 생성되는 적 AI 및 환경.
- 정교한 음향효과를 활용한 긴장감.
- 추천 게임:
- Resident Evil Village
- Amnesia: The Dark Descent
- Outlast
10. 음악/리듬 게임
- 서비스 아이디어:
- 다양한 음악 장르를 지원하는 라이브러리.
- 멀티플레이 대결 모드.
- 플레이에 따라 맞춤형 플레이리스트 생성.
- 추천 게임:
- Beat Saber
- Rhythm Heaven
- Osu!
🔹사이드뷰 점핑 액션 게임
ex) 별의 커비, 슈퍼마리오, 메탈 슬러그 점프 점
🔹 플렛폼 게임
※ 어떤 프로젝트를 하기 전에 유명한 비슷한 게임 가저와서 어떻게 구현한건지 글로 정리한 다음에 내거를 만들기
🔷 컨텐츠 구상
- 스테이지가 있는 게임 ( ~점 이상이면 2스테이지, ~점 이상이면 3스테이지...)
- 아이템 획득으로 점수 얻기
1. Stage
🔹시간에 따른 점수 획득
기본적으로 오른쪽을 이동하면서 장애물을 피하는 게임
오래 버틸수록 높은 점수 획득 (시간에 따른)
🔹 스테이지에 따라서 더 높은 점수 획득
0점 , 1스테이지 1000점, 2스테이지
위와 같이 점수로 나뉘어서 스테이지 구분
스테이지가 올라갈수록 시간당 높은 점수 획득 가능
ex) 1스테이지 = 1점 per 1s, 2스테이지 = 2점 per 1s
2. Item
🔹 아이템 종류에 따라 다른 점수 획득
이동 중 아이템 무작위 생성
🔹 스테이지에 따라 생성되는 아이템 구분
1스테이지에는 1번 아이템만, 2스테이지에는 2번 아이템까지 나오는 것
높은 스테이지의 아이템에서는 더 높은 점수 획득 가능
※ 테이블 준비
1. 엑셀로 만들어서 csv로 저장
2. json 파일 만들
🔷 데이터 테이블 만들기 - json
'#'으로 시작하는 것은 기획 관리용 이름
테이블화 하는 것이아니라 기획단계에 그냥 적는 것
스테이지
ID | #NAME | SORE | |
type | INT | STRING | INT |
1000 | 시작 스테인지(1) | 0 | |
1001 | 2 | 100 | |
1002 | 3 | 200 | |
1003 | 4 | 300 |
ID 1001로 가면 스테이지(2)가 실행됨
{
"name": "stage", // 테이블 이름
"version": "1.0.0", // 테이블 버전
"data": [
{ "id": 1000, "score": 0 },
{ "id": 1001, "score": 100 },
{ "id": 1002, "score": 200 },
{ "id": 1003, "score": 300 },
{ "id": 1004, "score": 400 },
{ "id": 1005, "score": 500 },
{ "id": 1006, "score": 600 }
]
}
아이템
ID | #NAME | score | |
TYPE | int | string | int |
1 | red | 10 | |
2 | yellow | 20 | |
3 | purple | 30 | |
4 | blue | 40 |
{
"name": "item",
"version": "1.0.0",
"data": [
{ "id": 1, "score": 10 },
{ "id": 2, "score": 20 },
{ "id": 3, "score": 30 },
{ "id": 4, "score": 40 },
{ "id": 5, "score": 50 },
{ "id": 6, "score": 60 }
]
}
아이템 해금
ID | STAGE_ID | ITEM_ID | |
TYPE | int | int | int |
101 | 1001 | 1 | |
201 | 1002 | 2 |
{
"name": "item_unlock",
"version": "1.0.0",
"data": [
{ "id": 101, "stage_id": 1001, "item_id": 1 },
{ "id": 201, "stage_id": 1002, "item_id": 2 }
]
}
ex)여러 스테이지에서 아이템을 사용하고 싶다
아이템
ID | #NAME | score | |
TYPE | int | string | array |
1 | red | {1000,1001} | |
2 | yellow | ||
3 | purple | ||
4 | blue |
아이템 해금
ID | STAGE_ID | ITEM_ID | |
TYPE | int | int | array |
101 | 1001 | [1] | |
201 | 1002 | [1,2] |
회의 시간 예 - '서버에서 매핑하기 힘들고 조합하기 힘들어요. 새로 테에블을 만듭시다'
🔷 패킷 구조 설계
클라이언트 - 서버가 주고 받을 패킷의 명세 ex) API명세서
1) 공통 부분
필드 명 | 타입 | 설명 |
handlerID | int | 요청을 처리할 서버 핸들러의 ID |
userId | int | 요청을 보내는 유저의 ID |
clientVersion | string | 현재 클라이언트 버전 (”1.0.0”) (고정) |
payload | JSON | 요청 내용 |
2) 요청 예시
{
handlerId: 0,
userId: 0,
clientVersion: "1.0.0",
payload: {},
}
스테이지 이동
필드 명 | 타입 | 설명 |
currentStage | int | 현재 스테이지 |
targetStage | int | 이동하는 스테이지 |
{
// 공통 부분
handlerId: 0,
userId: 0,
clientVersion: "1.0.0",
payload: {
// 스테이지 정보
currentStage: 0,
targetStage: 0,
}
}
currentStage : 유저가 존재하는 현재 스테이지와 DB의 스테이지를 비교하여 '이 사람이 여기에 있는 게 맞구나'를 확인하기 위함
targetStage : 1. 이동하려는 스테이지를 정당하게 이동하려 하는가
2. 그 스테이지가 실제로 존재하는 가
를 서버입장에서 검증하기 위해 정보를 받음
아이템 획득
필드 명 | 타입 | 설명 |
itemId | int | 획득하는 아이템 ID |
{
// 공통 부분
handlerId: 0,
userId: 0,
clientVersion: "1.0.0",
payload: {
// 아이템 정보
itemId: 0,
}
}
ex) { itemId : 1} 을 받았을 때 점수 10을 더해주기 위해
1. { itemId : 1} 의 데이터(아이템)이 있는지 검증
2. 있다면 10점 저장
3) 응답 예시
필드 명 | 타입 | 설명 |
status | enum | “success”, “fail” |
{
"status": "success",
}
서버가 유저에게 뭔가 주는 것 없음. 처리 여부를 respons 함.
성공은 "status": "success" / 실패는 "status": “fail”
그 외 필요한 핸들러
게임 시작 / 게임 종료
…
※ 요약
- 시나리오, 장르, 방향성 결정
- 장르 선정: 액션, RPG, 퍼즐 등
- 비슷한 게임 분석 후 구현 방식 정리
- 콘텐츠 구상
- 스테이지 설계: 점수 기반 스테이지 이동 및 시간당 점수 획득
- 아이템 설계: 아이템별 점수 차등 부여 및 스테이지별 아이템 제한
- 데이터 설계
- 테이블화: JSON 또는 CSV 활용
- 아이템/스테이지 정보 구조화
- 패킷 구조 설계
- 클라이언트-서버 간 명세
- 스테이지 이동, 아이템 획득 처리 로직 포함
※ 기억할 것
- 비슷한 게임의 시스템을 조사하고 이를 참고해 기획.
- 데이터 테이블은 초기 기획 단계에서 명확히 작성해야 개발 과정에서 수정 부담 감소.
- 서버 검증을 통해 유효성을 확보하는 설계 필요.
※ Tip
- 기획 단계에서 스테이지와 아이템의 관계를 시각화해보면 구조 설계가 용이.
- JSON 테이블의 버전을 명시하여 나중에 업데이트 관리를 체계적으로 수행.
- 패킷 설계 시, 공통 필드를 먼저 정의하고 이를 기반으로 요청/응답 구조를 세분화.
- 팀 협의 시 기획 의도와 데이터 활용 방안을 명확히 설명해 공통 이해도를 높이기.
'내일배움 강의 > 강의-게임서버' 카테고리의 다른 글
5. 서버 로직 개발 (0) | 2024.12.12 |
---|---|
4. 개발 환경 세팅 (2) | 2024.12.11 |
2. HTTP, TCP, 웹소켓 (2) | 2024.12.11 |
1. 게임 개발의 시작 (1) | 2024.12.10 |