Javascript 使用条件子句反向设置值

Javascript 使用条件子句反向设置值,javascript,if-statement,conditional-statements,blackjack,Javascript,If Statement,Conditional Statements,Blackjack,我正在做一个纸牌游戏作为一项任务,我被困在最后一个障碍。我的问题是,我需要一个条件控件来查看和确定依赖于结果的卡的值。这场比赛中的王牌价值可能是1或14,这取决于对结果最有利的因素。这个游戏有点像黑杰克,但每张牌都有它的面值,除了王牌之外,王牌可以值1和14。我可以检查并将值设置为1或14,如果拾取的卡的总数为7或更少。7+14=21,对游戏最有利。但是我不能得到相反的正确代码:如果第一张牌是a,它的值设置为14,第二张牌是9,那么结果将是23,玩家将被击溃。我需要这张王牌值1那么。。。ACE的

我正在做一个纸牌游戏作为一项任务,我被困在最后一个障碍。我的问题是,我需要一个条件控件来查看和确定依赖于结果的卡的值。这场比赛中的王牌价值可能是1或14,这取决于对结果最有利的因素。这个游戏有点像黑杰克,但每张牌都有它的面值,除了王牌之外,王牌可以值1和14。我可以检查并将值设置为1或14,如果拾取的卡的总数为7或更少。7+14=21,对游戏最有利。但是我不能得到相反的正确代码:如果第一张牌是a,它的值设置为14,第二张牌是9,那么结果将是23,玩家将被击溃。我需要这张王牌值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()
}

只需将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
}

可能是重复的好吧,我们就快到了。它正常工作,但如果我运行调试器,出现ace,则该卡将获得该卡。value=14,numAces=1。如果我们最终被破坏,它会从总数中减去13,但如果14,卡仍然保留它的值,当我们最终总结时,我们仍然被破坏。我编辑了这篇文章来反映这一点。我想我们需要跟踪实际的卡片本身,而不仅仅是保留A的数量。因此,如果你得到一个ace,将其放入一个数组中,如果被破坏,则减少总和,从数组中删除一个ace,并将其值改回1。谢谢。一张王牌在手上的表现非常好,但有两张王牌,我们得到的是:A♠ A.♥ 10♥ 25应该是1+1+10=12,而不是1+14+10=25Hmm。我看不出有什么理由不能用两个A。是否有其他代码未发布,正在再次执行求和?此过程将收到一个错误,错误为:无法设置指向ace.value=1的未定义属性“value”。Johanna:8♠ A.♣ A.♥ 7.♥ 17我也有这些循环来启动卡片交易:-----对于let I=0;i<2;i++{this.dealCard}---------而this.dealedHandSumthis.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 }