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)