Javascript检查变量.然后每秒获得++

Javascript Check variable.Then gain ++ per second

本文关键字:检查 变量 然后 Javascript      更新时间:2023-09-26

我有一个问题,我想检查变量。如果为0,则在1.5秒后获得++。如果是10,那么在0.4秒后获得++。它的复杂。它真的不起作用。我的代码到目前为止:

     if(road == 1){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},1400);}
else if(road == 2){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},1300);}
else if(road == 3){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},1200);}
else if(road == 4){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},1100);}
else if(road == 5){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},1000);}
else if(road == 6){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},900);}
else if(road == 7){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},800);}
else if(road == 8){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},600);}
else if(road == 9){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},400);}
else if(road == 10){setInterval(function(){stamina = stamina+1;document.getElementById("stamina").innerHTML = stamina;},200);}
else{setInterval(function(){stamina++;document.getElementById("stamina").innerHTML = stamina;},1500);}

修路的代码是这样的:

function build_road() {
    if ((wood + tavern) >= 29 && stone > 4 && road < 10) {
        road++;
        document.getElementById("road_count").innerHTML = road;
        wood = (wood + tavern) - 20;
        stone = stone - 5;
        document.getElementById("wood").innerHTML = wood;
        document.getElementById("stone").innerHTML = stone;
        exp = exp + 20;
        var x = document.getElementById("PROGRESS");
        x.setAttribute("value", exp);
        x.setAttribute("max", max);
        if (exp == 100) {
            exp = 0;
            level++;
            document.getElementById("level").innerHTML = level;
        }
        alert("Congratulations,You've create a Road,Now you gain stamina slightly faster.");
    }
    else {
        alert("You need: 30Wood,5Stone .Maximum 10 Roads.")
    }
}
  1. 创建可重用的函数(这通常是一个很好的做法,当你在一段代码中遇到困难时,把它分解成小函数):

    var staminaIncreaseTimer = null;
    function configureStaminaIncrease(delay) {
        if (staminaIncreaseTimer !== null)
            clearInterval(staminaIncreaseTimer);
        staminaIncreaseTimer = setInterval(function () {
            increaseStamina();
        }, delay);
    }
    function increaseStamina() {
        stamina += 1;
        document.getElementById("stamina").innerHTML = stamina;
    }
    
  2. 使用数组的解决方案(由Jay Harris建议)

    var roadIndex = road-1;
    var ROAD_DELAYS = [1400, 1300, 1200, /*...*/];
    var DEFAULT_DELAY = 1500;
    if (roadIndex < ROAD_DELAYS.length) {
        configureStaminaIncrease(ROAD_DELAYS[roadIndex]);
    } else {
        configureStaminaIncrease(DEFAULT_DELAY);
    }
    
  3. switch代替if-elseif混乱的解决方案:

    switch (road) {
        case 1:
            configureStaminaIncrease(1400);
            break;
        case 2:
            configureStaminaIncrease(1300);
            break;
        case 3:
            configureStaminaIncrease(1200);
            break;
        //and so on...
        default:
            configureStaminaIncrease(1500);
    }