import re from pyjack.dealer import Dealer from pyjack.deck import Deck from pyjack.player import Player class Game: """The Game class is the central coordinator, managing the flow of the entire round, from setup to payout.""" # TODO: - play_round() function # - show_cards function def __init__(self) -> None: """Creates instances of 'Deck', 'Player', and 'Dealer'.""" self.deck = Deck() self.player = Player(0) self.dealer = Dealer(1000) def compare_hands(self, bet: float) -> str: """*Resolution/Payout*: Compares final hand values, checks for Bust, Blackjack, and highest value. *Updates* player.chips based on the outcome and the bet. *Returns* the result string (e.g., "Player Wins!").""" player_value = self.player.hand.value dealer_value = self.dealer.hand.value player_cards = len(self.player.hand.cards) dealer_cards = len(self.dealer.hand.cards) # Check player bust: if player_value > 21: self.player.chips -= bet return "Player Lost" # Check dealer bust: if dealer_value > 21: self.player.chips += bet return "Player Wins" # Check for Blackjack (21 with 2 cards) is_player_bj = player_value == 21 and player_cards == 2 is_dealer_bj = dealer_value == 21 and dealer_cards == 2 if is_player_bj and not is_dealer_bj: self.player.chips += bet * 1.5 return "Player Wins 3:2" elif is_dealer_bj: self.player.chips -= bet return "Player Lost" # Check for normal values if player_value > dealer_value: self.player.chips += bet return "Player Wins" elif player_value < dealer_value: self.player.chips -= bet return "Player Lost" else: return "Tie" def show_cards(self, hide_dealer: bool = False) -> None: """Displays the cards. The boolean determines if the dealer's second card is shown or concealed.""" player_cards = self.player.hand.cards dealer_cards = self.dealer.hand.cards print("--Player Cards:--") for card in player_cards: print(str(card)) if hide_dealer: card = dealer_cards[0] print("--Dealer Cards:--") print(str(card)) print("XXXX") else: print("--Dealer Cards:--") for card in dealer_cards: print(str(card))