javascript - 使用条件子句反转设定值

标签 javascript if-statement conditional-statements blackjack

我正在做一个纸牌游戏作为作业,但我陷入了最后一个障碍。我遇到的问题是我需要一个条件控制来查看并确定取决于结果的卡片的值(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/

相关文章:

javascript - HtmlWebpackPlugin 注入(inject)相对路径文件,这些文件在加载非根网站路径时会中断

javascript - React-leaflet:如何基于geojson设置缩放

c - 变量和多线程的奇怪问题

c - 我的 if 语句在 while 循环中不起作用。执行一次后退出循环

php - 从一个条件中选择多个值 (PHP/MySQL)

r - 如何在 ifelse 中设置 FALSE 条件以使其保持原始值

java - 为什么不使用 signalAll 激活等待线程?

javascript - JS date() 返回不正确的日期

javascript - Angular 显示/隐藏 ng View 之外的 div

ios - 重写一些基本的 swift 代码,使用大的 if 语句