def __init__(self): self.trace = [] self.played_cards = np.zeros((len(CARD_RANK_STR), ), dtype=np.int) self.greater_player = None self.dealer = Dealer() self.deck_str = cards2str(self.dealer.deck)
def _get_others_current_hand(self, player): player_up = self.players[get_upstream_player_id(player, self.players)] player_down = self.players[get_downstream_player_id( player, self.players)] others_hand = merge(player_up.current_hand, player_down.current_hand, key=functools.cmp_to_key(doudizhu_sort_card)) return cards2str(others_hand)
def deal_cards(self, players): ''' Deal cards to players Args: players (list): list of DoudizhuPlayer objects ''' hand_num = (len(self.deck) - 3) // len(players) for index, player in enumerate(players): current_hand = self.deck[index * hand_num:(index + 1) * hand_num] current_hand.sort(key=functools.cmp_to_key(doudizhu_sort_card)) player.set_current_hand(current_hand) player.initial_hand = cards2str(player.current_hand)
def initiate(self, players): ''' Call dealer to deal cards and bid landlord. Args: players (list): list of DoudizhuPlayer objects ''' landlord_id = self.dealer.determine_role(players) seen_cards = self.dealer.deck[-3:] seen_cards.sort(key=functools.cmp_to_key(doudizhu_sort_card)) self.seen_cards = cards2str(seen_cards) self.landlord_id = landlord_id self.current_player = landlord_id self.public = {'deck': self.deck_str, 'seen_cards': self.seen_cards, 'landlord': self.landlord_id, 'trace': self.trace, 'played_cards': []}
def determine_role(self, players): ''' Determine landlord and peasants according to players' hand Args: players (list): list of DoudizhuPlayer objects Returns: int: landlord's player_id ''' # deal cards self.shuffle() self.deal_cards(players) players[0].role = 'landlord' self.landlord = players[0] players[1].role = 'peasant' players[2].role = 'peasant' #players[0].role = 'peasant' #self.landlord = players[0] ## determine 'landlord' #max_score = get_landlord_score( # cards2str(self.landlord.current_hand)) #for player in players[1:]: # player.role = 'peasant' # score = get_landlord_score( # cards2str(player.current_hand)) # if score > max_score: # max_score = score # self.landlord = player #self.landlord.role = 'landlord' # give the 'landlord' the three cards self.landlord.current_hand.extend(self.deck[-3:]) self.landlord.current_hand.sort( key=functools.cmp_to_key(doudizhu_sort_card)) self.landlord.initial_hand = cards2str(self.landlord.current_hand) return self.landlord.player_id