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()
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))
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