JSFiddle - React, Tailwind, and code Playground
by b1ncer
JavaScript
/**
* Created by b1ncer on 07/01/2017.
*/
const baseWeight = [100, 50, 25, 13, 6, 3]
/**
* 根据区间和配置的权重计算基础几率
* @param interval [min, max]
*/
function calBaseProbability(interval) {
const weight = baseWeight.slice(interval[0] - 1, interval[1] - 1)
const sumWeight = weight.reduce((a, b) => a + b)
return weight.map(w => w / sumWeight)
}
/**
* 计算加成几率
* @param sumQuality 总品质
* @param f 转换公式
* @returns {Number}
*/
function calAddedProbability(sumQuality, f) {
return f(sumQuality)
}
/**
* 计算最终产出品质
* @param baseProbability 基础几率
* @param addedProbability 加成几率
*/
function getQuality(baseProbability, addedProbability) {
const finalProbability = baseProbability.map(base => base + addedProbability)
for (let i = finalProbability.length - 1; i > 0; i--) {
if (Math.random() < finalProbability[i]) {
return i
}
}
return 0
}
const f = x => Math.sqrt(0.00007714 * x * x + 0.02057143)