Skip to content

Instantly share code, notes, and snippets.

@jonarnaldo
Created February 25, 2014 04:27
Show Gist options
  • Save jonarnaldo/9202694 to your computer and use it in GitHub Desktop.
Save jonarnaldo/9202694 to your computer and use it in GitHub Desktop.
Javascript Blackjack
/*Object Oriented Blackjack
A Game has: Players
Dealer
Deck
A Player / Dealer has: Score
Cards
A Score has: Game Logic
Current Score
A Deck has: Cards
*/
function Game() {
this.currentTurnIndex = 0;
this.deck = new Deck();
}
function Deck() {
this.cards = [];
this.cardsDrawn = 0;
var suits = ["spades", "diamonds", "hearts", "clubs"];
var names = ["ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king"];
for (var suit in suits) {
for (var name in names) {
this.cards.push(new Card(names[name], suits[suit]));
}
}
}
Deck.prototype.getCard = function () {
if (this.cards.length == this.cardsDrawn) {
return null;
} //case: check if all cards drawn
var random = Math.floor(Math.random() * (this.cards.length - this.cardsDrawn));
var temp = this.cards[random];
//swap chosen card with card last in array
this.cards[random] = this.cards[this.cards.length - this.cardsDrawn - 1];
this.cards[this.cards.length - this.cardsDrawn - 1] = temp;
this.cardsDrawn++;
return temp;
};
function Card(name, suit) {
this.name = name;
this.suit = suit;
}
Card.prototype.image = function () {
return "http://www.jonarnaldo.com/sandbox/deck_images/" + name + "_of_" + suit + ".png";
};
Card.prototype.value = function () {
if (this.name == "jack" || "queen" || "king") {
return [10];
} else if (this.name == "ace") {
return [1, 11];
} else {
return parseInt(this.name, 10);
}
};
function Player() {
//this.name;
this.cards = [];
}
Player.prototype.addCard = function () {
this.cards.push(deck.getCard());
};
Player.prototype.score = function () {
var score = 0;
var aces = [];
for (var i = 0; i < this.cards.length; i++) {
var value = this.cards[i].value() // value array ex.[10]
if (value.length == 1) {
score += value[0];
} else {
aces.push(value);
}
}
for (var j = 0; j < aces.length; j++) {
if (score + aces[j].value[1] <= 21) {
score + aces[j].value[1];
} else {
score + aces[j].value[0];
}
}
return score;
};
var deck = new Deck();
var player1 = new Player();
$("#getCard").click(function () {
player1.addCard();
var cardName = player1.cards[player1.cards.length-1].name;
var cardSuit = player1.cards[player1.cards.length-1].suit;
$("#table").append(cardName + cardSuit);
});
@benscarisdead2
Copy link

My coding bootcamp is making me code a Blackjack Hand Calculator. I have to turn it in soon. I'm failing. JavaScipt is fking me.

@0mppula
Copy link

0mppula commented Mar 25, 2021

Good code!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment