Как напечатать правильное значение случайного массива в операторе If/Else в моем текстовом приключении?

Я пытаюсь сделать текстовое приключение, которое будет выводить правильный оператор журнала консоли на основе определенного ввода. Я хочу, чтобы, если гоблин нанесет достаточно урона от атаки, чтобы защита игрока была меньше 0, журнал консоли распечатал «Гоблин нанес» x количество «ущерба!». Вот мой список переменных в верхней части кода:

//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);

Внизу моего кода вызывается конкретное условие if/else до тех пор, пока здоровье гоблина (var gobHp) не упадет до нуля после того, как игрок атакует гоблина в предыдущем разделе кода. Вот:

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!");
        }
}

Но независимо от того, сколько раз я запускаю код, журнал консоли всегда печатает «Гоблин нанес 0 повреждений!» даже если атака гоблина минус защита игрока меньше 0. Если защита игрока меньше 0, журнал консоли должен распечатать правильное количество урона.


person Darien Springer    schedule 01.11.2015    source источник
comment
Что выводит console.log(rand)   -  person DarkBee    schedule 02.11.2015
comment
Он выводит либо 0, либо 1.   -  person Darien Springer    schedule 02.11.2015
comment
Тогда def никогда не будет < 0   -  person DarkBee    schedule 02.11.2015
comment
Посмотрите на этот stackoverflow.com/questions/1527803/ для генерации случайных значений между нижней и верхней границами   -  person DarkBee    schedule 02.11.2015
comment
Почему def никогда не бывает меньше 0?   -  person Darien Springer    schedule 02.11.2015
comment
Потому что ваш rand равен 0 или 1? 1 - 1= 0. 0 не ‹ 0   -  person DarkBee    schedule 02.11.2015
comment
Math.random() генерирует значение (с плавающей запятой) от 0 до 1, которое вы умножаете на длину вашего массива. Пол округлит это. <0.5становится 0, иначе 1   -  person DarkBee    schedule 02.11.2015


Ответы (1)


Как следует из комментариев, ваш генератор случайных чисел должен включать нижнюю и верхнюю границы:

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

Комментарий:

как указано в другом (удаленном) ответе, вы должны пересчитывать случайные значения при каждой атаке гоблина, иначе у гоблина всегда будет одинаковая сила атаки.

person DarkBee    schedule 01.11.2015