我一直在尝试使用Javascript实现一些纸牌游戏。在下面的片段中,我只想从牌组顶部拉出两张牌并将其交给玩家(简化逻辑如下)
function deck() {
var faceCards = [['jack', 11],['queen', 12],['king', 13]];
return faceCards;
}
function removeCard() {
var singleCard = deck().pop();
var faceValue = singleCard[0];
return faceValue;
}
var cardPair = [removeCard(),removeCard()];
console.log(cardPair);

然而, faceCards 阵列在弹出卡片后仍然是相同的,这意味着下一张卡片与cardPair阵列中的卡片相同。
我需要反映我在里面使用的效果 removeCard()函数反映在deck()函数中。
我想我可以在全局范围内创建faceCards数组,或者使用'这个'在某种程度上(我并不是很想要,因为我对它并不熟悉)。如何从另一个函数内部更新一个函数?非常感谢您阅读本文。
答案 0 :(得分:2)
您的错误在这里:
var singleCard = deck().pop()
对deck()
的调用会在每次调用时创建一个 new 数组,并且不会重复返回相同的数组。
如果您还不想完整的OO,请考虑至少将套牌作为参数传递给removeCard()
函数,即
function removeCard(deck) {
var singleCard = deck.pop();
var faceValue = singleCard[0];
return faceValue;
}
var deck = newDeck();
var pair = [ removeCard(deck), removeCard(deck) ];
但最终 应该更长时间使用完整的OO解决方案,然后您的使用可能会变为:
var deck = new Deck();
var pair = [ deck.takeCard(), deck.takeCard() ];
这个问题的实施超出了这个特定问题的范围。
答案 1 :(得分:2)
每次运行deck()
时,您都会创建一个新数组。尝试将套牌保存在一个数组中并在此处运行pop
:
function deck() {
var faceCards = [['jack', 11],['queen', 12],['king', 13]];
return faceCards;
}
function removeCard(fromDeck) {
var singleCard = fromDeck.pop();
var faceValue = singleCard[0];
return faceValue;
}
var thisDeck = deck();
var cardPair = [removeCard(thisDeck),removeCard(thisDeck)];
console.log(cardPair);