我在计算 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 就很简单了。规则是:
- A 算一。时期。现在合计这手牌。
- 如果总数小于 12,并且手牌至少包含 一张 A,加上 10 并标记为“软”。
完成。
关于javascript - 使用 JavaScript 编程 Aces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128497/