示例#1
0
        public static void GetCompensation(SimpleScore out_comp, CardsDistribution cd, IntData fig, ZoneSwitcher zone, bool useReletivePair, PairSwitcher pair, int type_of_compens)
        {
            if (out_comp == null)
                return;

            // Определить тип компенсации и соотв. функцию
            TypeOfCompensation comp_type = (TypeOfCompensation)type_of_compens;
            CompensFunction comp_f;
            switch (comp_type)
            {
                case TypeOfCompensation.Chicago:
                    comp_f = Compens_Chicago;
                    break;
                case TypeOfCompensation.Moscow:
                    comp_f = Compens_Moscow;
                    break;
                case TypeOfCompensation.Milton_York:
                    comp_f = Compens_MiltonYork;
                    break;
                default:
                    throw new Exception("Не могу определить тип компесации: " + type_of_compens.ToString());
            }

            if (zone != null && zone.IsDefined() && cd != null && cd.IsDefined()) //распределение приоритетнее, чем поле "фигуры"
            {
                int NS_figs, EW_figs;
                NS_figs = CountFigurs(cd, Pairs.NS);
                EW_figs = 40 - NS_figs;

                int iNS_comp = comp_f(NS_figs, ZoneSwitcher.IsPairInZone(Pairs.NS, zone.Zone));
                int iEW_comp = comp_f(EW_figs, ZoneSwitcher.IsPairInZone(Pairs.EW, zone.Zone));
                out_comp.SetScore(iEW_comp, iNS_comp);
            }
            else if (zone != null && zone.IsDefined() && fig != null && fig.IsDefined() && (pair != null && pair.IsDefined() || useReletivePair))
            {
                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;
                }
                int iNS_comp = comp_f(NS_figs, ZoneSwitcher.IsPairInZone(Pairs.NS, zone.Zone));
                int iEW_comp = comp_f(EW_figs, ZoneSwitcher.IsPairInZone(Pairs.EW, zone.Zone));
                out_comp.SetScore(iEW_comp, iNS_comp);
            }
            else
            {
                out_comp.Born = false;
            }
        }
示例#2
0
        //Компенсация  !!!!! С ФИТАМИ !!!!!
        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;
            }
        }
示例#3
0
 // Если 20 фигур - спросить, какая пара сильнее?
 public static void WhoIsStrongest20(BoolData out_strongest, IntData figs, CardsDistribution cd, bool loading_from_db)
 {
     // Если известно распределение карт, то определить по картам сильную пару
     if (cd != null && cd.IsDefined())
     {
         int figs_NS = CountFigurs(cd, Pairs.NS);
         if (figs_NS == 20)
         {
             Pairs pairStrongest = DefineStrongest(cd);
             if (pairStrongest == Pairs.NS || pairStrongest == Pairs.NotDefinedYet)
                 out_strongest.Value = true;
             else
                 out_strongest.Value = false;
         }
         else
         {
             out_strongest.Born = false;
         }
     }
     // Иначе спросить у юзера
     else if (!loading_from_db)  // ЕСЛИ ИДЕТ ЗАГРУЗКА ИЗ БД - НЕ СПРАШИВАТЬ!!! САМО ЗАГРУЗИТ!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!
     {
         if (figs != null && figs.IsDefined() && figs.Value == 20)
         {
             if (out_strongest.Born == false) // ВАЖНО!!! СПРАШИВАТЬ ТОЛЬКО ПРИ ИЗМЕНЕНИИ ФИГУР С XX НА 20
             {
                 if (MessageBox.Show("Какая пара сильнее?\nNS - да, EW - нет", "Фигур 20", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                     out_strongest.Value = true;
                 else
                     out_strongest.Value = false;
             }
         }
         else
         {
             out_strongest.Born = false;
         }
     }
 }