diff --git a/index.html b/index.html index bbc7dffd..002156b1 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,3 @@ - @@ -8,41 +7,83 @@ - - - - - - - - - - + + + + + + + + + + Blackjack - Basics - Rocket Academy - - + + - - - - - + + + + + - - - - - - - + + + + + + + - + -

- + Rocket Academy - +

♣️ Basics - Blackjack ♠️

@@ -131,7 +177,12 @@

♣️ Basics - Blackjack ♠️


Output:

-
+
+

+ Hello! Welcome to BlackJack! Click Submit to draw 2 cards for you and + the dealer. +

+
diff --git a/script.js b/script.js index bbe8a293..ef838db4 100644 --- a/script.js +++ b/script.js @@ -1,4 +1,204 @@ -var main = function (input) { - var myOutputValue = 'hello world'; - return myOutputValue; -}; +var suitsholder = ["Diamonds", "Hearts", "Clubs", "Spades"]; + +// creating a deck of cards +function makeDeck() { + var newDeck = []; + for (var i = 1; i <= 13; i++) { + var suits = ["♦", "♥", "♣", "♠"]; + for (var j = 0; j < suits.length; j++) { + var name = `${i}`; + var value = Number(`${i}`); + if (name === "1") { + name = "Ace"; + } else if (name === "11") { + name = "Jack"; + value = 10; + } else if (name === "12") { + name = "Queen"; + value = 10; + } else if (name === "13") { + name = "King"; + value = 10; + } + var card = { + value, + suit: suits[j], + name, + }; + newDeck.push(card); + } + } + return newDeck; +} +// Get a random index ranging from 0 (inclusive) to max (exclusive). +function getRandomIndex(max) { + return Math.floor(Math.random() * max); +} +// Shuffle an array of cards +function shuffleCards(deck) { + // Loop over the card deck array once + for (var currentIndex = 0; currentIndex < deck.length; currentIndex++) { + // Select a random index in the deck + var randomIndex = getRandomIndex(deck.length); + // Select the card that corresponds to randomIndex + var randomCard = deck[randomIndex]; + // Select the card that corresponds to currentIndex + var currentCard = deck[currentIndex]; + // Swap positions of randomCard and currentCard in the deck + deck[currentIndex] = randomCard; + deck[randomIndex] = currentCard; + } + // Return the shuffled deck + return deck; +} + +var shuffledDeck = shuffleCards(makeDeck()); + +var TWENTY_ONE = 21; +var dealerHitThreshold = 16; +var playerChoseStand = false; +var gameOver = false; + +var computerCards = []; +var playerCards = []; + +function dealCardToHand(hand) { + hand.push(shuffledDeck.pop()); +} + +function getHandSum(hand) { + var numAcesInHand = 0; + var sum = 0; + + for (var i = 0; i < hand.length; i++) { + var currentCard = hand[i]; + if (currentCard.name == "Ace") { + console.log("yes A"); + numAcesInHand += 1; + sum += 11; + } else { + sum += currentCard.value; + } + } + + if (sum > TWENTY_ONE && numAcesInHand > 0) { + for (var aceCounter = 0; aceCounter < numAcesInHand; aceCounter++) { + sum -= 10; + if (sum <= TWENTY_ONE) { + break; + } + } + } + return sum; +} + +function isBlackJack(hand) { + return hand.length == 2 && getHandSum(hand) == TWENTY_ONE; +} + +function convertHandToString(hand) { + var cards = ""; + for (var handIndex = 0; handIndex < hand.length; handIndex++) { + cards = + cards + hand[handIndex].name + " of " + hand[handIndex].suit + ",
"; + } + return cards; +} + +function getDefaultOutput() { + return ` + Player has:
${convertHandToString(playerCards)} with sum ${getHandSum( + playerCards + )}.

+ Dealer has:
${convertHandToString(computerCards)} with sum ${getHandSum( + computerCards + )}. + `; +} + +function main(input) { + if (gameOver) { + return `GAME OVER! Please refresh to play again~`; + } + + if (playerCards.length == 0) { + dealCardToHand(playerCards); + dealCardToHand(computerCards); + + dealCardToHand(playerCards); + dealCardToHand(computerCards); + console.log(playerCards); + console.log(computerCards); + + if (isBlackJack(computerCards)) { + gameOver = true; + return ` + ${getDefaultOutput()}

+ Computer has BlackJack and wins. Please refresh to play again~ + `; + } else if (isBlackJack(playerCards)) { + gameOver = true; + return ` + ${getDefaultOutput()}

+ Player has BlackJack and wins. Please refresh to play again~ + `; + } else { + return ` + ${getDefaultOutput()}

+ Please enter "hit" or "stand", then submit + `; + } + } + + if (!playerChoseStand) { + if (input !== "hit" && input !== "stand") { + return 'Please only input either "hit" or "stand"'; + } else if (input == "hit") { + dealCardToHand(playerCards); + + if (getHandSum(playerCards) > TWENTY_ONE) { + gameOver = true; + return ` + ${getDefaultOutput()}

+ Player has busted and lost the game. Please refresh to play again~ + `; + } + } else if (input == "stand") { + playerChoseStand = true; + } + } + + var computerHandSum = getHandSum(computerCards); + if (computerHandSum <= dealerHitThreshold) { + dealCardToHand(computerCards); + computerHandSum = getHandSum(computerCards); + if (computerHandSum > TWENTY_ONE) { + gameOver = true; + return ` + ${getDefaultOutput()}

+ Computer has busted and lost the game. Please refresh to play again~ + `; + } + } + + if (playerChoseStand && computerHandSum > dealerHitThreshold) { + gameOver = true; + if (getHandSum(playerCards) > computerHandSum) { + return ` + ${getDefaultOutput()}

+ Player wins. Please refresh to play again~ + `; + } else { + return ` + ${getDefaultOutput()}

+ Computer wins. Please refresh to play again~ + `; + } + } + return ` + ${getDefaultOutput()}

+ playerChoseStand is ${playerChoseStand}.
+ If player has not yet chose to stand, please enter "hit" or "stand".
+ Else, press Submit to see Computer's next move. + `; +}