Beispiel #1
0
    def make_buro_from_buro_code(buro_code):
        buro_prefix = buro_code[:2]
        buro_tile_code = buro_code[2:4]
        buro_etc_param = buro_code[4:]
        buro_tile = Tile(Tile.calc_tile_num(buro_tile_code))

        if buro_prefix == BuroConstant.CHI_CODE:
            buro_tile1 = Tile(Tile.calc_tile_num(buro_etc_param[:2]))
            buro_tile2 = Tile(Tile.calc_tile_num(buro_etc_param[2:]))
            return Chi(buro_tile, buro_tile1, buro_tile2)

        elif buro_prefix == BuroConstant.PON_CODE:
            return Pon(buro_tile, int(buro_etc_param))

        elif buro_prefix == BuroConstant.BIG_MELDED_KAN_CODE:
            return BigMeldedKan(buro_tile, int(buro_etc_param))

        elif buro_prefix == BuroConstant.SMALL_MELDED_KAN_CODE:
            return SmallMeldedKan(buro_tile, int(buro_etc_param))

        elif buro_prefix == BuroConstant.CONCEALED_KAN_CODE:
            assert len(buro_etc_param) == 0
            return ConcealedKan(buro_tile)
        else:
            raise ValueError()
Beispiel #2
0
def main():
    rule = Rule()
    hcc = HandCompleteChecker(rule)
    print("화료점 계산기")
    while True:
        hand_code = input("손패 코드 입력하세요: (exit 입력으로 종료)")
        if hand_code == "exit":
            return
        try:
            hand = PlayerHand(hand_code)
        except:
            print("코드가 이상하다.")
            continue
        print(hand)

        agari_tile_code = input("화료 패 코드 입력하세요: ")
        try:
            agari_tile = Tile(Tile.calc_tile_num(agari_tile_code))
        except:
            print("코드가 이상하다.")
            continue
        print(agari_tile)

        agari_type_num = input("론인가 쯔모인가: (0/1)")
        try:
           agari_type = HandForPointCalcConstant.AGARI_TYPES[int(agari_type_num)]
        except:
            print("코드가 이상하다.")
            continue
        print(agari_type)

        hand_pc = HandForPointCalc(hand, agari_tile, agari_type,
                          HandForPointCalcConstant.EAST, HandForPointCalcConstant.EAST)

        print("점수 :", PointCalculator(rule).calc_agari_status(hand_pc))
Beispiel #3
0
    def parse(hand_code):
        index = 0
        invisible_hand = InvisibleHand()
        visible_hand = VisibleHand()

        hand_code_split = hand_code.split(':')

        while index < len(hand_code_split[0]):
            tile_num = Tile.calc_tile_num(hand_code_split[0][index:index + 2])
            assert tile_num in TileConstant.TILE_NUMS
            invisible_hand.append(Tile(tile_num))
            index = index + 2

        for buro_code in hand_code_split[1:]:
            visible_hand.append(BuroFactory.make_buro_from_buro_code(buro_code))

        return invisible_hand, visible_hand