Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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