4

特定の入力に基づいて正しいコンソール ログ ステートメントを出力するテキスト アドベンチャーを作成しようとしています。ゴブリンが十分な攻撃ダメージを与えてプレイヤーの防御力が 0 未満になった場合、コンソール ログに「ゴブリンがやった」×「ダメージ!」が出力されるようにしたい。コードの上部にある変数リストは次のとおりです。

//player stats
var atk= 1;
var def= 1;
var hp= 10;
var mp= 0;
var block= 1;
var magic= 0;
//goblin stats
var gobAtk= [3,4,5];
var gobDef= 1;
var gobHp= 5;
var gobMagDef= 0;
var rand= Math.floor(Math.random()* gobAtk.length);

コードの最後で、プレイヤーがコードの前のセクションでゴブリンを攻撃した後、ゴブリンの HP (var gobHp) がゼロにならない限り、特定の if/else 条件が呼び出されます。ここにあります:

else {
    def-=rand;
        if(def<0) {
            hp-=Math.abs(rand);
            console.log("The Goblin did"+ " "+ Math.abs(rand)+ " "+ "Damage!");
                if(hp<=0) {
                    console.log("The Goblin defeated you! You died");
                    console.log("Game Over.");

                }

        }
        else {
            console.log("The Goblin did 0 damage!");
        }
}

しかし、コードを何度実行しても、コンソール ログには常に「The Goblin did 0 Damage!」と出力されます。ゴブリンの攻撃がプレイヤーの防御をマイナスして 0 未満になったとしても。プレイヤーの防御が 0 未満の場合、コンソール ログは正しいダメージ量を出力するはずです。

4

1 に答える 1

2

コメントからわかるように、乱数発生器には下限と上限を含める必要があります。

function getRandomArbitrary(min, max) {
   return Math.random() * (max - min) + min;
}
var rand = getRandomArbitrary(3,5)

コメント :

他の(削除された)回答が述べたように、ゴブリンの攻撃ごとにランダムを再計算する必要があります。そうしないと、ゴブリンは常に同じ攻撃力になります

于 2015-11-01T23:18:41.240 に答える