Ejemplo n.º 1
0
    def _action_is_following(self, game, action):
        from gym_spades.envs.spades import cards

        if game.suit_lead == 5:  # no lead
            return 0
        elif cards.suit(action) == game.suit_lead:
            return 1
        return 0
Ejemplo n.º 2
0
    def _action_is_cutting(self, game, action):
        from gym_spades.envs.spades import cards

        if game.suit_lead == 5:  # no lead
            return 0
        elif cards.suit(
                action) == cards.SPADES and game.suit_lead != cards.SPADES:
            return 0
        return 1
Ejemplo n.º 3
0
    def _action_is_boss_in_suit(self, game, action):
        from gym_spades.envs.spades import cards

        s = cards.suit(action)

        discard = game.discard_by_suit[s]

        if len(discard) == 0:
            # if there's no cards played in this suit and we have the ace, ret 1
            if cards.rank(action) == cards.ACE:
                return 1
            return 0

        # TODO: figure out a faster way to do this
        for rank in range(cards.ACE, cards.TWO, -1):
            if cards.rank in discard:
                continue
            elif rank == cards.rank(self.hand_by_suit[s][-1]):
                return 1
            # not found in either
            return 0
Ejemplo n.º 4
0
    def _action_is_winning(self, game, action):

        if game.suit_lead == 5:
            # all first cards played are winning
            return 1

        if cards.suit(action) == cards.SPADES:
            if game.winning_suit != cards.SPADES:
                return 1
            elif game.winning_rank < cards.rank(action):
                # we're overtrumping
                return 1
            else:
                # someone else has a larger spade than action
                return 0
        else:
            if game.winning_suit == cards.SPADES:
                return 0
            elif game.winning_rank < cards.rank(action):
                # we're playing over
                return 1
            else:
                # someone else has a larger card in suit than action
                return 0
Ejemplo n.º 5
0
 def _can_win(self, game):
     for c in self.legal_cards:
         if cards.suit(c) == game.winning_suit:  # either lead or spades
             if cards.rank(c) > game.winning_rank:
                 return 1
     return 0
Ejemplo n.º 6
0
 def _num_suit_lead_in_round(self, game, action):
     if game.suit_lead == game.NO_LEAD:
         return game.num_suit_lead_in_round[cards.suit(action)]
     else:
         return game.num_suit_lead_in_round[game.suit_lead]