0

あまり高度ではないプログラミングの質問があります。何らかの理由で、次のコードを実行すると、setTimeout メソッドは最初に呼び出されたときにのみ一時停止します。再度呼び出されると、setTimeout はその関数を実行する前に一時停止を作成しません。なぜこれが起こっているのか、これを修正する方法を知っている人はいますか?

ちなみに、各実行の前に一時停止する while ループを作成することは可能ですか? 私のコードは以下です。

var slaying = true;
var youHit = Math.floor(Math.random()*4 + 1);
var damageThisRound = Math.floor(Math.random()*5 + 1);
var totalDamage = 0;
var timer1 = null;


function swing(percentOfMiss) {

この if ステートメントは、パラメーターを 25 で割った値を取ります。youHit はもともと 1 から 4 までの整数を生成するため、パラメーターを 25 に設定すると、4 分の 1 (25%) のショットでドラゴンを逃すことになります。50 に設定されている場合、4 分の 2 (50%) の確率でドラゴンを逃します。

欠落の可能性を高めるには、関数が呼び出されるときにパラメーター番号を上げます。*/

if (youHit <= parseFloat(percentOfMiss) / 25) {     
    //youHit is set to 0, or false
    youHit = 0;
} else {

youHit が生成した乱数が等号の右側の数値よりも大きい場合、youHit は 1、つまり true に設定されます。

    youHit = 1;
}

}

関数の目的: 戦闘ラウンドを開始します。ドラゴンに命中したかどうか、どれだけのダメージを与えたか、ドラゴンが死んでいるかどうかを確認します。2 秒ごとに新しい戦闘ターンを開始します。最後の戦闘ターンで、「ゲーム オーバー」をコンソールに記録します。

function attack(roundTime) {
if (slaying) {
    if (youHit) {
        console.log("You hit the dragon!");
        totalDamage += damageThisRound;
        console.log("You did " + damageThisRound + " damage this round.");
        if (totalDamage >= 4) {
            console.log("You slew the dragon! Congrats!");
             //If you killed the dragon, stop slaying by breaking the while loop...
            slaying = false;
            //...and call the next combat turn. This will log "Game Over".
            timer1 = setTimeout(attack, roundTime);
        } else {
            //Otherwise if the dragon's still alive, set new damage for this round...
            damageThisRound = Math.floor(Math.random()*5 + 1);
            //...see if you hit the dragon...
            youHit = Math.floor(Math.random()*4 + 1); 

...そして、attack() を思い出してください。攻撃は roundTime で指定された時間後に呼び出されます。これにより、プログラムにラグが生じ、戦闘ターンの錯覚が生じます.*/

            timer1 = setTimeout(attack, roundTime);
        }    
    } else {
        //If you miss, the dragon kills you...
        console.log("You missed... and the dragon killed you. Sorry.");
        //... and we break the while loop by setting slaying to false...
        slaying = false;
        //...and call next combat turn. This will log "Game Over".
        timer1 = setTimeout(attack, roundTime);
    }
} else {

slaying を false に設定すると、次の (そして最後の) ターンにゲーム オーバーが出力されます。

    console.log("Game Over");
}

}

ファイアスイングと攻撃機能

swing(25);
attack(1500);
4

0 に答える 0