diff --git "a/Images/meme-k\303\251k\303\251.gif" "b/Images/meme-k\303\251k\303\251.gif" new file mode 100644 index 00000000..336fb382 Binary files /dev/null and "b/Images/meme-k\303\251k\303\251.gif" differ diff --git a/index.html b/index.html index bbc7dffd..25a6e984 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,3 @@ - @@ -8,41 +7,83 @@ - - - - - - - - - - + + + + + + + + + + Blackjack - Basics - Rocket Academy - - + + - - - - - + + + + + - - - - - - - + + + + + + + - + -

- + + Rocket Academy - + +

â™Ŗī¸ Basics - Blackjack â™ ī¸

+

Click the submit button to start!

Input:


+

Output:

@@ -151,5 +201,8 @@

â™Ŗī¸ Basics - Blackjack â™ ī¸

input.value = ""; }); + diff --git a/script.js b/script.js index bbe8a293..102250d7 100644 --- a/script.js +++ b/script.js @@ -1,4 +1,267 @@ +var GAME_START = "game start"; +var GAME_CARDS_DRAWN = "cards are drawn"; +var GAME_RESULTS_SHOWN = "results are shown"; +var GAME_HIT_OR_STAND = "hit or stand"; +var currentGameMode = GAME_START; + +var playerHand = []; +var dealerHand = []; + +var gameDeck = []; + +var createDeck = function () { + var cardDeck = []; + + var suits = ["Spades â™ ī¸", "Clubs â™Ŗī¸", "Diamonds â™Ļī¸", "Hearts â™Ĩī¸"]; + + for (var suitIndex = 0; suitIndex < suits.length; suitIndex += 1) { + for (var rankIndex = 1; rankIndex <= 13; rankIndex += 1) { + var cardObject = { + suit: suits[suitIndex], + rank: rankIndex, + }; + if (rankIndex == 1) { + cardObject.name = "Ace"; + } else if (rankIndex == 11) { + cardObject.name = "Jack"; + } else if (rankIndex == 12) { + cardObject.name = "Queen"; + } else if (rankIndex == 13) { + cardObject.name = "King"; + } else { + cardObject.name = rankIndex; + } + cardDeck.push(cardObject); + } + } + return cardDeck; +}; + +var shuffleDeck = function (deck) { + var copyDeck = [...deck]; + for (var i = 0; i < copyDeck.length; i += 1) { + var randomIndex = Math.floor(Math.random() * copyDeck.length); + var temporaryCard = copyDeck[i]; + copyDeck[i] = copyDeck[randomIndex]; + copyDeck[randomIndex] = temporaryCard; + } + return copyDeck; +}; + +var createNewDeck = function () { + var deck = createDeck(); + var shuffledDeck = shuffleDeck(deck); + return shuffledDeck; +}; + +var checkForBlackJack = function (handArray) { + var playerCardOne = handArray[0]; + var playerCardTwo = handArray[1]; + var isBlackJack = false; + + if ( + (playerCardOne.name == "Ace" && playerCardTwo.rank >= 10) || + (playerCardOne.rank >= 10 && playerCardTwo.name == "Ace") + ) { + isBlackJack = true; + } + return isBlackJack; +}; + +var calculateTotalHandValue = function (handArray) { + var totalHandValue = 0; + + var index = 0; + while (index < handArray.length) { + var currentCard = handArray[index]; + + if ( + currentCard.name == "Jack" || + currentCard.name == "Queen" || + currentCard.name == "King" + ) { + totalHandValue += 10; + } else { + totalHandValue += currentCard.rank; + } + index += 1; + } + return totalHandValue; +}; + +var displayPlayerAndDealerHands = function (playerHandArray, dealerHandArray) { + var playerMessage = `đŸ™†â€â™‚ī¸ Player Hand:
`; + var index = 0; + while (index < playerHandArray.length) { + playerMessage = `${playerMessage} - ${playerHandArray[index].name} of ${playerHandArray[index].suit}
`; + index += 1; + } + + var dealerMessage = "đŸ¤ĩ Dealer Hand:
"; + var index = 0; + while (index < dealerHandArray.length) { + dealerMessage = `${dealerMessage} - ${dealerHandArray[index].name} of ${dealerHandArray[index].suit}
`; + index += 1; + } + + return `${playerMessage}
${dealerMessage}`; +}; + +var displayHandTotalValues = function (playerHandValue, dealerHandValue) { + var totalHandValueMessage = + "
Player total hand value: " + + playerHandValue + + "
Dealer total hand value: " + + dealerHandValue; + return totalHandValueMessage; +}; + +var dealCards = function () { + playerHand.push(gameDeck.pop()); + playerHand.push(gameDeck.pop()); + dealerHand.push(gameDeck.pop()); + dealerHand.push(gameDeck.pop()); +}; + +var checkBlackJack = function () { + var playerHasBlackJack = checkForBlackJack(playerHand); + var dealerHasBlackJack = checkForBlackJack(dealerHand); + var outputMessage = ""; + + if (playerHasBlackJack && dealerHasBlackJack) { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
It's a Black Jack Tie!

Enter "reset" to start a new game`; + } else if (playerHasBlackJack) { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
Player wins by Black Jack!`; + } else if (dealerHasBlackJack) { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
Dealer wins by Black Jack!`; + } else { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
There are no Black Jacks.
Please enter "hit" or "stand".`; + currentGameMode = GAME_HIT_OR_STAND; + } + + return outputMessage; +}; + +var hitOrStand = function (input) { + var outputMessage = ""; + if (input == "hit") { + playerHand.push(gameDeck.pop()); + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
You drew another card.
Please enter 'hit' or 'stand'.`; + } else if (input == "stand") { + outputMessage = stand(); + } else { + outputMessage = `Invalid input. Please enter either "hit" or "stand"

${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}`; + } + return outputMessage; +}; + +var stand = function () { + var playerHandTotalValue = calculateTotalHandValue(playerHand); + var dealerHandTotalValue = calculateTotalHandValue(dealerHand); + var outputMessage = ""; + + while (dealerHandTotalValue < 17) { + dealerHand.push(gameDeck.pop()); + dealerHandTotalValue = calculateTotalHandValue(dealerHand); + } + + outputMessage = evaluateResults(playerHandTotalValue, dealerHandTotalValue); + currentGameMode = GAME_RESULTS_SHOWN; + + return outputMessage; +}; + +var evaluateResults = function (playerHandTotalValue, dealerHandTotalValue) { + var outputMessage = ""; + + if (playerHandTotalValue > 21) { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
Player busts! Dealer wins!. ${displayHandTotalValues( + playerHandTotalValue, + dealerHandTotalValue + )}

Enter "reset" to start a new game`; + } else if ( + playerHandTotalValue == dealerHandTotalValue || + (playerHandTotalValue > 21 && dealerHandTotalValue > 21) + ) { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
It's a Tie! ${displayHandTotalValues( + playerHandTotalValue, + dealerHandTotalValue + )}

Enter "reset" to start a new game`; + } else if ( + (playerHandTotalValue > dealerHandTotalValue && + playerHandTotalValue <= 21) || + (playerHandTotalValue <= 21 && dealerHandTotalValue > 21) + ) { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
Player wins! ${displayHandTotalValues( + playerHandTotalValue, + dealerHandTotalValue + )}

Enter "reset" to start a new game`; + } else { + outputMessage = `${displayPlayerAndDealerHands( + playerHand, + dealerHand + )}
Dealer wins! ${displayHandTotalValues( + playerHandTotalValue, + dealerHandTotalValue + )}

Enter "reset" to start a new game`; + } + + return outputMessage; +}; + +var resetGame = function () { + currentGameMode = GAME_START; + playerHand = []; + dealerHand = []; +}; + var main = function (input) { - var myOutputValue = 'hello world'; - return myOutputValue; + var outputMessage = ""; + gameDeck = createNewDeck(); + + if (input == "reset") { + resetGame(); + outputMessage = + "The game has been reset. Click button to start a new game!"; + return outputMessage; + } + + if (currentGameMode == GAME_START) { + dealCards(); + currentGameMode = GAME_CARDS_DRAWN; + outputMessage = `Everyone has been dealt a card. Click button to calculate cards!`; + } else if (currentGameMode == GAME_CARDS_DRAWN) { + outputMessage = checkBlackJack(); + } else if (currentGameMode == GAME_HIT_OR_STAND) { + outputMessage = hitOrStand(input); + } + + return outputMessage; }; diff --git a/sound/the-cat-from-ipanema.mp3 b/sound/the-cat-from-ipanema.mp3 new file mode 100644 index 00000000..fd2e6c66 Binary files /dev/null and b/sound/the-cat-from-ipanema.mp3 differ