带条件子句的反向设置值

Reverse set value with condition clause

我正在做一个纸牌游戏作为一项任务,我卡在了最后一个障碍。我遇到的问题是我需要一个条件控制来查看和确定一张卡片的价值取决于结果。此游戏中的 ACE 可能值 1 或 14,具体取决于对结果最有利的情况。该游戏是某种黑杰克游戏,但每张牌除了 ACE 外都有其面值,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,但这并不难:

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
}