SOURCE

class GameValue {

    /**
     * 数据验证(金币)
     */
    testGoldValue() {
        console.log("等级", "仓库", "过关奖励", "塔升级消耗")

        for (let level = 1; level <= 90; level++) {
            console.log(
                level
                ,this.goldWarehouse(level)
                ,this.goldPassReward(level)
                ,this.goldTowerUpgrade(level)
            )
        }

        for (let level of [500, 1000, 5000, 10000]) {
            console.log(
                level
                ,this.goldWarehouse(level)
                ,this.goldPassReward(level)
                ,this.goldTowerUpgrade(level)
            )
        }
    }
    
    /**
     * 生成通用的基础值
     * level:关卡的等级或塔的等级
     */
    goldBaseValue(level){
        var cut = 10;
        var x = parseInt(level/cut);
        var value = ((((x+1)*5+level*5)+45)/500)*12*60;
        return value;
    }

    /**
     * 金币仓库总价值
     * level: 当前关卡
     */
    goldWarehouse(level) {
        return Math.ceil(this.goldBaseValue(level)*8);
    }

    /**
     * 通过关卡后金币奖励总数
     * level: 当前关卡
     */
    goldPassReward(level) {
        return Math.ceil(this.goldBaseValue(level));
    }

    /**
     * 防御塔升级的金币消耗
     * levelTotal: 所有防御塔所有属性等级之和
     */
    goldTowerUpgrade(levelTotal) {
        return Math.ceil(this.goldBaseValue(levelTotal/12)*8/6);
    }

    _Cycle = 200;//每多少关数值增幅跃升
    _IncreasePro = 0.05;//每关增加的比例
    /**
     * 得到最终攻击力或血量
     * powerBase:1级攻击力或血量
     * level:防御塔等级或怪物等级
     */
    powerBaseValue(powerBase,level){
        //取得周期间隔数
        var c = Math.floor((level-1)/_Cycle);

        //得到不同关卡的起点关卡
        var l0 = Math.floor((level-1)/_Cycle)*_Cycle + 1;

        //得到起点关卡的power值
        var p0 = powerBase * Math.pow(_Cycle*_IncreasePro+1, c);

        //得到最终的power
        var p = p0 + (level-l0)*_IncreasePro*p0;

        return p;
    }

    _TowerAttack = [30,20,20,20];//塔1级攻击力
    /**
     * 防御塔攻击力
     * towerId: 防御塔ID
     * level: 防御塔当前攻击等级
     * stoneIncPro:魂石增加的攻击百分比
     */
    towerAttack(towerId, level, stoneIncPro) {
        //得到基础power
        var powerBase = _TowerAttack[towerId];

        var p = powerBaseValue(powerBase,level)*(1+stoneIncPro);
        return p;
    }

    _TowerSpeed = [3,1,1,1];//塔1级攻击速度
   _IncreaseSpeedPro1 = 0.001;//前201级每级的提升比例
   _IncreaseSpeedPro2 = 0.0001;//前202-2201级每级的提升比例
   _IncreaseSpeedPro3 = 0.00001;//前2202-22001级每级的提升比例
   
    /**
     * 防御塔攻速
     * towerId: 防御塔ID
     * level: 防御塔当前攻速等级
     */
    towerSpeed(towerId, level) {
        var s0 = _TowerSpeed[towerId];

        var s = s0;
        if(level<=201){
            s = s0 + (_IncreaseSpeedPro1*(level-1))*s0;
        }else if(level>201 && level<=2201){
            s = s0 + (_IncreaseSpeedPro1*(201-1))*s0;
            s = s + (_IncreaseSpeedPro2*(level-201))*s0;
        }else{
            s = s0 + (_IncreaseSpeedPro1*(201-1))*s0;
            s = s + (_IncreaseSpeedPro2*(2201-201))*s0;
            s = s + (_IncreaseSpeedPro3*(level-2201))*s0;
        }

        return s;
    }

    _TowerCrit = 750;//塔1级暴击
    _IncreaseCritPro = 0.05;//每级增加的暴击(抗暴击)比例
    /**
     * 防御塔暴击
     * towerId: 防御塔ID
     * level: 防御塔当前暴击等级
     */
    towerCrit(towerId, level) {
        var c = _TowerCrit + (level-1)*_IncreaseCritPro*_TowerCrit;

        return c;
    }

    _EnemyHealth = [500,1000,300,800,2500,5000,1500,4000,500,1000,300,800,2500,5000,1500,4000];//怪物1级血量
    /**
     * 敌人生命值
     * enemyId: 敌人ID
     * level: 当前关卡
     */
    enemyHealth(enemyId, level) {
        //得到基础power
        var powerBase = _EnemyHealth[enemyId];

        var p = powerBaseValue(powerBase,level);
        return p;
    }

    _EnemyUnCrit = 5000;//怪物1级抗暴击
    /**
     * 敌人抗暴击
     * enemyId: 敌人ID
     * level: 当前关卡
     */
    enemyUnCrit(enemyId, level) {
        var u = _EnemyUnCrit + (level-1)*_IncreaseCritPro*_EnemyUnCrit;

        return u;
    }
}

new GameValue().testGoldValue()

console 命令行工具 X clear

                    
>
console