2024. 9. 19. 22:24ㆍ[Node.js_6기 본캠프 TIL]
🧧 플레이어를 뽑으려면, 일단 카드팩을 사야하는데
기존에 배웠던 아이템 구매 API는 정해진 품목을 장바구니에 담는 것처럼 품목과 수량을 정해서 req를 보내면 인게임 머니를 차감하고 인벤토리에 아이템을 추가하는 방식이었다. 이번에는 확률형 아이템을 구매하도록 만들어야 하는데, 기존에 구성한 DB의 player 테이블은 구매한 아이템의 결과값일 뿐 정작 구매해야 할 플레이어 카드팩 관련 정보를 불러올 곳이 없었다. 풋살 게임을 진행하기 위해 사용되는 player 데이터만 고려하고, 그 player를 구매하고 inventory에 넣는 과정에 사용될 데이터를 고려하지 못한 것이다.
가챠 게임들을 보면 다양한 카드팩을 시즌별로 판매한다. 풋살 온라인 프로젝트에서도 플레이어 카드의 종류나 확률에 따라 다양한 카드팩을 구현할 수도 있는 만큼, type 컬럼을 통해 구분할 수 있도록 설계해보았다.
DB에 packs 테이블을 추가하고 보니, 가챠 API가 작동하기 위해서는 미리 카드팩에 대한 정보를 등록해놔야 했다. 카드팩 등록/조회 API가 추가로 필요하게 된 것이다. 복잡한 API가 아니기 때문에, 개인 프로젝트에서 사용하던 아이템 구매/조회 API를 활용하기로 했다.
🎰 가챠 확률 세팅하기
로그라이크 게임을 만들 때, 확률 옵션을 사용해본 적이 있기 때문에 확률 자체를 세팅하는 것은 어렵지 않았다. 다만 기존과 같이 function 형태로 가져오면, 코드가 다소 어수선한 감이 있기 때문에 const randomNum으로 변형해보기로 했다.
const randomNum = Math.floor(Math.random() * 100);
if (randomNum < 23) {
result = 'C등급 player 1';
} else if (randomNum >= 23 && randomNum < 46) {
result = 'C등급 player 2';
} else if (randomNum >= 46 && randomNum < 62) {
result = 'B등급 player 1';
} else if (randomNum >= 62 && randomNum < 78) {
result = 'B등급 player 2';
} else if (randomNum >= 78 && randomNum < 87) {
result = 'A등급 player 1';
} else if (randomNum >= 87 && randomNum < 96) {
result = 'A등급 player 2';
} else if (randomNum >= 96 && randomNum < 98) {
result = 'S등급 player 1';
} else {
result = 'S등급 player 2';
}
문제는 유저가 구매한 카드팩의 결과값에 따라 인벤토리에 player의 형태로 저장하는 로직을 어떻게 구성해야 할지 모르겠다는 점이다. 개인 프로젝트에서는 정해진 아이템 품목과 수량에 따라 인벤토리에 하나씩 밀어넣는 방식이었는데, 이번 팀 프로젝트에서는 고정값인 카드팩의 type과 확률에 따라 달라지는 player를 어떻게 연결해주어야 할지 고민이 필요하다.
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
[SQL 코드카타] 가격대 별 상품 개수 구하기(MySQL) (1) | 2024.09.24 |
---|---|
CH 3 풋살 온라인 프로젝트 - 트러블 슈팅 0923 (1) | 2024.09.23 |
CH 3 풋살 온라인 프로젝트 - 트러블 슈팅 0913 (1) | 2024.09.13 |
CH3 아이템 시뮬레이터 과제 - 트러블슈팅 0911 (0) | 2024.09.12 |
CH 3 아이템 시뮬레이터 과제 - 트러블슈팅 0910 (1) | 2024.09.10 |