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