과제 목표 : 보스레이드 PVE 컨텐츠 관련 아래 6가지 라우터를 작성하기
기능 구현 세부사항 결정(추가적인 기능 고려 X)
랭킹에 올라갈 totalScore 계산
- record1 점수 + record2 점수를 사용한 것을 랭킹 비교에 사용
-
이렇게 구성할 경우 많이 시도한 사람이 유리한 구조의 랭킹 구조를 갖게 된다.
➡️ 위의 경우처럼 많이 시도한 사람이 랭킹을 독점하는 경우를 막기위해서 같은 레벨의 레이드를 플레이어 한명은 하루에 한 번씩만 시도할 수 있는 제약조건을 두는 방법이 있다. 이 제약조건을 두게 된다면 계속 게임을 시도해서 다른 사람이 시도할 수 있는 기회를 막는 방식의 플레이를 방지할 수 있다.
- 플레이하고 패배할 경우에도 플레이 횟수를 카운트 해서 제약을 건다.
-
추가적으로 게임에 대한 충성도를 볼 수 있는 방법으로 열심히 매일하는 플레이어에게 높은 랭킹을 보장할 수 있는 방법이 될 수 있다.
게임 종료
- 클라이언트에서 종료 이벤트가 발생하였을때 보스레이드 종료 api가 호출
- 보스가 죽었음 = 승리했음
- 시간 = 종료 시간
- 보스가 죽고 && 종료시간이 < 게임플레이시간 → 점수를 받는다.
- 종료시간이 > 게임플레이시간 → 클라이언트에서 자동으로 게임이 종료된다. ( 보스가 살았다 )
- 제한시간 내에 클리어한 경우,
예외처리) 제한시간 내에 클리어하지 못해서 종료 시간이 입력되지 않은 경우 예외처리
출입가능 상태 판단에 대한 로직
- 레이드 레코드의 시작시간과 종료시간이 입력된 내용을 확인하여 시작은 되었으나 종료가 되지 않은 필드를 발견하게 되면 이 상태는 출입이 불가능한 상태라고 판단 canEnter 를 false로 반환하게 한다.
- enteredUserId는 이렇게 판별할때 종료가 되지 않은 필드가 있는 레이드레코드 필드에서의 유저 아이디를 사용
게임 점수 계산
- 승리 : 랜덤한 점수로 정함
- 패배 : 랜덤한 점수로 정함
ex)
level1인 경우, 최대 점수 20점 승리조건 10점
랜덤으로 0~20 중에서 점수를 추출하여 10~20점은 승리로 점수 기록
=> (점수 X 9) -1 = 플레이 시간
(제한시간 내에 10점 이상 기록했다고 생각하고 게임 종료)
0~10점이 추출될 경우 패배로 점수 기록
(제한시간 내에 10점을 넘기지 못했다고 생각하고 게임 종료)
❗️1차 모델링