blackjack logic written in vue
https://luna-development.net/blackjack/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.3 KiB
137 lines
3.3 KiB
class Hand { |
|
drawCardToUser() { |
|
let vue = this; |
|
|
|
let drawnCard = vue.cards.shift(); |
|
vue.usersHand.push(drawnCard); |
|
|
|
if (drawnCard.ace && vue.handScore > 10) { |
|
drawnCard.points = 1; |
|
} |
|
|
|
if ((vue.handScore + drawnCard.points) > 21) { |
|
let aceCount = this.handIncludesAces(this.usersHand); |
|
console.log(aceCount + ' aces should be decreased in value'); |
|
} |
|
|
|
vue.handScore += drawnCard.points; |
|
} |
|
|
|
drawCardToDealer() { |
|
let vue = this; |
|
|
|
let drawnCard = vue.cards.shift(); |
|
vue.dealersHand.push(drawnCard); |
|
|
|
if (drawnCard.ace && vue.dealerScore > 10) { |
|
drawnCard.points = 1; |
|
} |
|
|
|
if ((vue.dealerScore + drawnCard.points) > 21) { |
|
let aceCount = this.handIncludesAces(this.dealersHand); |
|
console.log(aceCount + ' aces should be decreased in value'); |
|
} |
|
|
|
vue.dealerScore += drawnCard.points; |
|
} |
|
|
|
handIncludesAces(hand) { |
|
let aceCount = 0; |
|
|
|
hand.forEach((card) => { |
|
if (card.ace === true) { |
|
aceCount++; |
|
} |
|
}); |
|
|
|
return aceCount; |
|
} |
|
|
|
handHasBlackJack(score) { |
|
return score === 21; |
|
} |
|
|
|
isPlus(score) { |
|
return score > 21; |
|
} |
|
|
|
startRound() { |
|
if (this.bet > this.money) { |
|
alertify.notify('Not enough money for bet.'); |
|
return false; |
|
} |
|
|
|
this.money -= this.bet; |
|
|
|
this.initiated = true; |
|
this.endRound(); |
|
|
|
this.roundActive = true; |
|
|
|
this.drawCardToUser(); |
|
this.drawCardToDealer(); |
|
this.drawCardToUser(); |
|
this.drawCardToDealer(); |
|
|
|
if (this.handHasBlackJack(this.dealerScore)) { |
|
this.dealerWon(); |
|
} |
|
|
|
if (this.handScore === 21) { |
|
this.pass(); |
|
} |
|
} |
|
|
|
drawAnotherCard() { |
|
this.drawCardToUser(); |
|
|
|
if (this.isPlus(this.handScore)) { |
|
alertify.notify('Hand is plus, you lose.') |
|
this.roundActive = false; |
|
} |
|
} |
|
|
|
pass() { |
|
if (this.dealerScore === this.handScore) { |
|
this.roundActive = false; |
|
alertify.notify('Draw!'); |
|
this.draw(); |
|
} else if (this.dealerScore > 21) { |
|
this.roundActive = false; |
|
alertify.notify('Dealer is plus, you win'); |
|
this.win(); |
|
} else if (this.dealerScore > this.handScore) { |
|
this.roundActive = false; |
|
alertify.notify('Dealer Wins'); |
|
} else if (this.dealerScore < 17) { |
|
this.roundActive = false; |
|
this.drawCardToDealer(); |
|
this.pass(); |
|
} else if (this.handScore > this.dealerScore && this.handScore < 22) { |
|
this.roundActive = false; |
|
alertify.notify('You win ' + this.bet * 1.5 + '!'); |
|
this.win(); |
|
} |
|
} |
|
|
|
draw() { |
|
this.money = (parseInt(this.money) + parseInt(this.bet)); |
|
} |
|
|
|
win() { |
|
this.money += (parseInt(this.bet) * 2); |
|
} |
|
|
|
endRound() { |
|
this.roundActive = false; |
|
this.lastCard = null; |
|
this.status = null; |
|
this.dealersHand = []; |
|
this.dealerScore = 0; |
|
this.usersHand = []; |
|
this.handScore = 0; |
|
|
|
this.cards = this.generateDeck(); |
|
this.shuffleDeck(); |
|
} |
|
} |