def play(self, player, play_str): seat = self.get_seat_of_player(player) if not seat: self.tell_pre(player, "You're not playing!\n") return False elif seat != self.turn: self.tell_pre(player, "It's not your turn!\n") return False substate = self.state.get_sub() if substate != "play": self.tell_pre(player, "You should be drawing or retrieving, not playing!\n") return False # Translate the play string into an actual card. potential_card = str_to_card(play_str) if not potential_card: self.tell_pre(player, "That's not a valid card!\n") return False # Do they even have this card? if potential_card not in seat.data.hand: self.tell_pre(player, "You don't have that card!\n") return False # All right. Grab the hand for that expedition. exp_hand = seat.data.expeditions[self.suit_to_loc(potential_card.suit)].hand # If this card is a lower value than the top card of the hand, nope. if len(exp_hand) and potential_card < exp_hand[-1]: self.tell_pre(player, "You can no longer play this card on this expedition.\n") return False # If it's the same value and not an agreement, nope. elif (len(exp_hand) and potential_card == exp_hand[-1] and potential_card.rank != AGREEMENT): self.tell_pre(player, "You cannot play same-valued point cards on an expedition.\n") return False # Passed the tests. Play it and clear the discard tracker. exp_hand.add(seat.data.hand.discard_specific(potential_card)) self.just_discarded_to = None self.bc_pre("%s played %s.\n" % (self.get_sp_str(seat), card_to_str(potential_card, mode=LONG))) return True
def discard(self, player, play_str): seat = self.get_seat_of_player(player) if not seat: self.tell_pre(player, "You're not playing!\n") return False elif seat != self.turn: self.tell_pre(player, "It's not your turn!\n") return False substate = self.state.get_sub() if substate != "play": self.tell_pre(player, "You should be drawing or retrieving, not discarding!\n") return False # Translate the play string into an actual card. potential_card = str_to_card(play_str) if not potential_card: self.tell_pre(player, "That's not a valid card!\n") return False # Do they even have this card? if potential_card not in seat.data.hand: self.tell_pre(player, "You don't have that card!\n") return False # All right, they can discard it. Get the appropriate discard pile... discard_pile = self.discards[self.suit_to_loc(potential_card.suit)].hand discard_pile.add(seat.data.hand.discard_specific(potential_card)) # Note the pile we just discarded to, so the player can't just pick it # back up as their next play. self.just_discarded_to = potential_card.suit self.bc_pre("%s discarded %s.\n" % (self.get_sp_str(seat), card_to_str(potential_card, mode=LONG))) return True