牌型组成
顺子与刻子
将牌
任意一对相同的牌(如2个红中)。
"捉鸡"机制
"冲锋鸡"与"责任鸡"
杠牌加分
明杠、暗杠、补杠均会影响最终得分,通常按约定倍数计算。
def is_win(hand_tiles): # 步骤1:检查是否满足14张牌 if len(hand_tiles) != 14: return False # 步骤2:统计每种牌的数量 tile_count = {} for tile in hand_tiles: tile_count[tile] = tile_count.get(tile, 0) + 1 # 步骤3:尝试找将牌,然后检查剩余牌是否能组成顺子/刻子 for tile in tile_count: if tile_count[tile] >= 2: # 候选将牌 temp_count = tile_count.copy() temp_count[tile] -= 2 if check_melds(temp_count): return True return False def check_melds(count): # 递归或迭代检查是否能组成4组顺子/刻子 for tile in count: if count[tile] >= 3: # 刻子 count[tile] -= 3 if check_melds(count): return True count[tile] += 3 if is_sequence(tile): # 顺子(需实现同花色连续判断) if count.get(tile+1, 0) > 0 and count.get(tile+2, 0) > 0: count[tile] -= 1 count[tile+1] -= 1 count[tile+2] -= 1 if check_melds(count): return True count[tile] += 1 count[tile+1] += 1 count[tile+2] += 1 return all(v == 0 for v in count.values()) # 是否全部用完
有话要说...