public void Refresh()
        {
            quantity = 1;
            trump    = CardTrump.NotYetDefined;
            Contra   = false;
            ReContra = false;

            born = true;
        }
        public void Empty()
        {
            quantity = 0;
            trump    = CardTrump.NotYetDefined;
            Contra   = false;
            ReContra = false;

            born = false;
        }
示例#3
0
        // Минор или мажор или БК
        public static TrumpType WhatTrumpType(CardTrump t)
        {
            switch (t)
            {
            case CardTrump.Clubs:
            case CardTrump.Diamonds:
                return(TrumpType.Minor);

            case CardTrump.Hearts:
            case CardTrump.Spades:
                return(TrumpType.Major);

            case CardTrump.NT:
                return(TrumpType.NT);

            default:
                throw new Exception("Масть не определена!");
            }
        }
        public ContractStruct(int q, CardTrump t, bool c, bool rc)
        {
            if ((q >= 1 && q <= 7 && (int)t >= 1 && (int)t <= 5 && !(c && rc)) || (q == 0 && t == CardTrump.NotYetDefined && c == false && rc == false))
            {
                this.quantity = q;
                this.trump    = t;
                this.contra   = c;
                this.recontra = rc;

                born = true;
            }
            else
            {
                this.quantity = 0;
                this.trump    = CardTrump.NotYetDefined;
                this.contra   = false;
                this.recontra = false;

                born = false;
            }
        }
示例#5
0
        public static CardSuit TrumpToSuit(CardTrump trump)
        {
            switch (trump)
            {
            case CardTrump.NT:
            case CardTrump.NotYetDefined:
                throw new Exception(trump == CardTrump.NotYetDefined ? "Приведение TrumpToSuit невозможно: козырная масть не определена!" : "Приведение TrumpToSuit невозможно: нет козыря!");

            case CardTrump.Clubs:
                return(CardSuit.Clubs);

            case CardTrump.Diamonds:
                return(CardSuit.Diamonds);

            case CardTrump.Hearts:
                return(CardSuit.Hearts);

            case CardTrump.Spades:
                return(CardSuit.Spades);

            default:
                throw new Exception("Приведение TrumpToSuit невозможно");
            }
        }
示例#6
0
        void CountScore()
        {
            bool ready = true;

            bool inzone            = checkBox1.Checked;
            int  contract_quantity = 0;

            if (comboBox1.SelectedIndex == -1)
            {
                ready = false;
            }
            else
            {
                contract_quantity = int.Parse(comboBox1.Items[comboBox1.SelectedIndex] as string);
            }
            CardTrump contract_trump = CardTrump.NotYetDefined;

            if (comboBox2.SelectedIndex == -1)
            {
                ready = false;
            }
            else
            {
                string trump_str = (string)comboBox2.Items[comboBox2.SelectedIndex];
                switch (trump_str)
                {
                case "Hearts":
                    contract_trump = CardTrump.Hearts;
                    break;

                case "Diamonds":
                    contract_trump = CardTrump.Diamonds;
                    break;

                case "Clubs":
                    contract_trump = CardTrump.Clubs;
                    break;

                case "Spades":
                    contract_trump = CardTrump.Spades;
                    break;

                case "NT":
                    contract_trump = CardTrump.NT;
                    break;
                }
            }
            bool contract_double   = checkBox2.Checked;
            bool contract_redouble = checkBox3.Checked;
            int  result            = -1;

            if (comboBox3.SelectedIndex == -1)
            {
                ready = false;
            }
            else
            {
                result = int.Parse(comboBox3.Items[comboBox3.SelectedIndex] as string);
            }


            //---------------------------------
            int score = 0;
            int bonus = 0;

            if (ready)
            {
                int result_diff = result - (6 + contract_quantity);
                // ----------------------------- robber ---------------------------
                if (IsRobber)
                {
                    // --- Если контракт сыгран ---
                    if (result_diff >= 0)
                    {
                        // Очки за взятки:
                        score = contract_quantity * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30) + (contract_trump == CardTrump.NT ? 10 : 0);
                        if (contract_double)
                        {
                            score *= 2;
                        }
                        else if (contract_redouble)
                        {
                            score *= 4;
                        }
                        // Премия за превышение взяток:
                        ArrayOfInt bonuses = new ArrayOfInt();
                        if (result_diff > 0)
                        {
                            if (contract_double)
                            {
                                bonuses.Add(result_diff * (inzone ? 200 : 100));
                            }
                            else if (contract_redouble)
                            {
                                bonuses.Add(result_diff * (inzone ? 400 : 200));
                            }
                            else
                            {
                                bonuses.Add(result_diff * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30));
                            }
                        }
                        if (contract_quantity == 6) //малый шлем
                        {
                            bonuses.Add(inzone ? 750 : 500);
                        }
                        else if (contract_quantity == 7) //большой шлем
                        {
                            bonuses.Add(inzone ? 1500 : 1000);
                        }
                        // Дополнительная премия за оскорбление:
                        if (contract_double)
                        {
                            bonuses.Add(50);
                        }
                        else if (contract_redouble)
                        {
                            bonuses.Add(100);
                        }

                        // Посчитать сумму бонусов
                        for (int i = 0; i < bonuses.Count; i++)
                        {
                            bonus += bonuses[i];
                        }
                    }
                    // --- Если контракт проигран ---
                    else
                    {
                        int enemy_score = 0;
                        for (int i = -1; i >= result_diff; i--)
                        {
                            if (i == -1)
                            {
                                if (contract_double)
                                {
                                    enemy_score += (inzone ? 200 : 100);
                                }
                                else if (contract_redouble)
                                {
                                    enemy_score += (inzone ? 400 : 200);
                                }
                                else
                                {
                                    enemy_score += (inzone ? 100 : 50);
                                }
                            }
                            else
                            {
                                if (contract_double)
                                {
                                    enemy_score += (inzone ? 300 : 200);
                                }
                                else if (contract_redouble)
                                {
                                    enemy_score += (inzone ? 600 : 400);
                                }
                                else
                                {
                                    enemy_score += (inzone ? 100 : 50);
                                }
                            }
                        }

                        bonus = -enemy_score;
                    }
                }
                // ----------------------------- sport ---------------------------
                else
                {
                    // --- Если контракт сыгран ---
                    if (result_diff >= 0)
                    {
                        // Очки за взятки:
                        score = contract_quantity * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30) + (contract_trump == CardTrump.NT ? 10 : 0);
                        if (contract_double)
                        {
                            score *= 2;
                        }
                        else if (contract_redouble)
                        {
                            score *= 4;
                        }
                        // Премия за превышение взяток:
                        if (result_diff > 0)
                        {
                            if (contract_double)
                            {
                                bonus += result_diff * (inzone ? 200 : 100);
                            }
                            else if (contract_redouble)
                            {
                                bonus += result_diff * (inzone ? 400 : 200);
                            }
                            else
                            {
                                bonus += result_diff * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30);
                            }
                        }
                        if (contract_quantity == 6) //малый шлем
                        {
                            bonus += (inzone ? 750 : 500);
                        }
                        if (contract_quantity == 7) //большой шлем
                        {
                            bonus += (inzone ? 1500 : 1000);
                        }
                        if (score >= 100) //за гейм
                        {
                            bonus += (inzone ? 500 : 300);
                        }
                        else //за частичную запись
                        {
                            bonus += 50;
                        }
                        // Дополнительная премия:
                        if (contract_double)
                        {
                            bonus += 50;
                        }
                        else if (contract_redouble)
                        {
                            bonus += 100;
                        }
                    }
                    // --- Если контракт проигран ---
                    else
                    {
                        int enemy_score = 0;
                        for (int i = -1; i >= result_diff; i--)
                        {
                            if (i == -1)
                            {
                                if (contract_double)
                                {
                                    enemy_score += (inzone ? 200 : 100);
                                }
                                else if (contract_redouble)
                                {
                                    enemy_score += (inzone ? 400 : 200);
                                }
                                else
                                {
                                    enemy_score += (inzone ? 100 : 50);
                                }
                            }
                            else if (i == -2 || i == -3)
                            {
                                if (contract_double)
                                {
                                    enemy_score += (inzone ? 300 : 200);
                                }
                                else if (contract_redouble)
                                {
                                    enemy_score += (inzone ? 600 : 400);
                                }
                                else
                                {
                                    enemy_score += (inzone ? 100 : 50);
                                }
                            }
                            else
                            {
                                if (contract_double)
                                {
                                    enemy_score += (inzone ? 300 : 300);
                                }
                                else if (contract_redouble)
                                {
                                    enemy_score += (inzone ? 600 : 600);
                                }
                                else
                                {
                                    enemy_score += (inzone ? 100 : 50);
                                }
                            }
                        }

                        bonus = -enemy_score;
                    }
                }
            }
            //---------------------------------



            if (IsRobber)
            {
                label6.Text = score.ToString();
                label7.Text = bonus.ToString();
            }
            else
            {
                label6.Text = (score + bonus).ToString();
            }
        }
 public bool IsTrumpGood(CardTrump t)
 {
     return((int)t >= 1 && (int)t <= 5);
 }
 public void ChangeContract(int q, CardTrump tr, bool co, bool reco)
 {
     this.ChangeContract(new ContractStruct(q, tr, co, reco));
 }
 public Contract(int q, CardTrump tr, bool co, bool reco)
 {
     val = new ContractStruct(q, tr, co, reco);
 }
示例#10
0
 //возврат: 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; //-
     }
 }