private void GenerateFirstNonPowerOf2Round(int firstRoundPlayerCount) { List <TeamEntity> teams = Teams.Take(firstRoundPlayerCount).ToList(); int roundMatchIdCounter = 0; for (int i = 0; i < firstRoundPlayerCount / 2; i++) { PlayedGamesEntity game = new PlayedGamesEntity { RoundMatchId = i, HomeTeamId = teams[i].Id, AwayTeamId = teams[teams.Count - (i + 1)].Id, RoundNumber = 1 }; Teams[i] = null; Teams[teams.Count - (i + 1)] = null; gamesToBePlayed.Add(game); roundMatchIdCounter++; } // adds null oppenent to first round bye's teams List <TeamEntity> passedTeams = Teams.Skip(firstRoundPlayerCount).ToList(); for (int i = 0; i < passedTeams.Count; i++) { PlayedGamesEntity game = new PlayedGamesEntity { RoundMatchId = roundMatchIdCounter, HomeTeamId = passedTeams[i].Id, AwayTeamId = null, RoundNumber = 1, IsFinished = true }; game.IsAwayTeamConfirmedResult = true; game.IsHomeTeamConfirmedResult = true; gamesToBePlayed.Add(game); roundMatchIdCounter++; } TournamentBracketRoundEntity round = new TournamentBracketRoundEntity { RoundNumber = 1, TournamentId = TournamentId }; rounds.Add(round); var passedTeamCount = Teams.Count - (MathManager.FindSmallestPowerOf2AsLargeAsParam(Teams.Count) / 2); GenerateNextRounds(MathManager.FindSmallestPowerOf2AsLargeAsParam(Teams.Count) / 2, 2, TournamentId, passedTeamCount); }
public void GenerateFixture() { try { //Select first N Teams for first round if (!MathManager.isPowerOfTwo(Teams.Count)) { int playerCount = Teams.Count; int smallestPowerOf2 = MathManager.FindSmallestPowerOf2AsLargeAsParam(playerCount); int firstRoundPlayerCount = (2 * playerCount) - smallestPowerOf2; GenerateFirstNonPowerOf2Round(firstRoundPlayerCount); return; } for (int i = 0; i < Teams.Count / 2; i++) { PlayedGamesEntity game = new PlayedGamesEntity { RoundMatchId = i, HomeTeamId = Teams[i].Id, AwayTeamId = Teams[Teams.Count - (i + 1)].Id, RoundNumber = 1 }; gamesToBePlayed.Add(game); } TournamentBracketRoundEntity round = new TournamentBracketRoundEntity { RoundNumber = 1, TournamentId = TournamentId }; rounds.Add(round); GenerateNextRounds(Teams.Count / 2, 2, TournamentId, null); } catch (Exception e) { throw new Exception(e.Message); } }