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
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
Click the submit button to start!
Input:
+
Output:
@@ -151,5 +201,8 @@
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