2017-10-20 44 views
0

Je fais un jeu de cartes en tant que mission et je suis bloqué au dernier obstacle. Le problème que j'ai est que j'ai besoin d'un contrôle de condition pour voir et déterminer la valeur d'une carte dépendante du résultat. L'ACE dans ce jeu pourrait valoir 1 ou 14 en fonction de ce qui est le plus bénéfique pour le résultat. Le jeu est une sorte de blackjack mais chaque carte a sa valeur nominale en dehors de l'ACE qui peut valoir 1 et 14. Je peux vérifier et mettre la valeur à 1 ou 14 si la somme des cartes est 7 ou Moins. 7 + 14 = 21 et le plus bénéfique pour le jeu. Mais je ne peux pas obtenir le code correct pour le contraire: si la première carte est une ACE et que sa valeur est fixée à 14 et la deuxième carte est un 9, le résultat sera 23 et le joueur est éclaté. J'ai besoin ACE à une valeur de 1, alors ... La valeur par défaut d'un ACE est 1. Le code que j'ai à ce jour est:Inverser la valeur de consigne avec la clause de condition

this.dealCard = function() { 
    this.dealedHand.push(shuffledDeck.shift()) 
    let sum = 0 
    this.dealedHand.forEach(function (card) { 
    if (card.value === 1 && sum <= 7) { 
     card.value = 14 
    } //Another condition clause to reverse that and let the ACE be 1 again... 
    sum = sum + card.value 
    }) 
    this.dealedHandSum = sum 
} 

for (let i = 0; i < 2; i++) { 
    this.dealCard() 
} 

while (this.dealedHandSum < player.stopAtValue) { 
    this.dealCard() 
} 

Cette fonction est d'additionner les cartes décalées dans la main.

Tout le reste fonctionne comme il se doit, mais je veux éviter que cela se produise:

Johanna: A♠ K♣ 27 
Johanna got 27 and is busted! 
+2

double possible de [Y at-il une façon élégante de faire face à l'As dans le Blackjack?] (Https: // stackoverflow .com/questions/837951/est-il-un-moyen-de-traiter-avec-l'ac-au-blackjack) – GottZ

Répondre

1

compte uniquement aces à leur valeur la plus élevée, puis les réduire si le joueur est en panne. Cela signifie que vous devez garder une trace de combien aces ils ont, mais ce n'est pas trop dur:

this.dealCard = function() { 
    this.dealedHand.push(shuffledDeck.shift()) 
    let sum = 0 
    let aces = [] // Keep track of each ace in the hand 
    this.dealedHand.forEach(function (card) { 
     if (/* Card is Ace */) { 
      card.value = 14 // Count each ace at its highest value 
      aces.push(card) 
     } 
     sum = sum + card.value 
    }) 
    while (aces.length && sum > 21) { // If busted, and we have aces, reduce their value 
     sum -= 13 
     let ace = aces.shift() 
     ace.value = 1 
    } 
    this.dealedHandSum = sum 
} 
+0

Eh bien, nous sommes presque là. Cela fonctionne comme il se doit, mais si je lance le débogueur et qu'un as apparaît, cette carte obtient le card.value = 14 et le numAces = 1. Si nous obtenons alors un éclat, il soustrait 13 de la somme mais la carte conserve sa valeur si 14 et quand finalement le résumer, nous sommes encore éclatés. –

+0

J'ai modifié le post pour refléter cela. Au lieu de simplement garder le nombre d'as, je suppose que nous devons suivre les cartes elles-mêmes. Donc, si vous obtenez un as, poussez-le dans un tableau, puis, s'il est éclaté, réduisez la somme, supprimez un as du tableau et changez sa valeur en un. – CRice

+0

Merci. Travailler très bien avec un as dans la main mais avec deux on obtient ceci: A ♠ A ♥ 10 ♥ 25 qui devrait être 1 + 1 + 10 = 12 au lieu de 1 + 14 + 10 = 25 –