Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 87 additions & 36 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

<!DOCTYPE html>
<html lang="en">
<head>
Expand All @@ -8,41 +7,83 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />

<!-- Favicon configuration -->
<link rel="apple-touch-icon" sizes="180x180" href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/apple-touch-icon.png?v=2">
<link rel="icon" type="image/png" sizes="32x32" href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/favicon-32x32.png?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/favicon-16x16.png?v=2">
<link rel="manifest" href="/site.webmanifest?v=2">
<link rel="mask-icon" href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/safari-pinned-tab.svg?v=2" color="#e73c3e">
<link rel="shortcut icon" href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/favicon.ico?v=2">
<meta name="apple-mobile-web-app-title" content="Rocket Academy">
<meta name="application-name" content="Rocket Academy">
<meta name="msapplication-TileColor" content="#2b5797">
<meta name="theme-color" content="#ffffff">
<link
rel="apple-touch-icon"
sizes="180x180"
href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/apple-touch-icon.png?v=2"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/favicon-32x32.png?v=2"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/favicon-16x16.png?v=2"
/>
<link rel="manifest" href="/site.webmanifest?v=2" />
<link
rel="mask-icon"
href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/safari-pinned-tab.svg?v=2"
color="#e73c3e"
/>
<link
rel="shortcut icon"
href="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/all/favicons/favicon.ico?v=2"
/>
<meta name="apple-mobile-web-app-title" content="Rocket Academy" />
<meta name="application-name" content="Rocket Academy" />
<meta name="msapplication-TileColor" content="#2b5797" />
<meta name="theme-color" content="#ffffff" />

<!-- sharing configuration -->
<!-- Primary Meta Tags -->
<title>Blackjack - Basics - Rocket Academy</title>
<meta name="title" content="YOURNAME's BlackJack Game!">
<meta name="description" content="A fun card game I made myself! 😄💪🌈">
<meta name="title" content="YOURNAME's BlackJack Game!" />
<meta name="description" content="A fun card game I made myself! 😄💪🌈" />

<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://rocketacademy.github.io/basics-blackjack/index.html">
<meta property="og:title" content="YOURNAME's BlackJack Game!">
<meta property="og:description" content="A fun card game I made myself! 😄💪🌈">
<meta property="og:image" content="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/basics/basics-blackjack-share-small.jpeg">
<meta property="og:type" content="website" />
<meta
property="og:url"
content="https://rocketacademy.github.io/basics-blackjack/index.html"
/>
<meta property="og:title" content="YOURNAME's BlackJack Game!" />
<meta
property="og:description"
content="A fun card game I made myself! 😄💪🌈"
/>
<meta
property="og:image"
content="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/basics/basics-blackjack-share-small.jpeg"
/>

<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://rocketacademy.github.io/basics-blackjack/index.html">
<meta name="twitter:title" content="YOURNAME's BlackJack Game!">
<meta name="twitter:description" content="A fun card game I made myself! 😄💪🌈">
<meta name="twitter:image" content="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/basics/basics-blackjack-share-small.jpeg">
<meta name="twitter:site" content="@rocketacademyco">
<meta name="twitter:creator" content="@rocketacademyco">
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:url"
content="https://rocketacademy.github.io/basics-blackjack/index.html"
/>
<meta name="twitter:title" content="YOURNAME's BlackJack Game!" />
<meta
name="twitter:description"
content="A fun card game I made myself! 😄💪🌈"
/>
<meta
name="twitter:image"
content="https://ra-web-files.s3.ap-southeast-1.amazonaws.com/basics/basics-blackjack-share-small.jpeg"
/>
<meta name="twitter:site" content="@rocketacademyco" />
<meta name="twitter:creator" content="@rocketacademyco" />

<!-- fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans">
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Open+Sans"
/>

<!-- CSS -->
<style>
Expand All @@ -51,21 +92,21 @@
}

body {
font-family: 'Open Sans', sans-serif;
font-family: "Open Sans", sans-serif;
margin-left: 30px;
margin-right: 30px;
background-color:white;
background-color: white;
color: black; /* sets the font color */
background-image: url(""); /* The image used */
background-position: center; /* Center the image */
background-repeat: no-repeat; /* Do not repeat the image */
background-size: cover; /* Resize the background image to cover the entire container */
}

#output-div img{
display:block;
max-width:100%;
max-height:200px;
#output-div img {
display: block;
max-width: 100%;
max-height: 200px;
}
.header {
text-align: center;
Expand Down Expand Up @@ -115,14 +156,19 @@
}
}
</style>

</head>

<body>
<h1 class="header">
<img class="logo-img" src="https://firebasestorage.googleapis.com/v0/b/ftbc11-sample.appspot.com/o/images%2F1-PRIMARY_CRIMSON.png?alt=media&token=ce9e8333-2a45-44be-adb2-1f1bf054adf7" />
<img
class="logo-img"
src="https://firebasestorage.googleapis.com/v0/b/ftbc11-sample.appspot.com/o/images%2F1-PRIMARY_CRIMSON.png?alt=media&token=ce9e8333-2a45-44be-adb2-1f1bf054adf7"
/>
Rocket Academy
<img class="logo-img" src="https://firebasestorage.googleapis.com/v0/b/ftbc11-sample.appspot.com/o/images%2F1-PRIMARY_CRIMSON.png?alt=media&token=ce9e8333-2a45-44be-adb2-1f1bf054adf7" />
<img
class="logo-img"
src="https://firebasestorage.googleapis.com/v0/b/ftbc11-sample.appspot.com/o/images%2F1-PRIMARY_CRIMSON.png?alt=media&token=ce9e8333-2a45-44be-adb2-1f1bf054adf7"
/>
</h1>
<h1 class="header">♣️ Basics - Blackjack ♠️</h1>
<div id="container">
Expand All @@ -131,7 +177,12 @@ <h1 class="header">♣️ Basics - Blackjack ♠️</h1>
<br />
<button id="submit-button">Submit</button>
<p>Output:</p>
<div id="output-div"></div>
<div id="output-div">
<p>
Hello! Welcome to BlackJack! Click Submit to draw 2 cards for you and
the dealer.
</p>
</div>
</div>
<!-- Import program logic -->
<script src="script.js"></script>
Expand Down
208 changes: 204 additions & 4 deletions script.js
Original file line number Diff line number Diff line change
@@ -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 + ", <br>";
}
return cards;
}

function getDefaultOutput() {
return `
Player has:<br>${convertHandToString(playerCards)} with sum ${getHandSum(
playerCards
)}.<br><br>
Dealer has:<br>${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()}<br><br>
Computer has BlackJack and wins. Please refresh to play again~
`;
} else if (isBlackJack(playerCards)) {
gameOver = true;
return `
${getDefaultOutput()}<br><br>
Player has BlackJack and wins. Please refresh to play again~
`;
} else {
return `
${getDefaultOutput()}<br><br>
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()}<br><br>
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()}<br><br>
Computer has busted and lost the game. Please refresh to play again~
`;
}
}

if (playerChoseStand && computerHandSum > dealerHitThreshold) {
gameOver = true;
if (getHandSum(playerCards) > computerHandSum) {
return `
${getDefaultOutput()}<br><br>
Player wins. Please refresh to play again~
`;
} else {
return `
${getDefaultOutput()}<br><br>
Computer wins. Please refresh to play again~
`;
}
}
return `
${getDefaultOutput()}<br><br>
playerChoseStand is ${playerChoseStand}.<br>
If player has not yet chose to stand, please enter "hit" or "stand".<br>
Else, press Submit to see Computer's next move.
`;
}