Source code for blackjack21.table

__all__ = ('Table', 'Players')

from typing import Iterable, Tuple, Any, Text, Generator, List

from .dealer import *
from .deck import Deck
from .exceptions import InvalidPlayersData
from .players import *

Players = List[Player]


[docs] class Table: # noinspection PyUnresolvedReferences """Create object for this class to initialize a blackjack table (Iterable through players) :param players: tuple of player tuples ((name: str, bet: int)) :keyword dealer: str: dealer name (default: "Dealer") :keyword auto_deal: bool (default: True) :keyword suits: tuple of 4 suits (default: ("Hearts", "Diamonds", "Spades", "Clubs")) :keyword ranks: tuple of 13 ranks ace to king (default: ("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K")) :keyword deck_count: int number of decks to be used """ __slots__ = ( "_players", "_dealer", "_deck", "_auto_deal", ) def __init__(self, players: Iterable, **kwargs: Any): dealer: Text = kwargs.get('dealer_name', "Dealer") self._auto_deal: bool = kwargs.get('auto_deal', True) suits: Iterable = kwargs.get( 'suits', ("Hearts", "Diamonds", "Spades", "Clubs")) ranks: Iterable = kwargs.get( 'ranks', ("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K")) count: int = kwargs.get('deck_count', len(tuple(players))//5 + 1) self._deck = Deck(tuple(suits), tuple(ranks), count=count) self._players = [] for player in players: self._create_player(player) self._dealer = Dealer(dealer, self) def __repr__(self) -> Text: return f"<Table dealer: {self._dealer} players: {len(self._players)}>" def __str__(self) -> Text: return f"<Table dealer: {self._dealer} players: {len(self._players)}>" def __iter__(self) -> Generator['Player', None, None]: """Iterate through the players on the table""" yield from self._players def __getitem__(self, index: int) -> 'Player': """Player at index""" return self._players[index] def __len__(self) -> int: """Number of players on the table""" return len(self._players) @property def auto_deal(self) -> bool: """Table auto deal bool value""" return self._auto_deal @property def deck(self) -> 'Deck': """Table's Deck class object""" return self._deck @property def dealer(self) -> 'Dealer': """Table's Dealer class object""" return self._dealer @property def players(self) -> 'Players': """List of Player class objects for the Table""" return self._players def _create_player(self, player: Tuple[Text, int]) -> Player: """Added a player to the table of players. :param player: tuple of player name and player bet :returns: Player class object. """ if len(player) == 2: player = Player(player[0], player[1], self) self._players.append(player) return player else: raise InvalidPlayersData