2013-06-04 3 views
0

У меня был этот код, написанный пользователем здесь вчера, и у меня возникли проблемы с его пониманием. Я понимаю все по строке 9 функции сделки, она создает случайную карту из 52 номеров, но на следующей строке я не понимаю, что это делает. Может кто-нибудь объяснить, что делает этот код, чтобы я мог его модифицировать и расширять?Понимание функции с модулем в Javascript

//Creates the deck 
var Ace = 1; 
var Face = 10; 
var deck = [Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Face, Face, Face]; 
/*Creates a deal function that can deal cards to each player. 
Use object_name.property_name = deal() to call this function.*/ 
var deal = function() { 
    var randomcard = Math.ceil(Math.random() * 52) + 1; 
    return deck[Math.floor(randomcard % 13)]; 
}; 
+0

Может также просто сделать 'Math.Floor (Math.random() * 13)', потому что это трюк палубе с только 13 картами. –

ответ

0

Ну, давайте сначала исправить код. Исходный код дает вам рабочий результат, но он делает это запутанным образом. Он не выбирает значение от 0 до 51, что было бы естественным делом, оно выбирает значение от 2 до 53. (Результат по-прежнему полезен для получения значения от 0 до 12 для использования для значения, но получение костюма для карты не очень прямо вперед.)

var randomcard = Math.floor(Math.random() * 52); 
return deck[randomcard % 13]; 

оператора по модулю получает напоминание от деления, так что результат из выражения получит значение карты. До 12 он возвращает сам номер, затем в 13 он снова начинается с 0.


Чтобы получить индекс для костюма для карты, вы должны использовать Math.floor(randomcard/13). С исходным случайным значением (от 2 до 53) вам понадобилось бы вместо этого использовать .

0

В колоде имеется 52 карты. 13 различных значений с 4 различными костюмами (клубы/бриллианты ...). Примечание 4 * 13 = 52. Модуль 13 находится там, чтобы убедиться, что одно из значений из переменных колоды выбрано, и костюм игнорируется.

0

У вас есть массив из 13 предметов - карт. 0 до 12.

Если взять любое число и % 13 его, вы всегда получите значение от 0 до 12 - остаток от деления этого числа на 13. Палуба 52 затем % 13 в основном уменьшает палубу от костюма + карты до карты.

Это могло быть в равной степени были написаны, как Math.ceil(Math.random() * 13) + 1 вместо 52. Однако, если код должен быть расширен, чтобы также иметь костюм, то вы могли бы, вероятно,

0

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

Смотрите эту страницу для получения информации о том, как структура колода выглядит в JavaScript:

http://www.brainjar.com/js/cards/default2.asp

Смежные вопросы