使用条件子句

时间:2017-10-20 19:28:59

标签: javascript if-statement conditional-statements blackjack

我正在做一个纸牌游戏作为一项任务,我陷入了最后的障碍。我遇到的问题是我需要一个条件控制来查看和确定取决于结果的卡的值。该游戏中的ACE可能值1或14,取决于对结果最有利的内容。游戏是某种黑色插孔,但每张卡的面值除了ACE之外都值1和14.我可以检查并将值设置为1或14,如果所选卡的总和为7或减。 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!

1 个答案:

答案 0 :(得分:1)

只计算最高值的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
}