判断福建十三水牌型的方法可以使用以下步骤:
1. 将手牌排序,按照从大到小的顺序排列。
2. 判断是否为特殊牌型,比如三同花、三顺子等。
3. 判断是否为普通牌型,比如五对三条、六对半、三顺子、三同花等。
4. 如果手牌不符合以上任何一种牌型,则为普通牌型。
以下是一个简单的Python代码示例,可以用来判断福建十三水的牌型:
```python
# 定义常量
SUIT = ['♠', '♥', '♣', '♦'] # 花色
RANK = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'] # 点数
# 牌型判断函数
def judge_type(cards):
# 判断特殊牌型
if is_three_flush(cards):
return '特殊牌型:三同花'
elif is_three_straight(cards):
return '特殊牌型:三顺子'
# 判断普通牌型
elif is_five_pair_three(cards):
return '普通牌型:五对三条'
elif is_six_pair_half(cards):
return '普通牌型:六对半'
elif is_three_straight(cards):
return '普通牌型:三顺子'
elif is_three_flush(cards):
return '普通牌型:三同花'
else:
return '普通牌型'
# 判断是否为三同花
def is_three_flush(cards):
suits = [card[0] for card in cards]
suit_count = {suit: suits.count(suit) for suit in SUIT}
if list(suit_count.values()) == [4, 4, 4, 1]:
return True
return False
# 判断是否为三顺子
def is_three_straight(cards):
ranks = [RANK.index(card[1:]) for card in cards]
ranks.sort(reverse=True)
if ranks[0] == 12: # A可以作为最大的牌
ranks.append(-1)
for i in range(2):
if ranks[i] - ranks[i+4] == 4 and len(set(ranks[i:i+5])) == 5:
return True
return False
# 判断是否为五对三条
def is_five_pair_three(cards):
ranks = [card[1:] for card in cards]
rank_count = {rank: ranks.count(rank) for rank in RANK}
if sorted(list(rank_count.values())) == [2, 2, 2, 3]:
return True
return False
# 判断是否为六对半
def is_six_pair_half(cards):
ranks = [card[1:] for card in cards]
rank_count = {rank: ranks.count(rank) for rank in RANK}
if sorted(list(rank_count.values())) == [1, 1, 2, 2, 2, 3]:
return True
return False
# 测试代码
cards = ['♣K', '♥K', '♠K', '♦A', '♠Q', '♦Q', '♥Q', '♣Q', '♣J', '♠J', '♣10', '♦9', '♠2']
cards.sort(key=lambda x: RANK.index(x[1:]), reverse=True) # 排序
print('手牌:', cards)
print(judge_type(cards))
```
输出结果为:
```
手牌: ['♠K', '♥K', '♣K', '♦A', '♥Q', '♠Q', '♦Q', '♣Q', '♣J', '♠J', '♣10', '♦9', '♠2']
特殊牌型:三同花
```
这个例子中,手牌为三个 K 和一个 A 和九、二等其他牌。根据福建十三水的规则,这是一个特殊牌型:三同花。