const app = function () { const game = {}; const suits = ["spades", "hearts", "clubs", "diams"]; const ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]; const score = [0, 0]; function init() { /// console.log('init ready'); game.cash = 100; game.bet = 0; buildGameBoard(); turnOff(game.btnHit); turnOff(game.btnStand); buildDeck(); addClicker(); scoreBoard(); updateCash(); } function updateCash() { console.log(isNaN(game.inputBet.value)); if (isNaN(game.inputBet.value) || game.inputBet.value.length < 1) { game.inputBet.value = 0; } if (game.inputBet.value > game.cash) { game.inputBet.value = game.cash; } game.bet = Number(game.inputBet.value); game.playerCash.textContent = "Player Cash $" + (game.cash - game.bet); } function lockWager(tog) { game.inputBet.disabled = tog; game.betButton.disabled = tog; } function setBet() { game.status.textContent = "You bet $" + game.bet; game.cash = game.cash - game.bet; game.playerCash.textContent = "Player Cash $" + game.cash; lockWager(true); } function scoreBoard() { game.scoreboard.textContent = `Dealer ${score[0]} vs Player ${score[1]}`; } function addClicker() { game.btnDeal.addEventListener('click', deal); game.btnStand.addEventListener('click', playerStand); game.btnHit.addEventListener('click', nextCard); game.betButton.addEventListener('click', setBet); game.inputBet.addEventListener('change', updateCash); } function deal() { game.dealerHand = []; game.playerHand = []; game.start = true; turnOff(game.btnDeal); game.playerCards.innerHTML = ""; game.dealerCards.innerHTML = ""; takeCard(game.dealerHand, game.dealerCards, true); takeCard(game.dealerHand, game.dealerCards, false); takeCard(game.playerHand, game.playerCards, false); takeCard(game.playerHand, game.playerCards, false); updateCount(); } function playerStand() { dealerPlay(); turnOff(game.btnHit); turnOff(game.btnStand); } function nextCard() { takeCard(game.playerHand, game.playerCards, false); updateCount(); } function findWinner() { let player = scorer(game.playerHand); let dealer = scorer(game.dealerHand); console.log(player, dealer); if (player > 21) { game.status.textContent = "You Busted with " + player + " "; } if (dealer > 21) { game.status.textContent = "Dealer Busted with " + dealer + " "; } //check winner if (player == dealer) { game.status.textContent = "Draw no winners " + player + " "; } else if ((player < 22 && player > dealer) || dealer > 21) { game.status.textContent += "You Win with " + player + " "; score[1]++; } else { game.status.textContent += "Dealer wins with " + dealer + " "; score[0]++; } scoreBoard(); turnOff(game.btnHit); turnOff(game.btnStand); turnOn(game.btnDeal); } function dealerPlay() { let dealer = scorer(game.dealerHand); game.cardBack.style.display = "none"; /// console.log(dealer); game.status.textContent = "Dealer score " + dealer + " "; if (dealer >= 17) { game.dealerScore.textContent = dealer; findWinner(); } else { takeCard(game.dealerHand, game.dealerCards, false); game.dealerScore.textContent = dealer; dealerPlay(); } } function updateCount() { let player = scorer(game.playerHand); let dealer = scorer(game.dealerHand); /// console.log(player, dealer); game.playerScore.textContent = player; if (player < 21) { turnOn(game.btnHit); turnOn(game.btnStand); game.status.textContent = "Stand or take another card"; } else if (player > 21) { findWinner(); } else { game.status.textContent = "Dealer in Play to 17 minimum"; dealerPlay(dealer); } } function scoreAce(val, aces) { if (val < 21) { return val; } else if (aces > 0) { aces--; val = val - 10; return scoreAce(val, aces); } else { return val; } } function scorer(hand) { let total = 0; let ace = 0; hand.forEach(function (card) { /// console.log(card); if (card.rank == "A") { ace++; } total = total + Number(card.value); }) if (ace > 0 && total > 21) { total = scoreAce(total, ace); } /// console.log(hand); return Number(total); } function takeCard(hand, ele, h) { if (game.deck.length == 0) { buildDeck(); } let temp = game.deck.shift(); /// console.log(temp); hand.push(temp); /// console.log(game); showCard(temp, ele); if (h) { game.cardBack = document.createElement('div'); game.cardBack.classList.add('cardB'); ele.append(game.cardBack); } } function showCard(card, el) { if (card != undefined) { //el.innerHTML = card.rank + "&" + card.suit + ";"; el.style.backgroundColor = "white"; let div = document.createElement("div"); div.classList.add('card'); if (card.suit === "hearts" || card.suit === "diams") { div.classList.add('red'); } let span1 = document.createElement('div'); span1.innerHTML = card.rank + "&" + card.suit + ";"; span1.classList.add('tiny'); div.appendChild(span1); let span2 = document.createElement('div'); span2.innerHTML = card.rank; span2.classList.add('big'); div.appendChild(span2); let span3 = document.createElement('div'); span3.innerHTML = "&" + card.suit + ";"; span3.classList.add('big'); div.appendChild(span3); el.appendChild(div); } } function turnOff(btn) { btn.disabled = true; btn.style.backgroundColor = "#ddd"; } function turnOn(btn) { btn.disabled = false; btn.style.backgroundColor = "#000"; } function buildDeck() { game.deck = []; for (let i = 0; i < suits.length; i++) { for (let j = 0; j < ranks.length; j++) { let card = {}; let tempValue = isNaN(ranks[j]) ? 10 : ranks[j]; tempValue = (ranks[j] == "A") ? 11 : tempValue; card.suit = suits[i]; card.rank = ranks[j]; card.value = tempValue; ///// console.log(suits[i],ranks[j],tempValue); game.deck.push(card); } } shuffle(game.deck); /// console.log(game.deck); } function shuffle(cards) { cards.sort(function () { return .5 - Math.random(); }) return cards; } function buildGameBoard() { game.main = document.querySelector('#game'); /// console.log(game); game.scoreboard = document.createElement('div'); game.scoreboard.textContent = "Dealer 0 vs Player 0"; game.scoreboard.style.fontSize = "2em"; game.main.append(game.scoreboard); game.table = document.createElement('div'); game.dealer = document.createElement('div'); game.dealerCards = document.createElement('div'); game.dealerCards.textContent = "DEALER CARD"; game.dealerScore = document.createElement('div'); game.dealerScore.textContent = "-"; game.dealerScore.classList.add('score'); game.dealer.append(game.dealerScore); game.table.append(game.dealer); game.dealer.append(game.dealerCards); game.player = document.createElement('div'); game.playerCards = document.createElement('div'); game.playerCards.textContent = "PLAYER CARD"; game.playerScore = document.createElement('div'); game.playerScore.textContent = "-"; game.playerScore.classList.add('score'); game.player.append(game.playerScore); game.table.append(game.player); game.player.append(game.playerCards); game.dashboard = document.createElement('div'); game.status = document.createElement('div'); game.status.classList.add('message'); game.status.textContent = "Message for Player"; game.dashboard.append(game.status); game.btnDeal = document.createElement('button'); game.btnDeal.textContent = "DEAL"; game.btnDeal.classList.add('btn'); game.dashboard.append(game.btnDeal); game.btnHit = document.createElement('button'); game.btnHit.textContent = "HIT"; game.btnHit.classList.add('btn'); game.dashboard.append(game.btnHit); game.btnStand = document.createElement('button'); game.btnStand.textContent = "STAND"; game.btnStand.classList.add('btn'); game.dashboard.append(game.btnStand); game.playerCash = document.createElement('div'); game.playerCash.classList.add('message'); game.playerCash.textContent = "Player Cash $100"; game.dashboard.append(game.playerCash); game.inputBet = document.createElement('input'); game.inputBet.setAttribute('type', 'number'); game.inputBet.style.width = "4em"; game.inputBet.style.fontSize = "1.4em"; game.inputBet.style.marginTop = "1em"; game.inputBet.value = 0; game.dashboard.append(game.inputBet); game.betButton = document.createElement('button'); game.betButton.textContent = "Bet Amount"; game.betButton.classList.add('btn'); game.dashboard.append(game.betButton); game.table.append(game.dashboard); game.main.append(game.table); } return { init: init } }();