使用枚举类,抽象类进行遍历实现类,匹配响应的牌型(十三水特殊牌型)

本文介绍了一种用于识别十三水游戏中特殊牌型的抽象类SpecialPokerRegularSss及其实现方式。通过枚举类型定义了多种特殊牌型,并实现了从给定扑克牌中自动匹配相应特殊牌型的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


public abstract class SpecialPokerRegularSss implements Comparator<PokerHolderSss>{

public enum SpecialType{

TRIPLET_SEQUENCE(new SpecialPokerRegularSssTripletSequence()), // 三顺子
TRIPLET_SAME_COLOR(new SpecialPokerRegularSssTripletSameColor()), // 三同花
SIX_HALF(new SpecialPokerRegularSssSixHalf()), // 六对半
FIVE_PAIR_THREE_STRIP(new SpecialPokerRegularSssFivePairThreeStrip()), // 五对三条
FOUR_SET_TRIPLET_STRIP(new SpecialPokerRegularSssFourSetTripletStrip()), // 四套三条
ALL_SAME_COLOR(new SpecialPokerRegularSssAllSameColor()), // 凑一色
ALL_SMALL(new SpecialPokerRegularSssAllSmall()), // 全小
ALL_BIG(new SpecialPokerRegularSssAllBig()), //全大
THREE_POINTS_WORLD(new SpecialPokerRegularSssTripletPointsWorld()), // 三分天下
TRIPLET_SAME_COLOR_SEQUENCE(new SpecialPokerRegularSssTripletSameColorSequence()), //三同花顺
TWELVE_ROYALTY(new SpecialPokerRegularSssTwelveRoyalty()), // 十二皇族
A_DRAGON(new SpecialPokerRegularSssADragon()), // 一条龙
SUPERME_DRAGON(new SpecialPokerRegularSssSupermeDragon()); // 至尊清龙

private final SpecialPokerRegularSss specialPokerRegularSss;
private static final Map<Integer, SpecialType> SPECIAL_TYPE_MAP;

private SpecialType(SpecialPokerRegularSss specialPokerRegularSss) {
this.specialPokerRegularSss = specialPokerRegularSss;
}


public SpecialPokerRegularSss getSpecialPokerRegularSss() {
return specialPokerRegularSss;
}

static {
SPECIAL_TYPE_MAP = new HashMap<>(SpecialType.values().length);
for (final SpecialType item : SpecialType.values()) {
SpecialType.SPECIAL_TYPE_MAP.put(item.ordinal(), item);
}
}


public static SpecialPokerRegularSss getSpecialTypeFrom(Integer ordinal) {
return SpecialType.SPECIAL_TYPE_MAP.get(ordinal).getSpecialPokerRegularSss();
}
}

public static SpecialPokerRegularSss getSpecialPokerRegularsFrom(List<Poker> pokers) throws BizException {
return SpecialPokerRegularSss.getSpecialPokerRegularsFrom(pokers == null ? new Poker[0] : pokers.toArray(new Poker[pokers.size()]));
}

public SpecialPokerRegularSss() {

}

//  获取所有SpecialPokerRegularSss.class的抽象类的实现类  最后用canPlay()方法匹配响应的实现类

//因为是十三水的特殊牌型 ,所以从最大的至尊清青龙开始 

public static SpecialPokerRegularSss getSpecialPokerRegularsFrom(Poker... pokers) throws BizException {
pokers = pokers == null ? Poker.EMPTY_POKERS : pokers;
for(int index = SpecialType.values().length - 1; index >=0; index--){
SpecialPokerRegularSss specialPoker =  SpecialType.getSpecialTypeFrom(index);
if(specialPoker != null && specialPoker.canPlay(pokers)){
return specialPoker;
}
}
return null;
}

@Override
public final boolean canPlay(Poker[] pokers) throws BizException {
final PokerHolderSss pokerHolderSss = new PokerHolderSss(pokers);
return this.canPlay(pokerHolderSss);
}


protected abstract boolean canPlay(PokerHolderSss pokerHolderSss);


}

实现类 

举例,这是其中一个,每个都是这样实现,就能自动匹配到实现类的canPlay方法

class SpecialPokerRegularSssADragon extends SpecialPokerRegularSss { // 一条龙


@Override
protected boolean canPlay(PokerHolderSss pokerHolderSss) { // A ~ K
return pokerHolderSss.getValueCount() == pokerHolderSss.getPokerCount();
}


}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值