From c49dac5234901ceddc13847213d664811eb834c0 Mon Sep 17 00:00:00 2001 From: luying Date: Tue, 19 Jul 2022 16:08:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8D=E5=B0=86=E6=93=82=E5=8F=B0=EF=BC=9A?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=96=B9=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/ladderService.ts | 36 ++++++++--------------- 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/game-server/app/services/ladderService.ts b/game-server/app/services/ladderService.ts index fb5d9f820..c1aa86b6c 100644 --- a/game-server/app/services/ladderService.ts +++ b/game-server/app/services/ladderService.ts @@ -139,8 +139,8 @@ function randOppRankNumbers(myRank: number) { let dicLadderMatch = getDicLadderMatchByMyRank(myRank); if(!dicLadderMatch) return new Array(5).fill(3001); - let beforeRanks = randomRank(true, myRank, dicLadderMatch.rangeBeforeMax, dicLadderMatch.rangeBeforeNum, dicLadderMatch.gap.min, dicLadderMatch.gap.max); - let afterRanks = randomRank(false, myRank, dicLadderMatch.rangeAfterMax, dicLadderMatch.rangeAfterNum, dicLadderMatch.gap.min, dicLadderMatch.gap.max); + let beforeRanks = randomRank(true, myRank, dicLadderMatch.rangeBeforeMax, dicLadderMatch.rangeBeforeNum); + let afterRanks = randomRank(false, myRank, dicLadderMatch.rangeAfterMax, dicLadderMatch.rangeAfterNum); let topTen = getNumberArr(1, 10); let ranks = [...topTen, ...beforeRanks, ...afterRanks]; @@ -160,32 +160,20 @@ export function getNumberArr(from: number, to: number) { return arr; } -function randomRank(isBefore: boolean, myRank: number, range: number, len: number, gapMin: number, gapMax: number) { - if(gapMin > range) gapMin = range; - if(gapMax < range) gapMax = range; - let arr: number[] = [], result = myRank; - while(arr.length < len) { - let min = isBefore? result - gapMax: result + gapMin; - let max = isBefore? result - gapMin: result + gapMax; - let num = getRandValueByMinMax(min, max, 0); // [min, max) - if(isOver(isBefore, myRank, range, num)) break; - result = num; - arr.push(result); +function randomRank(isBefore: boolean, myRank: number, range: number, len: number) { + if(range == 0 || len == 0) return []; + let arr: number[] = []; + let n = Math.floor(range / len); + for(let i = 0; i < len; i++) { + let rand = getRandValueByMinMax(n * i + 1, n * (i + 1) + 1, 0); // 因为这个的范围是[min, max),而想要的是 (n * i, n * (i - 1)] + if(rand) { + let ratio = isBefore? -1: 1; + arr.push(myRank + ratio * rand); + } } return arr; } -// 超出匹配范围 -function isOver(isBefore: boolean, myRank: number, range: number, result: number) { - if(isBefore) { - // console.log('before', result, myRank, range, myRank - range, result < myRank - range) - return result < myRank - range; - } else { - // console.log('after', result, myRank, range, myRank + range, result > myRank + range) - return result > myRank + range; - } -} - export function checkRank(myRank: number, targetRank: number) { let dicLadderMatch = getDicLadderMatchByMyRank(myRank); if(!dicLadderMatch) {