0

我昨天在这里的用户写了这段代码,但我无法理解它。我通过交易功能的第 9 行理解了所有内容,它从 52 个数字中创建了一张随机卡,但在下一行我不明白这是做什么的。有人可以解释一下这段代码的作用,以便我可以修改它并扩展它吗?

//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)];
};
4

4 回答 4

0

一副牌中有 52 张牌。13 种不同的价值与 4 种不同的套装(俱乐部/钻石...)。注意 4 * 13 = 52。模数 13 只是为了确保从套牌变量中选择一个值,而忽略花色。

于 2013-06-04T20:43:40.493 回答
0

你有一个只有 13 个项目的数组——卡片。0 到 12。

如果你取任何数字% 13,你总是会得到一个介于 0 和 12 之间的值——该数字除以 13 的余数。52 的牌组% 13基本上将牌组从花色 + 牌减少到只有牌。

这也可以写成Math.ceil(Math.random() * 13) + 152 而不是 52。但是,如果需要将代码扩展为也有一套西装,那么您可能会

于 2013-06-04T20:44:48.870 回答
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),您将需要使用它(Math.floor(randomcard / 13) % 4)

于 2013-06-04T20:45:20.243 回答
0

代码只有一半有效。模数很难选择从牌堆中抽出的牌类型,但不是牌的花色。此外,代码没有说明已经发了一张特定的牌(它从未从牌组中移除),因此多个玩家可能拥有相同的牌。

请参阅此页面以获取有关 JavaScript 中的甲板结构外观的信息:

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

于 2013-06-04T20:49:20.233 回答