From d743e5610aee2525c1e7bc66988dc482496e5d26 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Wed, 13 Aug 2025 14:45:57 +1000 Subject: [PATCH] Implemented card counting. Refactored blackjack code a bit. Removed gamepicker references --- ledger.db | Bin 8192 -> 8192 bytes src/py/Acronymbot.py | 1 - src/py/BlackJack.py | 53 +++++++++++++++++++++++++++++++------------ 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/ledger.db b/ledger.db index f29273f11c59904fe9e2fd1e3059ef059369a62e..b4f14d959d95991f9b906ee238eeca256331ac70 100644 GIT binary patch delta 62 zcmZp0XmFSy&6qS%#+g5fL9a`Mmw|zSkzbU7Uv#sgz;eFLqWqTyB=~Naxd<__F|aW) SGBR1#PN`vHU{EjduLJ str: string = "" for card in self.hand: @@ -165,6 +176,8 @@ class Hand(): aces = 0 # Add static values for card in self.hand: + if card.hidden: + continue if card.value == 1: aces += 1 continue @@ -192,6 +205,9 @@ class Hand(): def __next__(self): return next(self.iter) + + def __len__(self): + return len(self.hand) class BlackJack: def __init__(self) -> None: @@ -200,19 +216,28 @@ class BlackJack: self.dealerHand = Hand() self.ledger = Ledger() self.playing = False + self.count = 0 def deal_card(self, hand): + card = self.deck.take_from_deck() + hand.add_to_hand(card) + self.count += card.count_value + + def deal_hidden_card(self, hand): hand.add_to_hand(self.deck.take_from_deck()) + # Hide one of the dealers cards + self.dealerHand.hide_card(1) def game_setup(self): # Deal cards in alternate order self.deck.shuffle() - for _ in range(2): + for i in range(2): self.deal_card(self.playerHand) - self.deal_card(self.dealerHand) + if i == 0: + self.deal_card(self.dealerHand) + else: + self.deal_hidden_card(self.dealerHand) - # Hide one of the dealers cards - self.dealerHand.hide_card(1) def discard_hand(self, hand): hand.show_hand() @@ -220,11 +245,9 @@ class BlackJack: card = hand.remove_from_hand(0) self.deck.addToDiscard(card) - async def show_cards(self, send, displayDealerScore=False): + async def show_cards(self, send): # Show Cards to player - string = f"Player Hand = {repr(self.playerHand)}: {self.playerHand}\nDealer Hand = ??: {self.dealerHand}" - if displayDealerScore: - string = f"Player Hand = {repr(self.playerHand)}: {self.playerHand}\nDealer Hand = {repr(self.dealerHand)}: {self.dealerHand}" + string = f"Player Hand = {repr(self.playerHand)}: {self.playerHand}\nDealer Hand = {repr(self.dealerHand)}: {self.dealerHand}\nCount = {self.count}" await send(string) @@ -263,6 +286,8 @@ class BlackJack: if gameState == DEALERTURN: + extra_count = self.dealerHand.show_hand() + self.count += extra_count if int(repr(self.dealerHand)) > int(repr(self.playerHand)): gameState = FINISHED continue @@ -272,7 +297,6 @@ class BlackJack: if gameState == FINISHED: - self.dealerHand.show_hand() playerBlackJack = False dealerBlackJack = False playerBust = False @@ -282,7 +306,7 @@ class BlackJack: tie = False playerScore = int(repr(self.playerHand)) dealerScore = int(repr(self.dealerHand)) - await self.show_cards(send, True) + await self.show_cards(send) if playerScore == 21: playerBlackJack = True if dealerScore == 21: @@ -334,6 +358,7 @@ class BlackJack: if len(self.deck) < 0.25 * 51: self.deck.return_all_from_discard() self.deck.shuffle() + self.count = 0 await send("Everyday I'm shuffling") gameState = OVER self.playing = False