CombinationDiceResult DiceResult(int[] cubes)
        {
            Array.Sort(cubes);//сортируем
            List <CombinationDice> combinationDices = new List <CombinationDice>();

            for (int i = 0; i < cubes.Length; i++)
            {
                var temp = cubes.Where(w => w == cubes[i]).ToArray(); //ищет совпадения

                i += temp.Length - 1;                                 //сразу увеличивает итерацию

                switch (temp.Length)
                {
                case 1: combinationDices.Add(new CombinationDice()
                    {
                        CombinationType = CombinationDiceType.None, Value = cubes[i]
                    }); break;

                case 2: combinationDices.Add(new CombinationDice()
                    {
                        CombinationType = CombinationDiceType.Pair, Value = cubes[i]
                    }); break;

                case 3: combinationDices.Add(new CombinationDice()
                    {
                        CombinationType = CombinationDiceType.Three, Value = cubes[i]
                    }); break;

                case 4: combinationDices.Add(new CombinationDice()
                    {
                        CombinationType = CombinationDiceType.Four, Value = cubes[i]
                    }); break;

                case 5: combinationDices.Add(new CombinationDice()
                    {
                        CombinationType = CombinationDiceType.Flush, Value = cubes[i]
                    }); break;
                }
            }
            int sum = 0;
            ///вычисляем сумму
            ///формула такая: sum = type*10+D; где type это чило комбинации, D - старшая кость
            CombinationDiceResult combinationDiceResult = new CombinationDiceResult();

            if (combinationDices.Count == 5)//то есть если все дайсы оказались разные, то проверка на стрит
            {
                bool flag = true;
                for (int i = 0; i < combinationDices.Count - 1; i++)
                {
                    if ((combinationDices[i].Value + 1) != combinationDices[i + 1].Value)//если это не стрит
                    {
                        flag = false;
                        continue;//прерываем цикл
                    }
                }
                if (flag)//если все же стрит
                {
                    sum += ((int)CombinationDiceType.Straight) * 10 + (combinationDices.Max(m => m.Value));
                    combinationDiceResult.Sum     = sum;
                    combinationDiceResult.Message = string.Format("Стрит. Старшая кость: {0}", combinationDices.Max(m => m.Value));
                    return(combinationDiceResult);
                }
            }
            foreach (var comb in combinationDices)
            {
                sum += ((int)comb.CombinationType) * 10 + comb.Value;
                switch (comb.CombinationType)
                {
                case CombinationDiceType.None: combinationDiceResult.Message += string.Format(" *{0}* ", comb.Value); break;

                case CombinationDiceType.Pair: combinationDiceResult.Message += string.Format(" *Пара из {0}* ", comb.Value); break;

                case CombinationDiceType.Three: combinationDiceResult.Message += string.Format(" *Сет из {0}* ", comb.Value); break;

                case CombinationDiceType.Four: combinationDiceResult.Message += string.Format(" *Карэ из {0}* ", comb.Value); break;

                case CombinationDiceType.Flush: combinationDiceResult.Message += string.Format(" *Флеш из {0}* ", comb.Value); break;
                }
            }
            //если всего две комбинации   и   сдержит пару и сет. то это фулл-хаус, нужно будет отдельное сравнение
            if (combinationDices.Count == 2 && combinationDices.Where(w => w.CombinationType == CombinationDiceType.Pair).FirstOrDefault() != null && combinationDices.Where(w => w.CombinationType == CombinationDiceType.Three).FirstOrDefault() != null)
            {
                sum += 10;
                combinationDiceResult.Message   = "Фулл-Хаус.";
                combinationDiceResult.FullHouse = true;
            }
            combinationDiceResult.Sum = sum;

            return(combinationDiceResult);
        }
        async Task CompareBet(Room room, int gold, UserInGameProcess user, UserInGameProcess enemy)
        {
            if (room.GameManager.SemiRaund == Raund.first)
            {
                room.GameManager.SemiRaund++;
                room.AcceptBet(gold, user, enemy);//торг окончен
                if (user.Gold == 0)
                {
                    user.stateGame         = StateGame.allIn; //идем в олл-ин если отдаем последнее золото
                    room.GameManager.AllIn = true;            //отмечаем что при следующем перебросе костей, торга не будет. Сразу вскрываются кости.
                }
                await ReturnMessage(user.Id, enemy.Id, room,
                                    "Вы приняли ставку, можете выбрать и перебросить кости",
                                    "Противник принял ставку, можете выбрать и перебросить кости");
            }
            else if (room.GameManager.SemiRaund == Raund.second)
            {
                room.GameManager.SemiRaund = Raund.first;//обновляем и полу раунд
                if (!room.GameOver())
                {
                    room.GameManager.Raund++;//некст раунд ++
                }
                room.AcceptBet(gold, user, enemy);
                user.RollRaund = enemy.RollRaund = 0;
                room.GameManager.OpenEnemyDice = true;//показываем дайсы друг другу

                CombinationDiceResult combinationDiceResultUser  = DiceResult(user.cubes);
                CombinationDiceResult combinationDiceResultEnemy = DiceResult(enemy.cubes);

                int    result = combinationDiceResultUser.ToCompare(combinationDiceResultEnemy);
                string userMessage = null, enemyMessage = null;
                switch (result)
                {
                case 0:
                    userMessage  = string.Format("Вы приняли ставку, вскрываем кости.\n{0}\nНичья", combinationDiceResultUser.Message);
                    enemyMessage = string.Format("Противник принял ставку, вскрываем кости.\n{0}\nНичья", combinationDiceResultEnemy.Message);
                    room.Draw(user, enemy);    //делим бабло поравну
                    break;

                case 1:
                    userMessage  = string.Format("Вы приняли ставку, вскрываем кости.\n{0}\nВы выиграли", combinationDiceResultUser.Message);
                    enemyMessage = string.Format("Противник принял ставку, вскрываем кости.\n{0}\nВы Проиграли", combinationDiceResultEnemy.Message);
                    room.TakeBet(user);     //забираем бабло со ставки
                    break;

                case -1:
                    userMessage  = string.Format("Вы приняли ставку, вскрываем кости.\n{0}\nВы Проиграли", combinationDiceResultUser.Message);
                    enemyMessage = string.Format("Противник принял ставку, вскрываем кости.\n{0}\nВы выиграли", combinationDiceResultEnemy.Message);
                    room.TakeBet(enemy);    //отдаем бабло со ставки
                    break;
                }
                await ReturnMessage(user.Id, enemy.Id, room, userMessage, enemyMessage);

                room.GameManager.OpenEnemyDice = false;//отменяем показ костей  оппонента до след. раза
                //теперь чекаем окончание игры
                if (room.GameOver())
                {
                    room.Winner(user, enemy, db);
                    //отправляем инфу клиентам
                    await GameOver(room);
                }
            }
        }