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()))
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='')
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))))
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]
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
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')
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()
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'))
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)
def handOverCards(self): s = '' for player in self._players: s += player.handOverCards(self._deck, self._cardsInHand) print_(s.rstrip(), endWith='\n', startWith='\n')
def shuffleDeck(self): if(len(self.cards) == 0): print_ (getText('NO_CARDS_IN_DECK')) return random.shuffle(self.cards) print_ (getText('DECK_SHUFFLED'))