using System.Collections.Generic; using GameMessage; namespace GameFix.Poker { /// /// 飞机 带 4张 /// 最后一手牌可以少带或者不带 /// public class CardStyle3311SpecialHelper : CardStyleBaseHelper { public override int CardStyle => DataCardConst.CardStyle3311; public override int CardCnt => 10; private readonly CardStyle3311Helper _cardStyle3311 = new(); internal override bool CheckStyleNormal(CardBaseGroup group, out CardStyleInfo cardStyleInfo) { cardStyleInfo = null; // 手牌对象才检测 if (group is not CardHandGroup) return false; // 只要是飞机就可以带剩下得牌 // 先过滤是否看有三个得牌 var cardList = new List(); foreach (var cardGroup in group.SelfCardGroupDic) { if (cardGroup.Key >= 3) cardList.AddRange(cardGroup.Value); } if (cardList.Count >= 2) { if (group.SelfCards.Count == group.Cards.Count) { // 剩下得牌都出完 if (IsMaxContinuous(group.CardGroupList, 3, out var shunValueList) && shunValueList.Count >= 2 && shunValueList.Count * 5 >= group.Cards.Count) { cardStyleInfo = new CardStyleInfo(CardStyle, shunValueList[0], group.Cards.Count); return true; } return false; } return _cardStyle3311.CheckStyleNormal(group, out cardStyleInfo); } return false; } internal override List GetAllEatTipGroup(CardBaseGroup group, CardStyleInfo eatStyleInfo) { // 一定要检测手牌 var ret = new List(); if (group is not CardHandGroup handGroup) return ret; if (group.SelfCardGroupDic.TryGetValue(3, out var cardList) && cardList.Count >= 2) { // 手上得牌是否可以成为飞机 var cardStyle = handGroup.GetCardStyleInfo(group.SelfCards); if (cardStyle.CardStyle == CardStyle) { ret.Add(new CardGroupList(group.SelfCards)); return ret; } return _cardStyle3311.GetAllEatTipGroup(group, eatStyleInfo); } return ret; } } }