Esempio n. 1
0
    def test_get_hand_bomb(self):
        all_cards = parse_cards("3334444555667")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.BOMB, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("4444"),
        ])
Esempio n. 2
0
    def test_get_hand_pass(self):
        all_cards = parse_cards("3452")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.PASS, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards(""),
        ])
Esempio n. 3
0
    def test_get_hand_rocket(self):
        all_cards = parse_cards("3334444555667LB")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.ROCKET, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("LB"),
        ])
Esempio n. 4
0
    def test_get_hand_triple(self):
        all_cards = parse_cards("33344445")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.TRIPLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("333"),
            parse_cards("444"),
        ])
Esempio n. 5
0
    def test_get_hand_plane_plus_double(self):
        all_cards = parse_cards("3334444555667")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards
                 ), _ in get_hands(HandKind.PLANE_PLUS_DOUBLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("3334445566"),
            parse_cards("4445553366"),
        ])
Esempio n. 6
0
    def test_get_hand_plane(self):
        all_cards = parse_cards("3334444555667")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.PLANE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("333444"),
            parse_cards("444555"),
            parse_cards("333444555"),
        ])
Esempio n. 7
0
    def test_get_hand_double_straight(self):
        all_cards = parse_cards("3334444556678900A22")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards
                 ), _ in get_hands(HandKind.DOUBLE_STRAIGHT, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("334455"),
            parse_cards("445566"),
            parse_cards("33445566"),
        ])
Esempio n. 8
0
    def test_get_hand_single(self):
        all_cards = parse_cards("3452")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.SINGLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("3"),
            parse_cards("4"),
            parse_cards("5"),
            parse_cards("2"),
        ])
Esempio n. 9
0
    def test_get_hand_quadruple_plus_double(self):
        all_cards = parse_cards("3334444555667")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards
                 ), _ in get_hands(HandKind.QUADRUPLE_PLUS_DOUBLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("44443355"),
            parse_cards("44443366"),
            parse_cards("44445566"),
        ])
Esempio n. 10
0
    def test_cards_sub(self):
        self.assertCountEqual(cards_sub(parse_cards(""), parse_cards("")),
                              parse_cards(""))

        self.assertCountEqual(
            cards_sub(parse_cards("34567JQK"), parse_cards("46JK")),
            parse_cards("357Q"))

        self.assertCountEqual(
            cards_sub(parse_cards("33445566"), parse_cards("345")),
            parse_cards("34566"))
Esempio n. 11
0
def gather_init_cards(msg):
    while True:
        card_symbols = input(msg).strip()
        illegal = filter_illegal_cards(card_symbols)

        if illegal:
            print("出现了规则外的输入 " + " ".join(illegal))
        else:
            break

    return tuple(sorted(parse_cards(card_symbols), reverse=True))
Esempio n. 12
0
    def test_get_hand_quadruple_plus_single(self):
        all_cards = parse_cards("3334444555667")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards
                 ), _ in get_hands(HandKind.QUADRUPLE_PLUS_SINGLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("444435"),
            parse_cards("444436"),
            parse_cards("444437"),
            parse_cards("444456"),
            parse_cards("444457"),
            parse_cards("444467"),
        ])
Esempio n. 13
0
    def test_get_hand_double(self):
        all_cards = parse_cards("333444456678900A22")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.DOUBLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("33"),
            parse_cards("44"),
            parse_cards("66"),
            parse_cards("00"),
            parse_cards("22"),
        ])
Esempio n. 14
0
    def test_get_hand_straight(self):
        all_cards = parse_cards("34567890A2")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards), _ in get_hands(HandKind.STRAIGHT, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("34567"),
            parse_cards("345678"),
            parse_cards("3456789"),
            parse_cards("34567890"),
            parse_cards("45678"),
            parse_cards("456789"),
            parse_cards("4567890"),
            parse_cards("56789"),
            parse_cards("567890"),
            parse_cards("67890"),
        ])
Esempio n. 15
0
    def test_cards_in(self):
        self.assertTrue(cards_in(parse_cards("3344"), parse_cards("334455")))

        self.assertFalse(cards_in(parse_cards("33445"), parse_cards("34455")))
Esempio n. 16
0
    def test_get_hand_plane_plus_single(self):
        all_cards = parse_cards("3334444555667")
        all_hand_cards = [
            hand_cards
            for (_, hand_cards
                 ), _ in get_hands(HandKind.PLANE_PLUS_SINGLE, all_cards)
        ]

        self.assertCountEqual(all_hand_cards, [
            parse_cards("33344445"),
            parse_cards("33344446"),
            parse_cards("33344447"),
            parse_cards("33344456"),
            parse_cards("33344457"),
            parse_cards("33344467"),
            parse_cards("44455534"),
            parse_cards("44455536"),
            parse_cards("44455537"),
            parse_cards("44455546"),
            parse_cards("44455547"),
            parse_cards("44455567"),
            parse_cards("333444555467"),
        ])
Esempio n. 17
0
    def test_cmp_hands(self):
        self.assertTrue(
            cmp_hands(
                (HandKind.SINGLE, parse_cards("2")),
                (HandKind.SINGLE, parse_cards("A")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.STRAIGHT, parse_cards("0JQKA")),
                (HandKind.STRAIGHT, parse_cards("90JQK")),
            ))
        self.assertFalse(
            cmp_hands(
                (HandKind.STRAIGHT, parse_cards("90JQKA")),
                (HandKind.STRAIGHT, parse_cards("90JQK")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.DOUBLE, parse_cards("22")),
                (HandKind.DOUBLE, parse_cards("AA")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.DOUBLE_STRAIGHT, parse_cards("00JJQQ")),
                (HandKind.DOUBLE_STRAIGHT, parse_cards("9900JJ")),
            ))
        self.assertFalse(
            cmp_hands(
                (HandKind.DOUBLE_STRAIGHT, parse_cards("00JJQQKK")),
                (HandKind.DOUBLE_STRAIGHT, parse_cards("9900JJ")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.TRIPLE, parse_cards("222")),
                (HandKind.TRIPLE, parse_cards("000")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.TRIPLE_PLUS_SINGLE, parse_cards("2223")),
                (HandKind.TRIPLE_PLUS_SINGLE, parse_cards("AAAB")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.TRIPLE_PLUS_DOUBLE, parse_cards("222AA")),
                (HandKind.TRIPLE_PLUS_DOUBLE, parse_cards("AAA22")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.PLANE, parse_cards("KKKAAA")),
                (HandKind.PLANE, parse_cards("QQQKKK")),
            ))
        self.assertFalse(
            cmp_hands(
                (HandKind.PLANE, parse_cards("QQQKKKAAA")),
                (HandKind.PLANE, parse_cards("QQQKKK")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.PLANE_PLUS_SINGLE, parse_cards("KKKAAA34")),
                (HandKind.PLANE_PLUS_SINGLE, parse_cards("QQQKKKA2")),
            ))
        self.assertFalse(
            cmp_hands(
                (HandKind.PLANE_PLUS_SINGLE, parse_cards("QQQKKKAAA345")),
                (HandKind.PLANE_PLUS_SINGLE, parse_cards("QQQKKKA2")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.PLANE_PLUS_DOUBLE, parse_cards("KKKAAA3344")),
                (HandKind.PLANE_PLUS_DOUBLE, parse_cards("QQQKKKAA22")),
            ))
        self.assertFalse(
            cmp_hands(
                (HandKind.PLANE_PLUS_DOUBLE, parse_cards("QQQKKKAAA334455")),
                (HandKind.PLANE_PLUS_DOUBLE, parse_cards("QQQKKKAA22")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.BOMB, parse_cards("2222")),
                (HandKind.BOMB, parse_cards("AAAA")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.QUADRUPLE_PLUS_SINGLE, parse_cards("222234")),
                (HandKind.QUADRUPLE_PLUS_SINGLE, parse_cards("AAAALB")),
            ))

        self.assertTrue(
            cmp_hands(
                (HandKind.QUADRUPLE_PLUS_DOUBLE, parse_cards("222233")),
                (HandKind.QUADRUPLE_PLUS_DOUBLE, parse_cards("AAAA22")),
            ))
Esempio n. 18
0
        for i, c in enumerate(cards):
            sep = 4 * i
            s[n] = s[n][:sep] + c[n]

    return "\n".join(s)


def shift_card_widgets(card_widgets, length):
    lines = card_widgets.splitlines()
    shift_lines = map(lambda l: ' ' * length + l, lines)
    return "\n".join(shift_lines)


def display_cards(cards, shift=0, style='op'):
    print(
        shift_card_widgets(
            merge_card_widgets(multi_card_widgets(cards, style)), shift))


def display_table(me, op, played_hand, by):
    os.system('clear')

    display_cards(op, 30, 'op')
    display_cards(played_hand[1], 15, by)
    display_cards(me, 0, 'me')


if __name__ == '__main__':
    cards = parse_cards("bl22aa33jkq45690")
    print(display_cards(cards, 30, 'me'))
Esempio n. 19
0
            me = cards_sub(me, played_hand[1])

            display_table(me, op, played_hand, 'me')

            if len(me) == 0:
                break

            while True:
                op_played = input("\n对手打出的牌 -> ").strip()

                illegal = filter_illegal_cards(op_played)
                if illegal:
                    print("出现了规则外的输入 " + " ".join(illegal))
                    continue

                op_played = parse_cards(op_played)

                legal = False
                for hand, rest in possible_hand(op, played_hand):
                    if sorted(hand[1]) == sorted(op_played):
                        played_hand = hand
                        op = rest

                        display_table(me, op, played_hand, 'op')

                        time.sleep(1)
                        legal = True
                        break
                if legal:
                    break