과제 제출까지 -1 일

 

 

 

실제 게임에 필요한 선수 데이터를 모아서 보내줘야하는데,

이전에 구현했던 코드에서 변경된 사항이 있다. 

 

아군 플레이어와 상대 플레이어를 구분하기 위해

사실상 동일한 과정을 2회씩 반복하고 있다.

슬슬 이런 형태의 코드를 보면 기분이 다운되는 자신을 발견할 수 있었다...

 

 

개선 후

한번의 쿼리문에서 아군과 상대 player 를 한번에 조회하도록 수정해 보았다.

 

이 과정에서 닥친 문제는,

어떻게 아군과 상대 선수를 구분할수 있을까? (피아식별의 어려움)

 

order by accountId asc  ??

=> 아군, 적군에 상관없이 accountId 가 빠른 순으로 정렬되어

피아 식별이 불가능

 

모르긴 몰라도, 분명 이 문제를 해결하는 방법이 있을것 같기에 계속 구글링을 해 보았다.

 

https://priming.tistory.com/68

역시나 답은 있었다 !

 

order by field() 를 사용하면, 

해당 필드의 특정한 값을 우선 조회하도록 할 수 있었다.

단, desc 를 해줘야 맨 위로 오기 때문에 주의 !! (잘못 사용시, 특정 데이터가 오히려 결과에서 제외된다.)

 

 

즉, 본문 내용처럼

위와 같은형태로 자신의 선수들이 최 우선 조회되도록 할 수 있다는 것이다.

 

where 이후 남는 데이터는 6개가 되기 때문에 order by field의 작동 방식이 불량하더라도

크게 문제가 되지 않을것이다. 

 

 

결과적으로 게임에 보내질 데이터...

 

정상적인 경우, 배열의 length 는 항상 6이고,

index 0~2 는 아군 player

index 3~5 는 상대 player 선수를 담게된다 .

추가로 각 팀에서 playerStrength가 낮은 순으로 정렬된다. (선수 포지션 배치에 이용됨)

 

 

 

강화 테이블 개선

강화 1당 모든능력치 10 씩 고정 증가, 고정 성공확률인 강화 형태에서,

강화수치가 늘어날 수록 점점 가충치가 더 붙는 형태로 변경했고,

강화 단계가 높을수록 강화확률이 낮아지게 설정될 수 있도록 enhances 테이블 데이터를 추가했다.

 

 

강화 능력치를 적용해야 하는 시점에서

enhances 테이블의 데이터가 모두 필요하기 때문에,

findMany로 전부 불러와야한다.

위는 조회에 더해질 능력치를 불러와야하기 때문에, 

increaseValue 만 select 하고 있다.

 

 

조회 API 에서,

강화가 0단계 일때는 enhanceId  1 의 increaseValue = 0 을 가져와야 한다

 

 

 

강화 API에서,

0강화 -> 1강화로 강화를 하는 경우 enhanceId 2 의 successRate 를 가져와야한다. 

 

 

 

코드 직관성이 매우 떨어지는 상태이지만, 다듬을 시간이 부족하다 !!

게다가, 선수 강화 부분은 과제 필수기능에서 거리가 멀기 때문에 ! 

 

 

 

 

 

 

+ Recent posts