-
-
Save andyfoster/464f7276d0e5f5c22f88d88805dfb1c6 to your computer and use it in GitHub Desktop.
Javascript Blackjack
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*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); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment