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"), ])
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(""), ])
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"), ])
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"), ])
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"), ])
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"), ])
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"), ])
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"), ])
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"), ])
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"))
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))
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"), ])
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"), ])
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"), ])
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")))
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"), ])
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")), ))
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'))
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