我正在做一个纸牌游戏作为作业,但我陷入了最后一个障碍。我遇到的问题是我需要一个条件控制来查看并确定取决于结果的卡片的值(value)。此游戏中的 ACE 值可能为 1 或 14,具体取决于对结果最有利的值。该游戏是某种黑 jack 游戏,但除了 ACE 之外,每张牌都有其面值,可以同时值 1 和 14。如果所选牌的总和为 7 或,我可以检查并将值设置为 1 或 14。较少的。 7+14=21,对游戏最有利。但我无法获得相反的正确代码:如果第一张牌是 ACE,其值设置为 14,而第二张牌是 9,那么结果将是 23,并且玩家被淘汰。那么我需要 ACE 的值为 1...ACE 的默认值为 1。到目前为止我的代码是:
this.dealCard = function () {
this.dealedHand.push(shuffledDeck.shift())
let sum = 0
this.dealedHand.forEach(function (card) {
if (card.value === 1 && sum <= 7) {
card.value = 14
} //Another condition clause to reverse that and let the ACE be 1 again...
sum = sum + card.value
})
this.dealedHandSum = sum
}
for (let i = 0; i < 2; i++) {
this.dealCard()
}
while (this.dealedHandSum < player.stopAtValue) {
this.dealCard()
}
这是一个对移入手牌的牌进行求和的函数。
其他一切都正常工作,但我想防止这种情况发生:
Johanna: A♠ K♣ 27
Johanna got 27 and is busted!
最佳答案
只需计算 A 的最高值,然后在玩家被淘汰时减少 A 的值。这意味着您必须跟踪他们有多少张 A,但这并不太难:
this.dealCard = function () {
this.dealedHand.push(shuffledDeck.shift())
let sum = 0
let aces = [] // Keep track of each ace in the hand
this.dealedHand.forEach(function (card) {
if (/* Card is Ace */) {
card.value = 14 // Count each ace at its highest value
aces.push(card)
}
sum = sum + card.value
})
while (aces.length && sum > 21) { // If busted, and we have aces, reduce their value
sum -= 13
let ace = aces.shift()
ace.value = 1
}
this.dealedHandSum = sum
}
关于javascript - 使用条件子句反转设定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856060/