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); } } }
/// <summary> /// Рассеивает игроков по швейцарской системе /// </summary> /// <returns></returns> public virtual bool SeedPlayers() { // Список игрков для матчей List <CompetitionPlayerInfo> players = GetPlayersToSeed(); int[] plrs = new int[players.Count]; // Список игроков для рассеивания SeedPair[] new_mtchs = new SeedPair[(players.Count - 1) * players.Count / 2]; // Список новых матчей int index = 0; foreach (CompetitionPlayerInfo player in players) { plrs[index++] = player.Id; } // формируем пары для следующего раунда if (!RobinSeeder.Seed(plrs, new_mtchs)) { throw new Exception("Draw Error"); } // Создаем матчи и добавляем их в список матчей int pc = players.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 = CreateMatch(Competition, pair); match.Label.Division = 1; 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); } } return(true); }