首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中编程王牌

在JavaScript中编程王牌
EN

Stack Overflow用户
提问于 2017-11-06 09:27:37
回答 1查看 311关注 0票数 1

我遇到了一个计算Ace值应该是1还是11的问题。

例如: Hand({value: 11,suit: 2},{value: 3,suit: 1});//根据下一张牌的不同,Ace-3可能是4或14

我目前的计算不能处理这一点,而且我似乎想不出实现它的方法。

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

代码语言:javascript
复制
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);

交易卡:

代码语言:javascript
复制
 function dealCards(player, dealer, deck){
    player.push(deck.pop());
    dealer.push(deck.pop());
    player.push(deck.pop());
    dealer.push(deck.pop());

}

然后我用我的方法计算一只手

代码语言:javascript
复制
 function calcHand(Hand){
    var handValue = 0;
    for(let hand of Hand){
        handValue += hand.value;
    }
    return handValue;
}

这只是返回14的值。

所以在下一次打击中

代码语言:javascript
复制
Hand.push(Deck.pop());

我将一张新牌添加到手中

代码语言:javascript
复制
Hand({value: 11, suit: 2}, {value: 3, suit: 1}, {value: 2, suit: 1});

现在手是6/16

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

我目前的解决方案是:

代码语言:javascript
复制
 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);
        }
EN

回答 1

Stack Overflow用户

发布于 2017-11-07 02:33:51

在21点中处理王牌是很简单的,一旦你意识到它从来都不是一个选择。规则如下:

  1. 王牌算一把。句号。现在计算手牌的总和。
  2. 如果总和小于12,并且手牌至少包含一个A,则添加10并将其标记为“soft”。

好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47128497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档