기본 구현 과제
- 회원가입/로그인
- 캐시 구매
- 선수 뽑기
- 나만의 팀 꾸리기
- 축구 게임
도전 구현 과제
- 승리/패배 시 게임 점수 조정
- 유저 랭킹 조회
- 점수를 기반으로 정렬하도록 구현
- 유저 경기 기록 조회
- 유저 A와 유저 B의 경기 기록을 Time을 기준으로 정렬시켜 최근 기록이 보이도록 구현
- 점수 기반 자동 매치 메이킹
- 현재 플레이를 할 유저의 점수를 기준으로 +-100점인 유저를 상대로 매치 메이킹
- 선수 강화
- 같은 강화 수의 선수 카드가 2장 있어야지 강화 가능, 강화 성공 시 +1 / 강화 실패 시 -3, 3강 이하일 땐 1강 이하로 떨어지지 않고 7강 이상일 땐 10% 확률로 0강
- 선수 데이터에 강화 컬럼을 추가해서 기능 구현
- 1~4강까지는 각 강화마다 능력치 +1
- 5~7강까지는 각 강화마다 능력치 +2
- 8~9강까지는 각 강화마다 능력치 +3
- 10강은 능력치 +4
- 같은 강화 수의 선수 카드가 2장 있어야지 강화 가능, 강화 성공 시 +1 / 강화 실패 시 -3, 3강 이하일 땐 1강 이하로 떨어지지 않고 7강 이상일 땐 10% 확률로 0강
+++ 도전 구현 과제
- 토너먼트 8팀 이벤트
- 이벤트 개최 시 한 시간 안에 8명의 유저가 자신의 팀으로 토너먼트 참가를 등록하고 한 시간 뒤에 8명의 유저가 모두 모였을 시 대진표 편성
- 토너먼트 매치는 Quater -> semi final -> final 순으로 진행
- 토너먼트 매치 테이블이라는게 존재하는데, RoundName과 teamA, teamB 등의 컬럼이 존재
- 각 라운드에 그리고 각 편성된 대진표에 맞게 진출할 수 있도록 RoundName은 quater-1, -2 이런식으로 저장
- 같은 대진의 유저 두명 중 한명이 토너먼트 매치 API를 호출하면 해당 유저의 준비 상태가 ready가 되고 10초 뒤 상대방 유저의 준비 상태를 체크, 상대방 유저가 준비되지 않았다면 부전승 처리
- 두 명의 유저 모두 준비가 완료된 상태라면 동시에 게임이 진행
- teamA에 배치된 유저는 게임 play 함수를 호출하여 플레이 기록을 만들고, teamB에 배치된 유저는 매치 history를 통해 경기 결과 읽기
- setTimeout 함수로 딜레이를 주고 트랜잭션의 read committed 레벨을 통해 데이터를 수정 중에 읽지도 못하게 해 지연되도록 해서 구현
- 우승자가 결정됐을 경우 종료 API을 호출하여 1, 2, 3등에게 차등된 보상 지급
https://www.notion.so/teamsparta/65ec228fcab74412b8a7f5478951afa8?v=352cfffb63a74f31b4fe2f78265ab2d8