//Компенсация !!!!! С ФИТАМИ !!!!! public static void GetCompensation_WithFits(SimpleScore out_comp, CardsDistribution cd, IntData fig, ZoneSwitcher zone, bool useReletivePair, PairSwitcher pair, /*fits:*/ FitsSwitcher fits, BoolData strongest, bool TenCardsIsTwoFits, bool LessCompFor2Fits23PC) { if (out_comp == null) return; if (zone != null && zone.IsDefined() && cd != null && cd.IsDefined()) //распределение приоритетнее, чем поле "фигуры" и "фиты" { Pairs pairStrongest = Pairs.NotDefinedYet; int figs_NS = CountFigurs(cd, Pairs.NS); int figs_EW = 40 - figs_NS; if(figs_NS > figs_EW) pairStrongest = Pairs.NS; else if(figs_NS < figs_EW) pairStrongest = Pairs.EW; else pairStrongest = DefineStrongest(cd); int fitsOfStrongPair = CountFits(cd, pairStrongest, TenCardsIsTwoFits); int iNS_comp = 0, iEW_comp = 0; if(pairStrongest == Pairs.NS) iNS_comp = Compens_Europe(figs_NS, fitsOfStrongPair, ZoneSwitcher.IsPairInZone(Pairs.NS, zone.Zone), LessCompFor2Fits23PC); else iEW_comp = Compens_Europe(figs_EW, fitsOfStrongPair, ZoneSwitcher.IsPairInZone(Pairs.EW, zone.Zone), LessCompFor2Fits23PC); out_comp.SetScore(iEW_comp, iNS_comp); } else if (zone != null && zone.IsDefined() && fig != null && fig.IsDefined() && (pair != null && pair.IsDefined() || useReletivePair) && fits != null && fits.IsDefined() && (fig.Value != 20 || fig.Value == 20 && strongest != null && strongest.IsDefined())) { int NS_figs, EW_figs; if (!useReletivePair && pair.Pair == Pairs.NS || useReletivePair && RelativePair == Pairs.NS) //!!!! { NS_figs = fig.Value; EW_figs = 40 - NS_figs; } else { EW_figs = fig.Value; NS_figs = 40 - EW_figs; } Pairs pairStrongest = Pairs.NotDefinedYet; if(NS_figs > EW_figs) pairStrongest = Pairs.NS; else if(NS_figs < EW_figs) pairStrongest = Pairs.EW; else pairStrongest = (strongest.Value ? Pairs.NS : Pairs.EW); int fitsOfStrongPair = fits.Choise; int iNS_comp = 0, iEW_comp = 0; if(pairStrongest == Pairs.NS) iNS_comp = Compens_Europe(NS_figs, fitsOfStrongPair, ZoneSwitcher.IsPairInZone(Pairs.NS, zone.Zone), LessCompFor2Fits23PC); else iEW_comp = Compens_Europe(EW_figs, fitsOfStrongPair, ZoneSwitcher.IsPairInZone(Pairs.EW, zone.Zone), LessCompFor2Fits23PC); out_comp.SetScore(iEW_comp, iNS_comp); } else { out_comp.Born = false; } }
// Очки за фиты (ОТНОСИТЕЛЬНО СИЛЬНОЙ ПАРЫ) public static void FitsPoints(FitsSwitcher out_fits, CardsDistribution cd, bool TenCardsIsTwoFits) { if (out_fits == null) return; // Определить из распределения карт, если оно есть: if (cd != null && cd.IsDefined()) { Pairs pairStrongest = Pairs.NotDefinedYet; int figs_NS = CountFigurs(cd, Pairs.NS); if (figs_NS > 20) pairStrongest = Pairs.NS; else if (figs_NS < 20) pairStrongest = Pairs.EW; else pairStrongest = DefineStrongest(cd); int fitsOfStrongPair = CountFits(cd, pairStrongest, TenCardsIsTwoFits); out_fits.Choise = (fitsOfStrongPair > 2 ? 2 : fitsOfStrongPair); } else { } }