Пример #1
0
    def test_bigger_flush(self):
        for i in range(num_tests):
            cards_a = Stack()
            cards_b = Stack()
            suit = random.choice(SUITS[:2])
            values = random.sample(VALUES, 5)

            for value in values:
                cards_a.add(Card(value, suit))

            if get_cards_type(cards_a) == STRAIGHT_FLUSH:
                continue

            if suit == "Hearts":
                suit = "Spades"
            else:
                suit = random.choice(SUITS[(SUITS.index(suit) + 1):])

            values = random.sample(VALUES, 5)
            for value in values:
                cards_b.add(Card(value, suit))

            if get_cards_type(cards_b) == STRAIGHT_FLUSH:
                continue

            self.assertTrue(are_cards_bigger(cards_a, cards_b))
Пример #2
0
    def test_flush(self):
        for i in range(num_tests):
            cards = Stack()
            suit = random.choice(SUITS)

            for value in random.sample(VALUES, 5):
                cards.add(Card(value, suit))

            if get_cards_type(cards) == STRAIGHT_FLUSH:
                continue

            self.assertEqual(get_cards_type(cards), FLUSH)
Пример #3
0
    def test_diff_suit_dragon(self):
        for i in range(num_tests):
            cards = Stack(cards=[Card(VALUES[0], SUITS[0]), Card(VALUES[1], SUITS[1])])

            for value in VALUES[2:]:
                cards.add(Card(value, random.choice(SUITS)))
            self.assertEqual(get_cards_type(cards), DRAGON)
Пример #4
0
    def test_invalid(self):
        cards = Stack(cards=[Card("3", SUITS[0]), Card("8", SUITS[1])])
        self.assertEqual(get_cards_type(cards), -1)

        cards = Stack(cards=[Card("3", SUITS[0]), Card("4", SUITS[0]), Card("8", SUITS[1])])
        self.assertEqual(get_cards_type(cards), -1)

        cards = Stack(cards=[Card("3", SUITS[0]), Card("4", SUITS[0]), Card("5", SUITS[0]), Card("8", SUITS[1])])
        self.assertEqual(get_cards_type(cards), -1)

        cards = Stack(cards=[Card("3", SUITS[0]), Card("4", SUITS[0]), Card("5", SUITS[0]), Card("6", SUITS[0]),
                             Card("8", SUITS[1])])
        self.assertEqual(get_cards_type(cards), -1)

        cards = Stack(cards=[Card("3", SUITS[0]), Card("4", SUITS[0]), Card("5", SUITS[0]), Card("6", SUITS[0]),
                             Card("7", SUITS[0]), Card("8", SUITS[0])])
        self.assertEqual(get_cards_type(cards), -1)
Пример #5
0
    def test_same_suit_dragon(self):
        for i in range(num_tests):
            cards = Stack()
            suit = random.choice(SUITS)

            for value in VALUES:
                cards.add(Card(value, suit))

            self.assertEqual(get_cards_type(cards), SAME_SUIT_DRAGON)
Пример #6
0
    def test_pair(self):
        for i in range(num_tests):
            cards = Stack()
            value = random.choice(VALUES)

            for suit in random.sample(SUITS, 2):
                cards.add(Card(value, suit))

            self.assertEqual(get_cards_type(cards), PAIR)
Пример #7
0
    def test_three_of_a_kind(self):
        for i in range(num_tests):
            cards = Stack()
            value = random.choice(VALUES)

            for suit in random.sample(SUITS, 3):
                cards.add(Card(value, suit))

            self.assertEqual(get_cards_type(cards), THREE_OF_A_KIND)
Пример #8
0
    def test_straight_flush(self):
        for i in range(num_tests):
            suit = random.choice(SUITS)

            cards = Stack(cards=[Card("Ace", suit), Card("2", suit), Card("3", suit), Card("4", suit), Card("5", suit)])
            self.assertEqual(get_cards_type(cards), STRAIGHT_FLUSH)

            cards = Stack(cards=[Card("2", suit), Card("3", suit), Card("4", suit), Card("5", suit), Card("6", suit)])
            self.assertEqual(get_cards_type(cards), STRAIGHT_FLUSH)

            cards = Stack(cards=[Card("Jack", suit), Card("Queen", suit), Card("King", suit), Card("Ace", suit),
                                 Card("2", suit)])
            self.assertEqual(get_cards_type(cards), STRAIGHT_FLUSH)

            cards = Stack()
            start_index = random.randint(1, 8)

            for index in range(start_index, start_index + 5):
                cards.add(Card(VALUES[index], suit))

            self.assertEqual(get_cards_type(cards), STRAIGHT_FLUSH)
Пример #9
0
    def test_straight(self):
        for i in range(num_tests):
            cards = Stack(cards=[Card("Ace", SUITS[0]), Card("2", SUITS[1]), Card("3", random.choice(SUITS)),
                                 Card("4", random.choice(SUITS)), Card("5", random.choice(SUITS))])
            self.assertEqual(get_cards_type(cards), STRAIGHT)

            cards = Stack(cards=[Card("2", SUITS[0]), Card("3", SUITS[1]), Card("4", random.choice(SUITS)),
                                 Card("5", random.choice(SUITS)), Card("6", random.choice(SUITS))])
            self.assertEqual(get_cards_type(cards), STRAIGHT)

            cards = Stack(cards=[Card("Jack", SUITS[0]), Card("Queen", SUITS[1]), Card("King", random.choice(SUITS)),
                                 Card("Ace", random.choice(SUITS)), Card("2", random.choice(SUITS))])
            self.assertEqual(get_cards_type(cards), STRAIGHT)

            cards = Stack()
            start_index = random.randint(1, 8)
            cards.add([Card(VALUES[start_index], SUITS[0]), Card(VALUES[start_index + 1], SUITS[1])])

            for index in range(start_index + 2, start_index + 5):
                cards.add(Card(VALUES[index], random.choice(SUITS)))

            self.assertEqual(get_cards_type(cards), STRAIGHT)
Пример #10
0
    def test_four_of_a_kind(self):
        for i in range(num_tests):
            cards = Stack()
            values = list(VALUES)
            four_value = random.choice(values)
            values.remove(four_value)
            extra_value = random.choice(values)

            for suit in SUITS:
                cards.add(Card(four_value, suit))
            cards.add(Card(extra_value, random.choice(SUITS)))

            self.assertEqual(get_cards_type(cards), FOUR_OF_A_KIND)
Пример #11
0
    def test_full_house(self):
        for i in range(num_tests):
            cards = Stack()
            values = list(VALUES)
            three_value = random.choice(values)
            values.remove(three_value)
            two_value = random.choice(values)

            for suit in random.sample(SUITS, 3):
                cards.add(Card(three_value, suit))

            for suit in random.sample(SUITS, 2):
                cards.add(Card(two_value, suit, ))

            self.assertEqual(get_cards_type(cards), FULL_HOUSE)
Пример #12
0
def use_selected_cards(bot, player_tele_id, group_tele_id, message_id, job_queue):
    install_lang(player_tele_id)
    valid = True
    bigger = True

    session = scoped_session(session_factory)
    s = session()
    game, player = s.query(Game, Player). \
        filter(Game.group_tele_id == group_tele_id, Player.group_tele_id == group_tele_id,
               Player.player_id == Game.curr_player).first()
    game_round, curr_player, biggest_player, curr_cards, prev_cards = \
        game.game_round, game.curr_player, game.biggest_player, game.curr_cards, game.prev_cards
    player_name, num_cards = player.player_name, player.num_cards

    if curr_cards.size == 0:
        return

    # if get_cards_type(curr_cards) == -1 or (game_round == 1 and not curr_cards.find("3D")) or \
    #         (curr_player != biggest_player and prev_cards.size != 0 and prev_cards.size != curr_cards.size):
    if get_cards_type(curr_cards) == -1 or \
            (curr_player != biggest_player and prev_cards.size != 0 and prev_cards.size != curr_cards.size):
        valid = False

    if valid and curr_player != biggest_player and not are_cards_bigger(prev_cards, curr_cards):
        bigger = False

    if not valid or not bigger:
        session.remove()
        return_cards_to_deck(group_tele_id)

        if not valid:
            message = _("Invalid cards. Please try again\n")
        else:
            message = _("You cards are not bigger than the previous cards. ")
            message += _("Please try again\n")
    else:
        message = _("These cards have been used:\n")
        for card in curr_cards:
            message += suit_unicode(card.suit)
            message += " "
            message += str(card.value)
            message += "\n"
        bot.editMessageText(message, player_tele_id, message_id)

        new_num_cards = num_cards - curr_cards.size
        if new_num_cards == 0:
            finish_game(bot, group_tele_id, player_tele_id, curr_player, player_name, curr_cards, job_queue)
            return

        game.curr_cards = pydealer.Stack()
        game.prev_cards = curr_cards
        player.num_cards = new_num_cards
        s.commit()
        session.remove()
        advance_game(bot, group_tele_id, curr_player, player_name, curr_cards)

    if valid and bigger:
        player_message(bot, group_tele_id, job_queue)
    else:
        player_message(bot, group_tele_id, job_queue, is_edit=True, message_id=message_id)
        bot.send_message(player_tele_id, message)
Пример #13
0
    def test_single(self):
        for i in range(num_tests):
            cards = Stack(cards=[Card(random.choice(VALUES), random.choice(SUITS))])

            self.assertEqual(get_cards_type(cards), SINGLE)