Exemplo n.º 1
0
 def exposeMeld(self, meldTiles, calledTile=None):
     """exposes a meld with meldTiles: removes them from concealedTileNames,
     adds the meld to exposedMelds and returns it
     calledTile: we got the last tile for the meld from discarded, otherwise
     from the wall"""
     game = self.game
     game.activePlayer = self
     allMeldTiles = meldTiles[:]
     if calledTile:
         allMeldTiles.append(calledTile.element if isinstance(calledTile, Tile) else calledTile)
     if len(allMeldTiles) == 4 and allMeldTiles[0].islower():
         tile0 = allMeldTiles[0].lower()
         # we are adding a 4th tile to an exposed pung
         self._exposedMelds = [meld for meld in self._exposedMelds if meld.pairs != [tile0] * 3]
         meld = Meld(tile0 * 4)
         self.__concealedTileNames.remove(allMeldTiles[3])
         self.visibleTiles[tile0] += 1
     else:
         allMeldTiles = sorted(allMeldTiles) # needed for Chow
         meld = Meld(allMeldTiles)
         for meldTile in meldTiles:
             self.__concealedTileNames.remove(meldTile)
         for meldTile in allMeldTiles:
             self.visibleTiles[meldTile.lower()] += 1
         meld.expose(bool(calledTile))
     self._exposedMelds.append(meld)
     self.__hand = None
     game.computeDangerous(self)
     adding = [calledTile] if calledTile else None
     self.syncHandBoard(adding=adding)
     return meld