def __init__(self, np_random): ''' Initialize a Kuhn Poker dealer class ''' self.np_random = np_random self.deck = [Card('H', 'J'), Card('H', 'Q'), Card('H', 'K')] self.shuffle() self.pot = 0
def test_take_out_cards(self): cards = init_54_deck() remove_cards = [Card('S', 'A'), Card('BJ', '')] res = take_out_cards(cards, remove_cards) flag = False for card in res: if card.get_index() == 'SA' or card.get_index == 'BJ': flag = True self.assertFalse(flag) self.assertEqual(len(cards), len(init_54_deck()) - 2)
def test_judge_game(self): np_random = np.random.RandomState() players = [Player(0, np_random), Player(1, np_random)] players[0].in_chips = 10 players[1].in_chips = 10 # Test hand is equal players[0].hand = Card('S', 'J') players[1].hand = Card('H', 'J') public_card = Card('S', 'Q') payoffs = Judger.judge_game(players, public_card) self.assertEqual(payoffs[0], 0) self.assertEqual(payoffs[1], 0) # Test one player get a pair players[0].hand = Card('S', 'J') players[1].hand = Card('S', 'Q') public_card = Card('H', 'J') payoffs = Judger.judge_game(players, public_card) self.assertEqual(payoffs[0], 10.0) self.assertEqual(payoffs[1], -10.0) # Other cases # Test one player get a pair players[0].hand = Card('S', 'J') players[1].hand = Card('S', 'Q') public_card = Card('H', 'K') payoffs = Judger.judge_game(players, public_card) self.assertEqual(payoffs[0], -10.0) self.assertEqual(payoffs[1], 10.0)
def init_54_deck(): ''' Initialize a standard deck of 52 cards, BJ and RJ Returns: (list): Alist of Card object ''' suit_list = ['S', 'H', 'D', 'C'] rank_list = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'] res = [Card(suit, rank) for suit in suit_list for rank in rank_list] res.append(Card('BJ', '')) res.append(Card('RJ', '')) return res
def init_54_deck(): """Initialize a standard deck of 52 cards, BJ and RJ Returns: (list): Alist of Card object """ suit_list = ["S", "H", "D", "C"] rank_list = [ "A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K" ] res = [Card(suit, rank) for suit in suit_list for rank in rank_list] res.append(Card("BJ", "")) res.append(Card("RJ", "")) return res
def init_euchre_deck(): ''' Initialize a standard deck of 52 cards Returns: (list): A list of Card object ''' suit_list = ['S', 'H', 'D', 'C'] rank_list = ['A', '9', 'T', 'J', 'Q', 'K'] res = [Card(suit, rank) for suit in suit_list for rank in rank_list] return res
def _reduce_meld_kinds_by_rank_id(self, card: Card): rank_id = utils.get_rank_id(card) meld_kinds = self.meld_kinds_by_rank_id[rank_id] if len(meld_kinds) > 1: suits = ['S', 'H', 'D', 'C'] self.meld_kinds_by_rank_id[rank_id] = [[ Card(suit, card.rank) for suit in suits if suit != card.suit ]] else: self.meld_kinds_by_rank_id[rank_id] = []
def init_simple_doudizhu_deck(): ''' Initialize a deck of 24 cards for simple Doudizhu Returns: (list): A list of Card object ''' suit_list = ['S', 'H', 'D', 'C'] rank_list = ['8', '9', 'T', 'J', 'Q', 'K', 'A'] res = [Card(suit, rank) for suit in suit_list for rank in rank_list] return res
def from_card_id(card_id: int) -> Card: ''' Make card from its card_id Args: card_id: int in range(0, 52) ''' assert 0 <= card_id < 52 rank_id = card_id % 13 suit_id = card_id // 13 rank = Card.valid_rank[rank_id] suit = Card.valid_suit[suit_id] return Card(rank=rank, suit=suit)
def card_from_card_id(card_id: int) -> Card: ''' Make card from its card_id Args: card_id: int in range(0, 52) ''' if not (0 <= card_id < 52): raise GinRummyProgramError( "card_id is {}: should be 0 <= card_id < 52.".format(card_id)) rank_id = card_id % 13 suit_id = card_id // 13 rank = Card.valid_rank[rank_id] suit = Card.valid_suit[suit_id] return Card(rank=rank, suit=suit)
def _increase_meld_kinds_by_rank_id(self, card: Card): rank_id = utils.get_rank_id(card) meld_kinds = self.meld_kinds_by_rank_id[rank_id] if len(meld_kinds) == 0: card_rank = card.rank meld_kind = [card for card in self.hand if card.rank == card_rank] if len(meld_kind) >= 3: self.meld_kinds_by_rank_id[rank_id].append(meld_kind) else: # must have all cards of given rank suits = ['S', 'H', 'D', 'C'] max_kind_meld = [Card(suit, card.rank) for suit in suits] self.meld_kinds_by_rank_id[rank_id] = [max_kind_meld] for meld_card in max_kind_meld: self.meld_kinds_by_rank_id[rank_id].append( [card for card in max_kind_meld if card != meld_card])
def __init__(self): ''' Initialize a leducholdem dealer class ''' self.deck = [ Card('S', 'J'), Card('H', 'J'), Card('S', 'Q'), Card('H', 'Q'), Card('S', 'K'), Card('H', 'K') ] self.shuffle() self.pot = 0
def test_is_in_cards(self): deck54 = init_54_deck() deck_standard = init_standard_deck() self.assertTrue(is_in_cards(deck54, deck_standard)) self.assertTrue(is_in_cards(deck54, [Card('BJ', ''), Card('RJ', '')])) self.assertFalse(is_in_cards(deck54, [Card('BJ', ''), Card('BJ', '')]))
def from_text(text: str) -> Card: assert len(text) == 2 return Card(rank=text[0], suit=text[1])
def test_is_single(self): self.assertTrue(is_single([Card('S', 'A')])) self.assertFalse(is_single([Card('S', 'A'), Card('BJ', '')]))
def test_is_pair(self): self.assertTrue(is_pair([Card('S', 'A'), Card('D', 'A')])) self.assertFalse( is_pair([Card('BJ', ''), Card('S', 'A'), Card('D', 'A')]))
def test_is_in_cards(self): deck54 = init_54_deck() deck_standard = init_standard_deck() deck54_plus_BJ = init_54_deck() deck54_plus_BJ.append(Card('BJ', '')) self.assertTrue(is_in_cards(deck54, deck_standard)) self.assertTrue(is_in_cards(deck54, [Card('BJ', ''), Card('RJ', '')])) self.assertFalse(is_in_cards(deck54, [Card('BJ', ''), Card('BJ', '')])) self.assertFalse(is_in_cards(deck54, [Card('BJ', ''), Card('BJ', ''), Card('D', '3')])) self.assertTrue(is_in_cards(deck54_plus_BJ, [Card('BJ', ''), Card('BJ', ''), Card('D', '3')]))
def card_from_text(text: str) -> Card: if len(text) != 2: raise GinRummyProgramError("len(text) is {}: should be 2.".format( len(text))) return Card(rank=text[0], suit=text[1])