用JavaScript编程Aces

时间:2017-11-06 01:27:37

标签: 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

但是如果第3张或第4张牌是王牌呢?这就是我遇到解决这个问题的问题。

我目前的解决方案是:

 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);
        }

1 个答案:

答案 0 :(得分:0)

一旦你意识到它永远不是一个选择,处理二十一点中的aces很简单。规则是:

  1. Aces算一个。期。现在总掌握。
  2. 如果总数小于12,则手至少包含    一个ace,加上10并标记为“软”。
  3. 完成。