private void CreateGroupMatches(int groupNo, CompetitionPlayerList groupPlayers)
        {
            int[] plrs = new int[groupPlayers.Count];                                               // Список игроков для рассеивания

            SeedPair[] new_mtchs = new SeedPair[(groupPlayers.Count - 1) * groupPlayers.Count / 2]; // Список новых матчей
            int        index     = 0;

            foreach (CompetitionPlayerInfo player in groupPlayers.Values)
            {
                plrs[index++] = player.Id;
            }
            // формируем пары для следующего раунда
            if (!RobinSeeder.Seed(plrs, new_mtchs))
            {
                throw new Exception("Draw error");
            }

            // Создаем матчи и добавляем их в список матчей
            int pc = groupPlayers.Count;

            for (int round = 0; round < pc - 1; round++)              // Кол-во туров равно Кол-во игроков - 1
            {
                for (int match_no = 0; match_no < pc / 2; match_no++) // Кол-во матчей в туре равно Кол-во игрков деленное на два
                {
                    SeedPair  pair  = new_mtchs[round * pc / 2 + match_no];
                    MatchInfo match = RobinController.CreateMatch(Competition, pair);
                    match.Label.Division = groupNo;
                    match.Label.Round    = round + 1;
                    match.Label.MatchNo  = match_no + 1;
                    TA.DB.Manager.DatabaseManager.CurrentDb.CreateMatch(Competition.Info.Id, match);
                    Competition.Matches.Add(match.Id, match);
                }
            }
        }
 public static CompetitionController GetController(TA.Corel.Competition competition)
 {
     //Нужно следить за порядком сравнения типов, из-за возможного наследования
     // сначала проверяем потомков, а потом остальные
     if (competition.GetType() == typeof(RobinOlympic))
     {
         RobinOlympicController ctrl = new RobinOlympicController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(OlympicConsolation))
     {
         OlympicConsolationController ctrl = new OlympicConsolationController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(OlympicDE))
     {
         CompetitionController ctrl = new OlympicDEController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(Olympic))
     {
         CompetitionController ctrl = new OlympicController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(FppSwiss))
     {
         FppsSwissController ctrl = new FppsSwissController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(Swiss))
     {
         SwissController ctrl = new SwissController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(Robin))
     {
         RobinController ctrl = new RobinController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     if (competition.GetType() == typeof(Swing))
     {
         SwingController ctrl = new SwingController();
         ctrl.Competition = competition;
         return(ctrl);
     }
     throw new Exception("Unknown Competition Controller");
 }