School Commit Init

This commit is contained in:
2024-08-31 12:07:21 +03:00
commit 0b130ee18c
2801 changed files with 4720552 additions and 0 deletions
@@ -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;