Beispiel #1
0
 def defineTrump(self):
     cardNumber = random.randint(0, len(self._deck.cards) - 1)
     self.trumpCard = self._deck.cards.pop(cardNumber)
     self._deck.cards.insert(0, self.trumpCard)
     for card in self._deck.cards:
         if (card.suit == self.trumpCard.suit):
             card.value += 100
     print_(getText('TRUMP_CARD_IN_DECK').format(self.trumpCard.fullName()))
Beispiel #2
0
 def showCards(cards):
     cardLength = len(cards)
     print_(' ', end='')
     for x in range(0, cardLength):
         card = cards[x]
         separator = '  '
         if(x == cardLength-1): separator = ''
         print_(f'\033[96m{card.number}\033[00m.{card.fullName()}{separator}', end='')  
Beispiel #3
0
    def fillDeck(self):
        self.cards = []
        iterator = 1

        # # # TODO for tests
        # self.cards.append(Card('6', '♥', 1, 1))
        # self.cards.append(Card('7', '♥', 1, 2))
        # return

        for suit in self.__suits:
            for key,value in self.__cardset.items():
                if(self.__deckType == DeckType.Card36 and value < 6):
                    continue
                self.cards.append(Card(key, suit, iterator, value))
                iterator += 1
        print_ (getText('DECK_FILLED_BY_COUNT').format(str(len(self.cards))))
Beispiel #4
0
    def __nextPlayer(self):
        if (len(self._players) < 2):
            print_(getText('NEED_TWO_PLAYERS'))
            return

        try:
            self.__currentPlayer
        except AttributeError:
            self.__currentPlayer = self.__defineFirstMovePlayer()
            return self.__currentPlayer

        if (self.__currentPlayer is None):
            print_(getText('FIRST_PLAYER_NOT_DEFINED'))
            return
        index = self._players.index(self.__currentPlayer) + 1
        if (index > len(self._players) - 1):
            return self._players[0]
        else:
            return self._players[index]
Beispiel #5
0
 def __defineFirstMovePlayer(self):
     if (self.trumpCard == None):
         print_(getText('TRUMP_NOT_DEFINED'))
         return None
     minPlayerCard = {}
     for player in self._players:
         cards = filter(lambda x: x.suit == self.trumpCard.suit,
                        player.cards)
         minCard = min(cards, key=lambda x: x.number, default=None)
         if (minCard is None): continue
         minPlayerCard[player] = minCard
     playerFirstMove = min(minPlayerCard.items(),
                           key=lambda x: x[1].number,
                           default=None)
     if (playerFirstMove is None):
         print_(getText('PLAYERS_HAVE_NOT_TRUMPS'))
         index = random.randint(0, len(self._players) - 1)
         playerFirstMove = self._players[index]
     else:
         playerFirstMove = playerFirstMove[0]
     return playerFirstMove
Beispiel #6
0
 def print_Move(self, player, isMove):
     if (player.isBot):
         s = ''
         for x in range(0, len(self.cards)):
             if (x == 0 or x % 2 == 0):
                 separator = '' if x == 0 else '\n'
                 s += getText('PLAYER_MOVE').format(separator,
                                                    str(int(x / 2 + 1)),
                                                    self.playerMove.name)
             else:
                 s += getText('PLAYER_DEFENSE').format(
                     self.playerDefense.name)
             s += self.cards[x].fullName()
         print_(s, startWith='\n', endWith='\n')
     if (player is not None and self.isOver):
         if (isMove):
             print_(getText('PLAYER_END_MOVE').format(
                 '\033[42m', player.name, '\033[00m'),
                    startWith='\n',
                    endWith='\n')
         else:
             print_(getText('PLAYER_TAKE_CARDS').format(
                 '\033[41m', player.name, '\033[00m'),
                    startWith='\n',
                    endWith='\n')
Beispiel #7
0
def startGame():
    # Select game language
    language_exist = False
    while (not language_exist):
        language = input(
            getText('SELECT_LANGUAGE').format(getAvailableLanguages()))
        if (checkLanguageAvailable(language)):
            setLanguage(language)
            language_exist = True
        else:
            print_(getText('WRONG_LANGUAGE'))

    clear()

    name = input(getText('PLAYER_NAME'))
    # TODO for tests set 1 card
    durak = Durak([Player(name), Player('bot', True)], DeckType.Card36, 6)
    durak.fillDeck()
    durak.shuffleDeck()
    durak.defineTrump()
    durak.handOverCards()
    move = None
    loser = (None, None)
    while (not loser[0]):
        players = durak.nextPlayers(move)
        playerMove = players[0]
        playerDefense = players[1]
        move = Move(durak.trumpCard, playerMove, playerDefense)

        while (move.isOver == False and not loser[0]):
            playerMove.setCurrentMove(move)
            playerDefense.setCurrentMove(move)
            loser = durak.checkLoserExist()

        if (loser[0]):
            if (loser[1] != getText('EXIT')): startGame()
            return

        durak.handOverCards()
Beispiel #8
0
    def __userInput(self, move, isMove):
        taketext = getText('TAKE')
        passtext = getText('PASS')

        currentActionName = getText('YOUR_TURN').format(
            '\033[92m', self.name,
            '\033[00m') if isMove else getText('YOUR_DEFENSE').format(
                '\033[91m', self.name, '\033[00m')
        spacer = '##########'
        if (isMove and len(move.cards) > 0):
            print_(
                getText('ENTER_COMMAND_FOR_END_MOVE').format(
                    spacer, '\033[95m', passtext, '\033[00m'))
        elif (not isMove):
            print_(
                getText('ENTER_COMMAND_FOR_TAKE_CARDS').format(
                    spacer, '\033[95m', taketext, '\033[00m'))
        print_(
            getText('SHOW_TRUMP_CARD').format(spacer,
                                              move.trumpCard.fullName()))
        print_(getText('ENTER_CARD_NUMBER').format(spacer, currentActionName))
        while (True):
            Card.showCards(self.cards)
            cardNumber = input(': ')
            if (isMove and cardNumber == passtext and len(move.cards) > 1):
                self.__moveOver(move)
                return
            if (not isMove and cardNumber == taketext):
                self.__getCards(move)
                return
            card = self.__findCard(cardNumber)
            if (self.__checkAvailable(move, card) and move.add(self, card)):
                self.cards.remove(card)
                return
            else:
                print_(getText('WRONG_MOVE'))
Beispiel #9
0
 def checkLoserExist(self):
     playersWithCard = []
     for player in self._players:
         if (len(player.cards) > 0):
             playersWithCard.append(player)
     if (len(playersWithCard) == 1):
         print_(getText('PLAYER_LOSE').format('\033[44m', '\033[91m',
                                              playersWithCard[0].name,
                                              '\033[00m'),
                startWith='\n',
                endWith='\n')
         command = input(
             getText('END_OR_RESTART_GAME').format('\033[95m', '\033[00m'))
         return (True, command)
     elif (len(playersWithCard) == 0):
         print_(getText('PLAYERS_PLAY_DRAW').format('\033[44m', '\033[91m',
                                                    '\033[00m'),
                startWith='\n',
                endWith='\n')
         command = input(
             getText('END_OR_RESTART_GAME').format('\033[95m', '\033[00m'))
         return (True, command)
     else:
         return (False, None)
Beispiel #10
0
 def handOverCards(self):
     s = ''
     for player in self._players:
         s += player.handOverCards(self._deck, self._cardsInHand)
     print_(s.rstrip(), endWith='\n', startWith='\n')
Beispiel #11
0
 def shuffleDeck(self):
     if(len(self.cards) == 0):
         print_ (getText('NO_CARDS_IN_DECK'))
         return
     random.shuffle(self.cards)
     print_ (getText('DECK_SHUFFLED'))