牌型组成
顺子与刻子
将牌
任意一对相同的牌(如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()) # 是否全部用完
有话要说...