Я пытаюсь закодировать игру в кости в javascript, используя Math.random() для генерации значений костей и массива для хранения текущих значений каждого индивидуальная смерть.for loop, Math.random() не работает по назначению
Проблемы, с которыми я столкнулся, - это 1), массив заканчивается с шестью числами, и цикл работает только пять раз, и 2) я не могу понять, как получить Math.random(), чтобы возвращать разные числа на каждом броске кубиков.
Вот рассматриваемая функция:
var array = []
function rollDice() {
for (var i = 0; i <= 4; i++) {
var roll = Math.floor(Math.random() * 6) + 1;
array[i] = roll;
//array.splice(i, 1, roll);
}
}
Вы можете увидеть, что «я» итерацию от нуля до четырех в цикле (который равен пять циклов), и на каждом цикле другое случайное число генерируется и вставляется в массив в эквивалентном месте.
Что касается количества элементов в массиве: если я запустил код, как написано выше, я получу что-то вроде этого: [1, 2, 3, 4, 5, undefined]. Если я запустил его, используя прокомментированную строку с функцией «сращивания» (которая должна удалить значение, сохраненное в месте «i», и заменить его новым значением), я получу [1, 2, 3, 4, 5 , 6]. Как это происходит, если цикл работает только пять раз?
Как трудностью я имею получать случайные числа, чтобы изменить более надежно: Я попытался следующие в моей петле ...
var roll;
while (roll === hand[i] || roll === null) {
roll = Math.floor(Math.random() * 6) + 1;
}
... в надежде, что «бублик» будут держать вращающиеся случайные числа, пока они не появятся с другим, но не кубиками. У кого-нибудь есть предложения?
EDIT: Я добавил явное объявление массива, так как не дал достаточно ясного представления о том, что мой массив был явно объявлен ранее.
Попробуйте 'array [array.length] = roll;'. Кроме того, перед циклом вам не хватает строки 'var array = [];'. Вместо этого используйте 'for (var roll = i = 0, array = []; i <= 4; i ++)', что является предпочтительным способом. И удалите 'var' на' var roll = [...]; '. –
Ваш код выглядит хорошо, проверьте его на [скрипке] (http://jsfiddle.net/8gaq9q4u/) –
Вам нужно убедиться, что вы объявляете свой массив; вы не опубликовали эту часть своего кода. Цикл 'while' не работает, вероятно, потому, что' roll' начнется как 'undefined', а не' null', поэтому цикл не будет запущен вообще. – Pointy