def play_starting_in(self, initial_state: State) -> GameInfo: game_info = GameInfo() player_state = self._play_stage(initial_state=initial_state, policy=self._player_policy, log_action=game_info.log_player) if player_state == BUST: game_info.set_winner(Winner.DEALER) return game_info dealer_cards = (initial_state.opponent_points, self._deck.get_next_card()) dealer_state = self._play_stage(initial_state=State.from_deal( *dealer_cards, player_state.current_sum), policy=self._dealer_policy, log_action=game_info.log_dealer) if dealer_state == BUST: game_info.set_winner(Winner.PLAYER) return game_info if player_state.current_sum > dealer_state.current_sum: game_info.set_winner(Winner.PLAYER) elif player_state.current_sum == dealer_state.current_sum: game_info.set_winner(Winner.DRAW) else: game_info.set_winner(Winner.DEALER) return game_info
def check_sum_of_deal(self, expected_sum: int, first_card: Card, second_card: Card): state = State.from_deal(first_card, second_card, blank) self.assertEqual(expected_sum, state.current_sum)
def play(self) -> GameInfo: player_cards = (self._deck.get_next_card(), self._deck.get_next_card()) dealer_card = self._deck.get_next_card() return self.play_starting_in( State.from_deal(*player_cards, dealer_card))