javascript - 使用 JavaScript 编程 Aces

标签 javascript loops ecmascript-6 blackjack playing-cards

我在计算 Ace 值应该是 1 还是 11 时遇到问题。

例如: 手牌({值: 11, 花色: 2}, {值: 3, 花色: 1}) ;//Ace-3 可能是 4 或 14,具体取决于下一张牌

我当前的计算无法处理这个问题,而且我似乎无法想出实现它的方法。

首先我用卡片对象填充一个数组

function fillDeck(numDecks, deck){
    cardNum = 0;
    for(let i =0;i <= numDecks -1; i++ ){
        for(let s = 1; s<=4; s++){
            for(let v = 2; v <= 14; v++){
                cardType = calcCard(v);
                value = calcValue(v);
                suit = calcSuit(s);
            deck[cardNum] = new Card(value, s, 'img/cards/' + cardType + '_' + 'of_' + suit + '.png');
            cardNum++;
            }
        } 
    }
} 
Deck = [];
fillDeck(5, Deck);

发牌:

 function dealCards(player, dealer, deck){
    player.push(deck.pop());
    dealer.push(deck.pop());
    player.push(deck.pop());
    dealer.push(deck.pop());

}

然后是我计算手牌的方法

 function calcHand(Hand){
    var handValue = 0;
    for(let hand of Hand){
        handValue += hand.value;
    }
    return handValue;
}

这只是返回值 14。

下次点击时

Hand.push(Deck.pop());

我将一张新卡添加到手牌

Hand({value: 11, suit: 2}, {value: 3, suit: 1}, {value: 2, suit: 1});

现在牌是 6/16

但是如果第三张或第四张牌是 A 该怎么办?这就是我在解决这个问题时不断遇到的问题。

我当前的解决方案是:

 while(calcHand(playerHand) <=16 && dealerHand[1].value > 6 | calcHand(playerHand) <12)
    {
            var currentCard = Deck.pop();


            if(currentCard.value === 11 && calcHand(playerHand) < 11){
                currentCard.value = 11;
                console.log("Ace = 11 : Value : " + currentCard.value);

            }else if(currentCard.value === 11 && calcHand(playerHand) >= 11){
                currentCard.value = 1;
                console.log("Ace = 1 : Value : " + currentCard.value);
            }
            if(hasAce && (calcHand(playerHand) + currentCard.value) > 21 && 
               playerHand.map(x => x.value).indexOf(11) > -1){ 
               var acePosition = playerHand.map(x => x.value).indexOf(11);
               playerHand[acePosition].value = 1;

            }
        playerHand.push(currentCard);
        }

最佳答案

一旦您意识到这永远不是一个选择,那么在二十一点中处理 A 就很简单了。规则是:

  1. A 算一。时期。现在合计这手牌。
  2. 如果总数小于 12,并且手牌至少包含 一张 A,加上 10 并标记为“软”。

完成。

关于javascript - 使用 JavaScript 编程 Aces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128497/

相关文章:

javascript - 在 ES6 中执行一个函数时,什么时候进行词法分析和解析(这采用什么形式)?

import - 如何在 TypeScript 中使用 es6 语法导入 .html 片段

javascript - Paper.js 鼠标事件不工作

Python While循环计算最小公倍数

javascript - 如何在 JavaScript 中检查 boolean HTML 属性的当前值?

javascript - 如何使用for循环创建javascript对象

ios - 在遍历NSArray时获取对象的特定实例的索引。 (重复将其弄乱了)

javascript - ESLint:let 的第一个实例导致 "unexpected token"错误

javascript - 从文件 : Javascript? 读取字符串

javascript - jQuery:访问(多).attr()