일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 맛사지
- 스쿠버다이빙
- 마사지
- 구분
- plugin
- 정규식
- 특수문자
- JavaScript
- 스노쿨링
- ES6
- js
- 막탄
- autocomplate
- webpack.config.js
- 삼성무선청소기제트
- 중고거래사기
- 네이버페이사기
- Hooks
- 중고나라사기
- 정직하게사세요
- 여행
- 중고나라
- Webpack
- 사기
- REACT
- 자동완성
- 유효성검사
- 세부
- 해외여행
- Today
- Total
Ryu.log
[ Riot Games API 활용 전적 검색 App 06] - MMR 구현 본문
mmr 점수란? 해당게임내에서 자신의 기여도 ? 손 빠르기 ? 라고 이해하면 되려나..?
아무튼 이 mmr 이란 것은 lol에서 무진장 중요한 기준? 이다.
mmr에 따라서 상대가 매칭되는데 이 mmr을 계산하는 식은 Riot 만이 알고 있다.. 물론 비공개이다.
나는 최대한 op.gg에 맞게 mmr을 맞추었다.
- mmr점수 구현 v
01. MMR 점수 구현
op.gg에서는 MMR 점수가 위와같이 표현된다.
이 점수를 통해서 자신의 실력을 가늠할 수 있으며, MMR이 높을수록 높은 티어의 상대와 매칭이된다.
op.gg에서는 MMR을 구현 함에 있어서 매경기마다 점수를 매긴 뒤 (예를 들자면 K/D/A, 와드 설치 수, 연승횟수 등등..)
최근 몇경기의 평균을내서 저렇게 평균 MMR점수를 출력 하는 것 같다.
하지만 내가 그렇게한다면 엄청난 시간과 분석과... 음.. op.gg처럼 상용서비스가 아니기때문에 비슷하게만 구현해볼 것이다.
const defaultMMR = [ { "mmr" : 1000, "tier" : "bronze", "rank": 5 }, { "mmr" : 1050, "tier" : "bronze", "rank": 4 }, { "mmr" : 1100, "tier" : "bronze", "rank": 3 }, { "mmr" : 1150, "tier" : "bronze", "rank": 2 }, { "mmr" : 1200, "tier" : "bronze", "rank": 1 }, { "mmr" : 1250, "tier" : "silver", "rank": 5 }, { "mmr" : 1300, "tier" : "silver", "rank": 4 }, { "mmr" : 1350, "tier" : "silver", "rank": 3 }, { "mmr" : 1400, "tier" : "silver", "rank": 2 }, { "mmr" : 1450, "tier" : "silver", "rank": 1 }, { "mmr" : 1500, "tier" : "gold", "rank": 5 }, { "mmr" : 1550, "tier" : "gold", "rank": 4 }, { "mmr" : 1600, "tier" : "gold", "rank": 3 }, { "mmr" : 1650, "tier" : "gold", "rank": 2 }, { "mmr" : 1700, "tier" : "gold", "rank": 1 }, { "mmr" : 1750, "tier" : "platinum", "rank": 5 }, { "mmr" : 1800, "tier" : "platinum", "rank": 4 }, { "mmr" : 1850, "tier" : "platinum", "rank": 3 }, { "mmr" : 1900, "tier" : "platinum", "rank": 2 }, { "mmr" : 1950, "tier" : "platinum", "rank": 1 }, { "mmr" : 2000, "tier" : "diamond", "rank": 5 }, { "mmr" : 2050, "tier" : "diamond", "rank": 4 }, { "mmr" : 2100, "tier" : "diamond", "rank": 3 }, { "mmr" : 2150, "tier" : "diamond", "rank": 2 }, { "mmr" : 2200, "tier" : "diamond", "rank": 1 }, { "mmr" : 2250, "tier" : "master", "rank": 1 }, { "mmr" : 2700, "tier" : "challenger", "rank": 1 }, ]
먼저 각 티어 마다 위와같이 기본 MMR을 설정한다.
그리고 나의 랭크와 일치하는 MMR값을 가지고온다.
예를 들어서 현재 나의 랭크가 골드 5라면 MMR은 1500인 것이다.
허나 이정도로만 한다면 이사람이 잘하는지 못하는지는 알 수 없을 것이다.
그리하여 아래와 같은 함수를 만들었다.
const GetUserMMR = { getWinningRateMMR : (winningRate) => (winningRate - 50) * 20, getTierMMR : (league, rank) => defaultMMR.filter(item => item.tier === league.tier.toLowerCase() && item.rank === rank), getCommntData : (mmrData, league, rank) => { let myMMRcomment = ''; let checkMMR = mmrData - GetUserMMR.getTierMMR(league, rank)[0].mmr; if(checkMMR <= -50){ myMMRcomment = 'MMR이 매우 낮습니다! 팀원들에게 민폐입니다!'; }else if(checkMMR < 0){ myMMRcomment = '평균보다 MMR이 낮습니다. 강등에 주의하세요.'; }else if(checkMMR < 25){ myMMRcomment = 'MMR이 보통 수준입니다. 분발하세요.'; }else if(checkMMR < 0){ myMMRcomment = '평균보다 MMR이 높습니다. 자질이 보이는군요?'; }else{ myMMRcomment = '매우 좋습니다! 이 리그의 수준이 아니시군요?'; } return myMMRcomment; } }
getWinningRateMMR () 함수는 사용자의 랭크 승률을( 승률을 구하는 법은 (승리 / 전체게임) * 100 이다 ) 파라미터로 받는다.
getWinningRateMMR () 함수를 잘 보면 결과 값은 +값일 수도있고 - 값일 수도있다 승률에 따라 추가점수를 구하는 공식인것이다.
getTierMMR () 함수는 리그데이터와 랭크데이터를 파라미터로 받은 뒤,
처음에 선언된 defaultMMR 변수에 담긴 Data에서 본인의 티어/랭크 와 맞는 MMR 값을 리턴 해준다.
getCommentData () 함수는 기본 MMR과 위의 두함수에서 도출해낸 결과값 MMR을 비교하여 적당한 코멘트를 리턴 해준다.
이러한 방식을 통해서 출력된 MMR값은 아래와 같이 Component에 구성된다.
'Prev-content' 카테고리의 다른 글
[ NodeJS 02 ] REPL과 hello node! (0) | 2018.07.09 |
---|---|
[ NodeJS 01 ] NodeJS 란? & 설치방법 (0) | 2018.07.08 |
[ Riot Games API 활용 전적 검색 App 05] - 선호하는 챔피언 라인 (2) | 2018.07.05 |
[ Riot Games API 활용 전적 검색 App 04] - 리스트 구현 및 스타일링 (0) | 2018.07.05 |
[ Riot Games API 활용 전적 검색 App 03] - React 프로젝트 시작 (0) | 2018.07.05 |