class Agent: def __init__(self, player, names): self.player = player self.name = names[player] self.observer = Observer(names) self.cards = [] def __str__(self): return self.name def start_game(self): self.observer.start_game() def start_round(self, card): self.observer.start_round(self.player, card) self.cards = [card] def report_draw(self, card): self.observer.report_draw(self.player, card) self.cards.append(card) def end_round(self, cards, winner): self.observer.end_round(cards, winner) def end_game(self, winner): pass def report_play(self, *k, **kw): self.observer.report_play(*k, **kw) player = kw['player'] card = kw['card'] target = kw.get('target', None) discard = kw.get('discard', None) new_card = kw.get('new_card', None) other_card = kw.get('other_card', None) loser = kw.get('loser', None) if self.player == player: self.cards.remove(card) if target is not None and not self.observer.players[target].handmaiden: if card == Cards.BARON and self.player == loser: self.cards.remove(discard) elif card == Cards.PRINCE and self.player == target: self.cards.remove(discard) self.cards.append(new_card) elif card == Cards.KING and self.player in (player, target): del self.cards[0] self.cards.append(other_card) def _get_required_play(self): if Cards.COUNTESS in self.cards: if Cards.PRINCE in self.cards or Cards.KING in self.cards: return {'card': Cards.COUNTESS} return None