ich in ein Problem bin mit der Berechnung, ob der Ace Wert 1 sein soll oder 11.Programmierung Asse in JavaScript
Zum Beispiel: Hand ({Wert: 11, Anzug: 2}, {Wert: 3 , Farbe: 1}); // Ace-3 könnte 4 oder 14 sein, abhängig von der nächsten Karte, die kommt
meine aktuelle Berechnung behandelt das nicht und ich kann nicht scheinen, mit einer Möglichkeit zu kommen, es zu implementieren.
Erstbefüllung ich ein Array mit Kartenobjekten
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);
Deal Karten:
function dealCards(player, dealer, deck){
player.push(deck.pop());
dealer.push(deck.pop());
player.push(deck.pop());
dealer.push(deck.pop());
}
Dann ist meine Art und Weise ein Hands
function calcHand(Hand){
var handValue = 0;
for(let hand of Hand){
handValue += hand.value;
}
return handValue;
}
dies einfach nur zu berechnen, gibt den Wert 14.
so auf dem nächsten Hit
Hand.push(Deck.pop());
ich eine neue Karte auf die Hand
Hand({value: 11, suit: 2}, {value: 3, suit: 1}, {value: 2, suit: 1});
jetzt hinzufügen, die Hand ist 16.06
Aber was, wenn die 3. oder 4. Karte ist ein Ass ? Hier komme ich immer wieder auf ein Problem mit der Lösung dieses Problems zu sprechen.
Meine aktuelle Lösung ist:
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);
}
Ihre Summierungslogik muss speziell über Asse wissen. Dein erster Pass sollte Asse als ihren maximalen Wert zählen (11) und wenn du über das Limit schiebst, dann klopfe einen runter auf 1. Wenn du immer noch über dem Limit bist, klopfe den nächsten auf 1 und so weiter. Entweder das oder Sie berechnen alle möglichen Summen, die Ihre Hand haben könnte, und basieren Ihre Spielentscheidung auf der Grundlage der besten Summe. – jfriend00
Haben Sie versucht, das Ass als Array zu definieren? [1, 11] '? – guest271314
Wenn der Spieler keinen Treffer mehr möchte, muss er wählen, was er für den Ace-Wert haben möchte. – PHPglue