//возврат: 0 "-", 1 "NS 4o", 2 "NS 5o", 3 "NS 4A", 4 "EW 4o", 5 "EW 5o", 6 "EW 4A" public static int CountOners(CardsDistribution cd, CardTrump trump) { if (trump == CardTrump.NotYetDefined) { return 0; //- } // Посчитать, кому приндледат 4 туза else if (trump == CardTrump.NT) { int countN = 0, countS = 0, countE = 0, countW = 0; Quarters q; for (CardSuit cs = (CardSuit)0; cs < (CardSuit)4; cs++) { q = cd.Get(CardValue.Ace, cs); switch (q) { case Quarters.N: countN++; break; case Quarters.S: countS++; break; case Quarters.E: countE++; break; case Quarters.W: countW++; break; } } if (countN == 4 || countS == 4) return 3; //NS 4A else if (countE == 4 || countW == 4) return 6; //EW 4A else return 0; //- } // Посчитать, кому принадлежат козырные онеры else { int countN = 0, countS = 0, countE = 0, countW = 0; Quarters q; for (CardValue cv = CardValue.Ten; cv <= CardValue.Ace; cv++) { q = cd.Get(cv, SmallHelper.TrumpToSuit(trump)); switch (q) { case Quarters.N: countN++; break; case Quarters.S: countS++; break; case Quarters.E: countE++; break; case Quarters.W: countW++; break; } } if (countN == 5 || countS == 5) return 2; //NS 5o else if (countE == 5 || countW == 5) return 5; //EW 5o else if (countN == 4 || countS == 4) return 1; //NS 4o else if (countE == 4 || countW == 4) return 4; //EW 4o else return 0; //- } }
public static int CountFits(CardsDistribution cd, Pairs pair, bool TenCardsIsTwoFits) { int count = 0; //кол-во фитов int[] sum = new int[4] { 0, 0, 0, 0 }; //сумма карт каждой масти Quarters q; for (CardSuit cs = (CardSuit)0; cs < (CardSuit)4; cs++) { for (CardValue cv = CardValue.Two; cv <= CardValue.Ace; cv++) { q = cd.Get(cv, cs); if (pair == Pairs.NS && (q == Quarters.N || q == Quarters.S) || pair == Pairs.EW && (q == Quarters.E || q == Quarters.W)) sum[(int)cs]++; } } for (int i = 0; i < 4; i++) { if (sum[i] >= 10 && TenCardsIsTwoFits) count += 2; else if (sum[i] >= 8) count++; } return count; }
//чей 1 фит сильнее? public static Pairs Whose1FitStronger(CardsDistribution cd) { int[] sumNS = new int[4] { 0, 0, 0, 0 }; //сумма карт каждой масти (для NS) int[] sumEW = new int[4] { 0, 0, 0, 0 }; //сумма карт каждой масти (для EW) Quarters q; for (CardSuit cs = (CardSuit)0; cs < (CardSuit)4; cs++) { for (CardValue cv = CardValue.Two; cv <= CardValue.Ace; cv++) { q = cd.Get(cv, cs); if (q == Quarters.N || q == Quarters.S) sumNS[(int)cs]++; else if (q == Quarters.E || q == Quarters.W) sumEW[(int)cs]++; } } CardSuit suitNS = (CardSuit)4, suitEW = (CardSuit)4; for (int i = 0; i < 4; i++) { if (sumNS[i] >= 8) suitNS = (CardSuit)i; if (sumEW[i] >= 8) suitEW = (CardSuit)i; } if (SmallHelper.CompareSuits(suitNS, suitEW) == 1) return Pairs.NS; else if (SmallHelper.CompareSuits(suitNS, suitEW) == -1) return Pairs.EW; else return Pairs.NotDefinedYet; }
/*static public void GetCompensation(SimpleScore out_comp, IntData fig, ZoneSwitcher zone, PairSwitcher pair) { if (out_comp == null) return; if (fig == null || !fig.IsDefined() || zone == null || !zone.IsDefined() || pair == null || !pair.IsDefined()) { out_comp.Born = false; } else { int NS_figs, EW_figs; if (pair.Pair == Pairs.NS) { NS_figs = fig.Value; EW_figs = 40 - fig.Value; } else { EW_figs = fig.Value; NS_figs = 40 - fig.Value; } out_comp.SetScore(Compens(NS_figs, ZoneSwitcher.IsPairInZone(Pairs.NS, zone.Zone)), Compens(EW_figs, ZoneSwitcher.IsPairInZone(Pairs.EW, zone.Zone))); } }*/ public static int CountFigurs(CardsDistribution cd, Pairs pair) { int count = 0; Quarters q; for (CardValue cv = CardValue.Jack; cv <= CardValue.Ace; cv++) { for (CardSuit cs = (CardSuit)0; cs < (CardSuit)4; cs++) { q = cd.Get(cv, cs); if (pair == Pairs.NS && (q == Quarters.N || q == Quarters.S) || pair == Pairs.EW && (q == Quarters.E || q == Quarters.W)) count += (cv - CardValue.Jack + 1); } } return count; }
//у кого пиковый фит? public static Pairs WhoHasSpadesFit(CardsDistribution cd) { int sumNS = 0, sumEW = 0; //сумма пиковых карт Quarters q; for (CardValue cv = CardValue.Two; cv <= CardValue.Ace; cv++) { q = cd.Get(cv, CardSuit.Spades); if (q == Quarters.N || q == Quarters.S) sumNS++; else if (q == Quarters.E || q == Quarters.W) sumEW++; } if (sumNS >= 8) return Pairs.NS; else if (sumEW >= 8) return Pairs.EW; else return Pairs.NotDefinedYet; }