def start_game(self): curr_id = 0 for c in self.__client_info: self.__client_info[c]["id"] = curr_id curr_id += 1 p_names = [ f"'{self.__client_info[c]['name']}':'{self.__client_info[c]['id']}'" for c in self.__client_info ] game_deck = Deck.full() game_deck.shuffle() suit_map = { "Spades": "0", "Diamonds": "1", "Clubs": "2", "Hearts": "3" } deck_str = ":".join([ f"'{suit_map[card.suit]}-{card.value}'" for card in game_deck.cards ]) send_deck = f"{Instruction.Game.SEND_DECK}:{deck_str}" for c in self.__client_sockets: self.__client_send_queue[c.getpeername()].append( Message.new_send_message(send_deck.encode("utf-8"))) c_id = self.__client_info[c.getpeername()]["id"] message_text = Instruction.START_GAME + f":'{c_id}':" + ":".join( p_names) message = Message.new_send_message(message_text.encode("utf-8")) self.__client_send_queue[c.getpeername()].append(message) player_decks = game_deck.deal(len(self.__client_sockets)) # setup the decks in the order that each player will hold their IDs for d in player_decks: self.__decks.append(d) self.__decks.append(Deck.empty()) for i in range(4): self.__decks.append(Deck.empty()) self.__inst_queue.append( lambda: print(f"Starting game with: {', '.join(p_names)}")) self.__game_running = True
def __init__(self, cards, name, player_id, local_active_player=False): self.face_down = cards self.face_up = Deck.empty() self.player_id = player_id self.face_down.deck_id = 2 * player_id self.face_up.deck_id = 2 * player_id + 1 self.name = name self.__name_text = Text(self.name, font_hierarchy=["Verdana"]) self.local_active_player = local_active_player self.__flipped_card = None
def setup_game(self, active_player, players): self.__active_player = active_player self.n_players = len(players) # self.deck = Deck.full() # self.deck.shuffle() piles = self.deck.deal(self.n_players) for (i, pile), name in zip(enumerate(piles), map(lambda x: x[0], players)): self.players.append(Player(pile, name, i, i == active_player)) self.__turn = 0 self.update_turn_label() self.__flip_button.subscribe_event(self.flip_deck) for i in range(4): p = Deck.empty() p.deck_id = len(players) * 2 + i self.center_piles.append(p)
def flip_deck(self): self.face_down = Deck(self.face_up.cards[::-1]) self.face_up = Deck.empty() self.face_down.deck_id = 2 * self.player_id self.face_up.deck_id = 2 * self.player_id + 1