我在计算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);
}
答案 0 :(得分:0)
一旦你意识到它永远不是一个选择,处理二十一点中的aces很简单。规则是:
完成。