def card_str(self, who): color_str = "^w" if who == self.last_played: color_str = "^W" card_str = " " if who == EAST: card_str = card_to_str(self.east_card) elif who == SOUTH: card_str = card_to_str(self.south_card) elif who == WEST: card_str = card_to_str(self.west_card) return "%s%s^~" % (color_str, card_str)
def new_deal(self): dealer_name = self.dealer.player_name self.bc_pre("^R%s^~ (%s%s^~) gives the cards a good shuffle...\n" % (dealer_name, self.get_color_code(self.dealer), self.dealer)) deck = new_deck() deck.shuffle() # Deal out all of the cards. We'll flip the last one; that determines # the trump suit for the hand. self.bc_pre("^R%s^~ deals the cards out to all the players.\n" % dealer_name) for seat in self.seats: seat.data.hand = Hand() for i in range(13): for seat in self.seats: seat.data.hand.add(deck.discard()) # Flip the dealer's last card; it determines the trump suit. last_card = self.dealer.data.hand[-1] self.bc_pre("^R%s^~ flips their last card; it is ^C%s^~.\n" % (dealer_name, card_to_str(last_card, LONG))) self.trump_suit = last_card.suit # Sort everyone's hands. for seat in self.seats: seat.data.hand = sorted_hand(seat.data.hand, self.trump_suit) # Show everyone their hands. self.show_hands() # Set the trick counts to zero. self.ns.tricks = 0 self.ew.tricks = 0
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 # 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 # Okay, it's a card in their hand. First, let's do the "follow the # led suit" business. action_str = "^Wplays^~" if self.led_suit: this_suit = potential_card.suit if (this_suit != self.led_suit and hand_has_suit(seat.data.hand, self.led_suit)): # You can't play off-suit if you can match the led suit. self.tell_pre(player, "You can't throw off; you have the led suit.\n") return False else: # No led suit; they're the leader. action_str = "^Yleads^~ with" self.led_suit = potential_card.suit # They either matched the led suit, didn't have any of it, or they # are themselves the leader. Nevertheless, their play is valid. seat.data.card = potential_card self.trick.add(seat.data.hand.discard_specific(potential_card)) trump_str = "" if potential_card.suit == self.trump_suit: trump_str = ", a ^Rtrump^~" self.bc_pre("%s %s ^C%s^~%s.\n" % (self.get_sp_str(seat), action_str, card_to_str(potential_card, LONG), trump_str)) self.layout.place(seat.data.who, potential_card) return potential_card
def finish_trick(self): # Okay, we have a trick with four cards. Which card won? winner = handle_trick(self.trick, self.trump_suit) # This /should/ just return one seat... winning_seat_list = [x for x in self.seats if x.data.card == winner] if len(winning_seat_list) != 1: self.server.log.log( self.log_prefix + "Something went horribly awry; trick ended without a finish.") self.bc_pre( "Something went horribly wrong; no one won the trick! Tell the admin.\n" ) return winning_seat = winning_seat_list[0] # Print information about the winning card. self.bc_pre("%s wins the trick with ^C%s^~.\n" % (self.get_sp_str(winning_seat), card_to_str(winner, LONG))) # If there are four players, give the trick to the correct partnership. if self.mode == 4: if winning_seat == self.seats[0] or winning_seat == self.seats[2]: self.ns.tricks += 1 else: self.ew.tricks += 1 else: winning_seat.data.tricks += 1 # Clear the trick. self.clear_trick() # Set the next leader to the player who won. self.turn = winning_seat self.layout.change_turn(self.turn.data.who) if self.turn.player: self.show_hand(self.turn.player)
def new_deal(self): dealer_name = self.dealer.player_name self.bc_pre( "^R%s^~ (%s%s^~) gives the cards a good shuffle...\n" % (dealer_name, self.get_color_code(self.dealer), self.dealer)) deck = new_deck() deck.shuffle() # Deal out all of the cards. We'll flip the last one; that determines # the trump suit for the hand. self.bc_pre("^R%s^~ deals the cards out to all the players.\n" % dealer_name) for seat in self.seats: seat.data.hand = Hand() for i in range(13): for seat in self.seats: seat.data.hand.add(deck.discard()) # Flip the dealer's last card; it determines the trump suit. last_card = self.dealer.data.hand[-1] self.bc_pre("^R%s^~ flips their last card; it is ^C%s^~.\n" % (dealer_name, card_to_str(last_card, LONG))) self.trump_suit = last_card.suit # Sort everyone's hands. for seat in self.seats: seat.data.hand = sorted_hand(seat.data.hand, self.trump_suit) # Show everyone their hands. self.show_hands() # Set the trick counts to zero. self.ns.tricks = 0 self.ew.tricks = 0
def finish_trick(self): # Okay, we have a trick with four cards. Which card won? winner = handle_trick(self.trick, self.trump_suit) # This /should/ just return one seat... winning_seat_list = [x for x in self.seats if x.data.card == winner] if len(winning_seat_list) != 1: self.server.log.log(self.log_prefix + "Something went horribly awry; trick ended without a finish.") self.bc_pre("Something went horribly wrong; no one won the trick! Tell the admin.\n") return winning_seat = winning_seat_list[0] # Print information about the winning card. self.bc_pre("%s wins the trick with ^C%s^~.\n" % (self.get_sp_str(winning_seat), card_to_str(winner, LONG))) # If there are four players, give the trick to the correct partnership. if self.mode == 4: if winning_seat == self.seats[0] or winning_seat == self.seats[2]: self.ns.tricks += 1 else: self.ew.tricks += 1 else: winning_seat.data.tricks += 1 # Clear the trick. self.clear_trick() # Set the next leader to the player who won. self.turn = winning_seat self.layout.change_turn(self.turn.data.who) if self.turn.player: self.show_hand(self.turn.player)
def new_deal(self): # Set tricks and bids to zero. for seat in self.seats: seat.data.tricks = 0 seat.data.bid = 0 dealer_name = self.dealer.player_name self.bc_pre("^R%s^~ (%s%s^~) gives the cards a good shuffle...\n" % (dealer_name, self.get_color_code(self.dealer), self.dealer)) deck = new_deck() deck.shuffle() # Deal out all of the cards. self.bc_pre("^R%s^~ deals the cards out to all of the players.\n" % dealer_name) for seat in self.seats: seat.data.hand = Hand() for _ in range(13): for seat in self.seats: seat.data.hand.add(deck.discard()) # If we're in whist mode, flip the dealer's last card to determine # trumps. if self.whist: last_card = self.dealer.data.hand[-1] self.bc_pre("^R%s^~ flips their last card; it is ^C%s^~.\n" % (dealer_name, card_to_str(last_card, LONG))) self.trump_suit = last_card.suit else: # Hearts forever. self.trump_suit = HEARTS # Sort everyone's hands and show them to everyone. for seat in self.seats: seat.data.hand = sorted_hand(seat.data.hand, self.trump_suit) self.show_hands()