예제 #1
0
    def _deckArrived(self, players, ourNr, ourDeck):
        """
        The network give us our number and our deck. Display it on the table
        """
        assert(isinstance(ourNr, int))
        assert(isinstance(ourDeck, list))
        self.Playing.emit()

        self.imageDeck = {}
        self.playerNr = ourNr

        # Identify our place on the table
        frame = None
        if ourNr == 0:
            frame = self.topCard_2
        elif ourNr == 1:
            frame = self.leftCard_2
        elif ourNr == 2:
            frame = self.downCard_2
        elif ourNr == 3:
            frame = self.rightCard_2

        frame.setFrameShadow(QFrame.Raised)

        # Set names
        for player in players.split(";")[:-1]:
            nr = int(player.split(":")[0])
            name = str(player.split(":")[1])
            if nr == 0:
                self.labelTop.setText(name)
            elif nr == 1:
                self.labelLeft.setText(name)
            elif nr == 2:
                self.labelDown.setText(name)
            elif nr == 3:
                self.labelRight.setText(name)

        # Do our ui deck
        for card in ourDeck:
            label = CardContainer(self)
            imageCard = Card(card, label)
            label.cardClicked.connect(self._cardClicked)

            imageCard.load("media/" + card + ".gif")
            self.imageDeck[card] = label
            label.setPixmap(imageCard)
            self.allCards.addWidget(label)

        self.sendCardButton.setEnabled(True)
        self.state = "3C"
예제 #2
0
    def _cardPlayed(self, playerNr, playerName, card):
        """
        The player played a card.
        If the user don't want updates, simply memorize it. Else, we need
        to display (on the right place) the card played.
        """
        card = str(card)
        assert(isinstance(playerNr, int))

        if self.mustMemHand:
            self.cardPlayedInHand[playerNr] = (playerName, card,)
            return

        # If we are not obs and we play a card, remove it from the
        # deck displayed
        if not self.isObs and playerNr == self.playerNr:
            assert(card in self.imageDeck)
            cardContainer = self.imageDeck.pop(card)
            self.allCards.removeWidget(cardContainer)
            cardContainer.deleteLater()

        # Make a new visible card and place it on the table
        label = CardContainer(self)
        imageCard = Card(card, label)
        imageCard.load("media/" + card + ".gif")
        label.setPixmap(imageCard)

        assert(playerNr <= 3 and playerNr >= 0)
        if playerNr == 0:
            self.topCard.addWidget(label)
            self.labelTop.setText(playerName)
        elif playerNr == 1:
            self.leftCard.addWidget(label)
            self.labelLeft.setText(playerName)
        elif playerNr == 2:
            self.downCard.addWidget(label)
            self.labelDown.setText(playerName)
        elif playerNr == 3:
            self.rightCard.addWidget(label)
            self.labelRight.setText(playerName)
예제 #3
0
    def _cArrived(self, deck):
        """
        The network inform us that a new deck, with the 3 cards received
        from the initial passing, has arrived.
        """
        assert(isinstance(deck, list))
        # TODO: Sto rifacendo tutto da 0. Non sarebbe meglio fare un 
        # update del vecchio?
        for v in self.imageDeck.values():
            v.deleteLater()
        self.imageDeck.clear()

        for card in deck:
            label = CardContainer(self)
            imageCard = Card(card, label)
            label.cardClicked.connect(self._cardClicked)

            imageCard.load("media/" + card + ".gif")
            self.imageDeck[card] = label
            label.setPixmap(imageCard)
            self.allCards.addWidget(label)

        self.state = "P"