School Commit Init
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
class BlackjackGame {
|
||||
constructor() {
|
||||
this.deck = this.shuffleDeck(this.generateDeck());
|
||||
this.playerHand = [];
|
||||
this.dealerHand = [];
|
||||
this.hasStarted = false;
|
||||
}
|
||||
|
||||
generateDeck() {
|
||||
// Generate a deck of cards
|
||||
const deck = [];
|
||||
const suits = ['♠', '♣', '♥', '♦'];
|
||||
const ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9','10', 'J', 'Q', 'K'];
|
||||
for (let suit of suits) {
|
||||
for (let rank of ranks) {
|
||||
deck.push(rank + suit);
|
||||
}
|
||||
}
|
||||
return deck;
|
||||
}
|
||||
|
||||
shuffleDeck(deck) {
|
||||
// Shuffle the deck
|
||||
for (let i = deck.length - 1; i > 0; i--) {
|
||||
const j = Math.floor(Math.random() * (i + 1));
|
||||
[deck[i], deck[j]] = [deck[j], deck[i]];
|
||||
}
|
||||
return deck;
|
||||
|
||||
}
|
||||
|
||||
dealInitialHands() {
|
||||
this.deck = this.shuffleDeck(this.generateDeck());
|
||||
this.playerHand = [this.deck.pop(), this.deck.pop()];
|
||||
this.dealerHand = [this.deck.pop(), this.deck.pop()];
|
||||
this.hasStarted = true;
|
||||
}
|
||||
|
||||
playerHit() {
|
||||
const card = this.deck.pop();
|
||||
this.playerHand.push(card);
|
||||
}
|
||||
|
||||
playerStand() {
|
||||
this.dealerPlay();
|
||||
}
|
||||
|
||||
dealerPlay() {
|
||||
while (this.getHandValue(this.dealerHand) < 17 && this.getHandValue(this.dealerHand) <= this.getHandValue(this.playerHand)) {
|
||||
this.dealerHand.push(this.deck.pop());
|
||||
}
|
||||
}
|
||||
|
||||
determineWinner() {
|
||||
const playerValue = this.getHandValue(this.playerHand);
|
||||
const dealerValue = this.getHandValue(this.dealerHand);
|
||||
this.hasStarted = false;
|
||||
if (playerValue > 21 || (dealerValue <= 21 && dealerValue > playerValue)) {
|
||||
return 'Dealer';
|
||||
} else if (playerValue === 21 || (dealerValue > 21) || (playerValue < 21 && playerValue > dealerValue)) {
|
||||
return 'Player';
|
||||
} else {
|
||||
return 'Push';
|
||||
}
|
||||
}
|
||||
|
||||
getHandValue(hand) {
|
||||
// Calculate hand value
|
||||
let value = 0;
|
||||
let aces = 0;
|
||||
for (let card of hand) {
|
||||
const rank = card.slice(0, -1);
|
||||
if (rank === 'A') {
|
||||
aces++;
|
||||
value += 11;
|
||||
} else if (['J', 'Q', 'K'].includes(rank)) {
|
||||
value += 10;
|
||||
} else {
|
||||
value += Number(rank);
|
||||
}
|
||||
}
|
||||
while (value > 21 && aces > 0) {
|
||||
value -= 10;
|
||||
aces--;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BlackjackGame;
|
||||
|
||||
Reference in New Issue
Block a user