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

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();
}
}