def valid_card_played(self, player_idx, card_idx, card, n_clues): r"""Learn that a playable card was played. Even when this player's card was played, the game lets all players know of a valid play. Parameters ---------- player_idx : int Relative index of the player who played the card. card_idx : int Index of the card played in the players hand. card : int Card index of the played card. n_clues : int Number of clues remaining after card was played. """ self.table += util.card2info(card) self.n_clues = n_clues keep_inds = np.where( np.arange(self.n_cards[player_idx]) != card_idx)[0] self.n_cards[player_idx] -= 1 self.hands[player_idx][:self.n_cards[player_idx], ...] = self.hands[player_idx][keep_inds, ...] self.hands[player_idx][self.n_cards[player_idx], ...] = util.CARD_ZEROS return
def card_dealt(self, player_idx, card, n_cards): r"""Learn that a card was dealt. Even when this player is dealt a card, the game lets all players know of a deal. Card is always dealt to the right-most position, with all other cards shifting left. Parameters ---------- player_idx : int Relative index of the player who was dealt a card. card : int or empty Card index of the dealt card, or empty if this player got the new card. n_cards : int Number of cards in receiving player's hand after card was dealt. """ self.n_cards[player_idx] += 1 assert (self.n_cards[player_idx] == n_cards) if player_idx == -1 or player_idx == self.n_players: self.hands[player_idx][self.n_cards[player_idx] - 1, ...] = cards_possible( self.table, self.discards, self.hands[:-1, ...]) else: card_info = util.card2info(card) self.hands[player_idx][self.n_cards[player_idx] - 1, ...] = card_info self.hands[-1][:self.n_cards[player_idx], ...] -= card_info return
def invalid_card_played(self, player_idx, card_idx, card, n_fuses): r"""Learn that an unplayable card was played. Even when this player's card was played, the game lets all players know of an invalid play. Parameters ---------- player_idx : int Relative index of the player who played the card. card_idx : int Index of the card played in the players hand. card : int Card index of the played card. n_fuses : int Number of fuses remaining after card was played. """ self.discards += util.card2info(card) self.n_fuses = n_fuses self.reduce_hand(player_idx, card_idx) return
def card_discarded(self, player_idx, card_idx, card, n_clues): r"""Learn that a card was discarded. Even when this player's card was discarded, the game lets all players know of a discard. Parameters ---------- player_idx : int Relative index of the player who discarded the card. card_idx : int Index of the card discarded in the players hand. card : int Card index of the discarded card. n_clues : int Number of clues remaining after card was discarded. """ self.discards += util.card2info(card) self.n_clues = n_clues self.reduce_hand(player_idx, card_idx) return