Exemplo n.º 1
0
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
Exemplo n.º 2
0
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