/// <summary> /// /// </summary> /// <param name="tournamentId"></param> /// <param name="isPerformanceRound">if the round is for seeding, otherwise its for the actual tournament.</param> /// <returns></returns> public static bool StartNextRound(Guid tournamentId, bool isPerformanceRound) { try { var dc = new ManagementContext(); var tourny = GetTournament(tournamentId); TournamentApi.IPairingsGenerator pg = null; TournamentTypeEnum tempType = tourny.TournamentType; if (isPerformanceRound) tempType = tourny.TouramentTypeForSeedingEnum; switch (tempType) { case TournamentTypeEnum.Boil_Off: pg = new BoilOffPairingsGenerator(); break; case TournamentTypeEnum.Round_Robin: pg = new RoundRobinPairingsGenerator(); break; case TournamentTypeEnum.Round_Robin_Pool_Play: pg = new RoundRobinPairingsGenerator(true); break; case TournamentTypeEnum.Double_Elimination: pg = new EliminationTournament(2); break; case TournamentTypeEnum.Single_Elimination: pg = new EliminationTournament(1); break; } if (isPerformanceRound) pg.LoadState(tourny.TeamsForTournamentApi, tourny.TournamentRoundsApiForSeeding); else pg.LoadState(tourny.TeamsForTournamentApi, tourny.TournamentRoundsApi); var tempRound = pg.CreateNextRound(null); bool tournamentFinished = (tempRound == null) && (tourny.TournamentRoundsApi.Count > 1); if (tournamentFinished) return true; var tournament = dc.GameTournaments.Where(x => x.TournamentId == tourny.Id).FirstOrDefault(); TournamentRound newRound = new TournamentRound(); if (isPerformanceRound) newRound.RoundNumber = tourny.TournamentRoundsApiForSeeding.Count + 1; else newRound.RoundNumber = tourny.TournamentRoundsApi.Count + 1; newRound.Tournament = tournament; var teams = tournament.Teams.ToList(); foreach (var pairing in tempRound.Pairings) { var newPairing = new TournamentPairing { Round = newRound, GroupId = pairing.GroupId }; for (int i = 0; i < pairing.TeamScores.Count; i++) { var newTeamPairing = new TournamentPairingTeam { Team = teams.Where(t => t.TeamId == pairing.TeamScores[i].Team.TeamId).FirstOrDefault(), Pairing = newPairing, Score = 0 }; newPairing.Teams.Add(newTeamPairing); //dc.TournamentTeams.Add(newTeamPairing); } newRound.Pairings.Add(newPairing); } //} if (isPerformanceRound) tournament.SeedingRounds.Add(newRound); else tournament.Rounds.Add(newRound); int c = dc.SaveChanges(); return c > 0; } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } return false; }
private static Tournament DisplayTournament(GameTournament tourny) { try { var memId = RDN.Library.Classes.Account.User.GetMemberId(); Tournament to = new Tournament(); to.TournamentClass = (TournamentClassEnum)tourny.TournamentClass; to.TournamentType = (TournamentTypeEnum)tourny.TournamentTypeEnum; to.EndDate = tourny.EndDate; if (tourny.SelectedShop != null) to.SelectedShop = tourny.SelectedShop.MerchantId.ToString(); to.EndDateDisplay = tourny.EndDate.ToShortDateString(); to.StartDateDisplay = tourny.StartDate.ToShortDateString(); to.StartDate = tourny.StartDate; to.Id = tourny.TournamentId; to.IsPublished = tourny.IsPublished; to.AreBracketsPublished = tourny.AreBracketsPublished; to.PrivateKey = tourny.PrivateTournamentId; to.Name = tourny.TournamentName; to.PassCodeForGames = tourny.TournamentPasscode; to.EmbedVideoString = tourny.EmbedVideoString; to.TournamentWebsite = tourny.TournamentWebsite; if (tourny.OwnerOfTournament != null) { MemberDisplayBasic m = new MemberDisplayBasic(); m.DerbyName = tourny.OwnerOfTournament.DerbyName; m.MemberId = tourny.OwnerOfTournament.MemberId; m.UserId = tourny.OwnerOfTournament.AspNetUserId; to.Owners.Add(m); } for (int i = 0; i < tourny.OwnersOfTournament.Count; i++) { try { if (to.Owners.Where(x => x.MemberId == tourny.OwnersOfTournament[i].Owner.MemberId).FirstOrDefault() == null) { MemberDisplayBasic m = new MemberDisplayBasic(); m.DerbyName = tourny.OwnersOfTournament[i].Owner.DerbyName; m.MemberId = tourny.OwnersOfTournament[i].Owner.MemberId; m.UserId = tourny.OwnersOfTournament[i].Owner.AspNetUserId; to.Owners.Add(m); } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } if (tourny.Logo != null) to.Photos.Add(new PhotoItem(tourny.Logo.ImageUrl, tourny.Logo.ImageUrlThumb, true, tourny.TournamentName)); #region contact if (tourny.ContactCard != null) { var add = tourny.ContactCard.Addresses.FirstOrDefault(); if (add != null) { to.Address = add.Address1; to.Address2 = add.Address2; to.City = add.CityRaw; if (add.Country != null) { to.Country = add.Country.Code; to.CountryId = add.Country.CountryId; } to.State = add.StateRaw; to.ZipCode = add.Zip; } } #endregion #region paywall if (tourny.Paywall != null) { to.Paywall.DailyPrice = tourny.Paywall.DailyPrice; to.Paywall.DescriptionOfPaywall = tourny.Paywall.DescriptionOfPaywall; to.Paywall.EndDate = tourny.Paywall.EndDate; if (tourny.Paywall.EndDate.HasValue) to.Paywall.EndDateDisplay = tourny.Paywall.EndDate.Value.ToShortDateString(); to.Paywall.IsEnabled = tourny.Paywall.IsEnabled; to.Paywall.IsRemoved = tourny.Paywall.IsRemoved; to.Paywall.PaywallId = tourny.Paywall.PaywallId; to.Paywall.StartDate = tourny.Paywall.StartDate; if (tourny.Paywall.StartDate.HasValue) to.Paywall.StartDateDisplay = tourny.Paywall.StartDate.Value.ToShortDateString(); to.Paywall.TimespanPrice = tourny.Paywall.TimespanPrice; to.PaywallId = tourny.Paywall.PaywallId; to.Paywall.AcceptPaypal = tourny.Paywall.Merchant.AcceptPaymentsViaPaypal; to.Paywall.AcceptStripe = tourny.Paywall.Merchant.AcceptPaymentsViaStripe; if (memId != new Guid()) { var isPaid = tourny.Paywall.PaywallInvoices.Where(x => x.MemberPaidId == memId).OrderByDescending(x => x.Created).FirstOrDefault(); if (isPaid != null) { if (isPaid.ValidUntil > DateTime.UtcNow && (isPaid.Invoice.InvoiceStatus == (byte)InvoiceStatus.Payment_Successful || isPaid.Invoice.InvoiceStatus == (byte)InvoiceStatus.Pending_Payment_From_Paypal)) { to.Paywall.IsPaid = true; } } else to.Paywall.IsPaid = false; } to.Paywall.MerchantId = tourny.Paywall.Merchant.MerchantId; } #endregion #region Games List<Game> games = new List<Game>(); foreach (var game in tourny.Games) { try { Game g = new Game(); g.GameId = game.GameId; g.GameName = game.GameName; g.GameDate = game.GameDate; var teams = game.GameTeams.OrderByDescending(x => x.Created).Take(2); var team1 = teams.OrderByDescending(x => x.TeamName).FirstOrDefault(); var team2 = teams.OrderBy(x => x.TeamName).FirstOrDefault(); g.Team1Name = team1.TeamName; g.Team1LinkId = team1.TeamIdLink; g.Team1Id = team1.TeamId; g.Team2Name = team2.TeamName; g.Team2LinkId = team2.TeamIdLink; g.Team2Id = team2.TeamId; g.Team1ScoreTotal = team1.GameScores.Select(x => x.Point).Sum(); g.Team2ScoreTotal = team2.GameScores.Select(x => x.Point).Sum(); foreach (var b in team1.GameMembers) { TeamMembersViewModel a = new TeamMembersViewModel(); a.SkaterId = b.GameMemberId; a.SkaterLinkId = b.MemberLinkId; a.SkaterName = b.MemberName; a.SkaterNumber = b.MemberNumber; if (to.AllSkaters.Where(x => x.SkaterLinkId == a.SkaterLinkId).FirstOrDefault() == null) to.AllSkaters.Add(a); } foreach (var b in team2.GameMembers) { TeamMembersViewModel a = new TeamMembersViewModel(); a.SkaterId = b.GameMemberId; a.SkaterLinkId = b.MemberLinkId; a.SkaterName = b.MemberName; a.SkaterNumber = b.MemberNumber; if (to.AllSkaters.Where(x => x.SkaterLinkId == a.SkaterLinkId).FirstOrDefault() == null) to.AllSkaters.Add(a); } foreach (var assist in game.GameMemberAssists) { AssistViewModel a = new AssistViewModel(); a.AssistId = assist.GameAssistId; a.PlayerWhoAssisted = new TeamMembersViewModel(); a.PlayerWhoAssisted.SkaterId = assist.MemberWhoAssisted.GameMemberId; a.PlayerWhoAssisted.SkaterName = assist.MemberWhoAssisted.MemberName; a.PlayerWhoAssisted.SkaterLinkId = assist.MemberWhoAssisted.MemberLinkId; to.AssistLeaders.Add(a); } foreach (var pen in game.GameMemberPenalties) { PenaltyViewModel a = new PenaltyViewModel(); a.PenaltyId = pen.GamePenaltyId; a.PenaltyAgainstMember = new TeamMembersViewModel(); a.PenaltyAgainstMember.SkaterId = pen.MemberWhoPenaltied.GameMemberId; a.PenaltyAgainstMember.SkaterName = pen.MemberWhoPenaltied.MemberName; a.PenaltyAgainstMember.SkaterLinkId = pen.MemberWhoPenaltied.MemberLinkId; a.PenaltyType = (PenaltiesEnum)Enum.Parse(typeof(PenaltiesEnum), pen.PenaltyType.ToString()); to.PenaltyLeaders.Add(a); } foreach (var blocks in game.GameMemberBlocks) { BlockViewModel a = new BlockViewModel(); a.BlockId = blocks.GameBlockId; a.PlayerWhoBlocked = new TeamMembersViewModel(); a.PlayerWhoBlocked.SkaterId = blocks.MemberWhoBlocked.GameMemberId; a.PlayerWhoBlocked.SkaterName = blocks.MemberWhoBlocked.MemberName; a.PlayerWhoBlocked.SkaterLinkId = blocks.MemberWhoBlocked.MemberLinkId; to.BlockLeaders.Add(a); } games.Add(g); } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } to.Games = games; #endregion var ts = tourny.Teams.Where(x => x.IsRemoved == false); foreach (var team in ts) { try { TeamViewModel t = new TeamViewModel(); t.PoolNumber = team.PoolNumber; t.LeagueName = team.LeageName; //t.TeamLinkId = team.TeamIdLink; t.TeamName = team.TeamName; t.TeamId = team.TeamId; t.SeedRating = team.SeedRating; to.TeamsForTournament.Add(t); TournamentApi.TournamentTeam tt = new TournamentApi.TournamentTeam(team.TeamId, team.SeedRating, team.PoolNumber); to.TeamsForTournamentApi.Add(tt); } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } #region seededbracketsForPerformance try { to.TouramentTypeForSeedingEnum = (TournamentTypeEnum)tourny.TournamentTypeEnumForSeedingRound; if (to.TouramentTypeForSeedingEnum != TournamentTypeEnum.None) { TournamentApi.IPairingsGenerator pg = null; switch (to.TouramentTypeForSeedingEnum) { case TournamentTypeEnum.Boil_Off: pg = new BoilOffPairingsGenerator(); break; case TournamentTypeEnum.Round_Robin: pg = new RoundRobinPairingsGenerator(); break; case TournamentTypeEnum.Double_Elimination: pg = new EliminationTournament(2); break; case TournamentTypeEnum.Single_Elimination: pg = new EliminationTournament(1); break; case TournamentTypeEnum.Round_Robin_Pool_Play: pg = new RoundRobinPairingsGenerator(true); break; } if (pg is TournamentApi.ITournamentVisualizer) { to.VisualizedBracketsSeeded = (TournamentApi.ITournamentVisualizer)pg; } foreach (var round in tourny.SeedingRounds) { try { TournamentRoundsClass r = new TournamentRoundsClass(); List<TournamentApi.TournamentPairing> ppList = new List<TournamentApi.TournamentPairing>(); r.RoundNumber = round.RoundNumber; foreach (var pair in round.Pairings) { List<TournamentApi.TournamentTeamScore> ttList = new List<TournamentApi.TournamentTeamScore>(); TournamentPairingClass p = new TournamentPairingClass(); p.Id = pair.PairingId; p.GroupId = pair.GroupId; p.TimeToStart = pair.StartTime.GetValueOrDefault(); if (pair.StartTime.HasValue) p.TimeToStartDisplay = p.TimeToStart.ToString("HH:mm"); p.TrackId = pair.TrackNumber; foreach (var team in pair.Teams) { TeamViewModel t = new TeamViewModel(); t.TeamId = team.Team.TeamId; t.TeamName = team.Team.TeamName; t.TeamLinkId = team.TeamIdInGame; if (t.TeamLinkId != new Guid() && p.GameId == new Guid()) { var g = to.Games.Where(x => x.Team1Id == t.TeamLinkId || x.Team2Id == t.TeamLinkId).FirstOrDefault(); if (g != null) p.GameId = g.GameId; } t.Score = team.Score; p.Teams.Add(t); TournamentApi.TournamentTeamScore tt = new TournamentApi.TournamentTeamScore(new TournamentApi.TournamentTeam(t.TeamId, team.Team.SeedRating), new TournamentApi.HighestPointsScore(team.Score)); ttList.Add(tt); } TournamentApi.TournamentPairing pp = new TournamentApi.TournamentPairing(ttList); pp.GroupId = p.GroupId; ppList.Add(pp); r.Pairings.Add(p); } TournamentApi.TournamentRound rr = new TournamentApi.TournamentRound(ppList); to.TournamentRoundsApiForSeeding.Add(rr); to.TournamentRoundsForSeedingGameplay.Add(r); } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } if (pg != null) { pg.LoadState(to.TeamsForTournamentApi, to.TournamentRoundsApiForSeeding); try { var nextRound = pg.CreateNextRound(null); to.HasSeedingFinishForTournament = (nextRound == null) && (tourny.SeedingRounds.Count() > 1); if (to.TournamentRoundsApiForSeeding.Any()) { var rankings = pg.GenerateRankings(); to.RankingsForSeededRounds = new List<TournamentApi.TournamentRanking>(from rk in rankings select new TournamentApi.TournamentRanking { TeamName = to.TeamsForTournament.Where(tm => tm.TeamId == rk.team.TeamId).Single().TeamName, rank = rk.rank, Loses = rk.Loses, PointSpread = rk.PointSpread, scoreDescription = rk.scoreDescription, team = rk.team, TotalPoints = rk.TotalPoints, Wins = rk.Wins }); } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } #endregion #region brackets try { to.TournamentType = (TournamentTypeEnum)tourny.TournamentTypeEnum; if (to.TournamentType != TournamentTypeEnum.None) { if (to.TouramentTypeForSeedingEnum != TournamentTypeEnum.None && to.HasSeedingFinishForTournament) { foreach (var ranking in to.RankingsForSeededRounds) { var team = to.TeamsForTournamentApi.Where(x => x.TeamId == ranking.team.TeamId).FirstOrDefault(); team.Rating = (int)ranking.rank; } } TournamentApi.IPairingsGenerator pg = null; switch (to.TournamentType) { case TournamentTypeEnum.Boil_Off: pg = new BoilOffPairingsGenerator(); break; case TournamentTypeEnum.Round_Robin: pg = new RoundRobinPairingsGenerator(); break; case TournamentTypeEnum.Round_Robin_Pool_Play: pg = new RoundRobinPairingsGenerator(true); break; case TournamentTypeEnum.Double_Elimination: pg = new EliminationTournament(2); break; case TournamentTypeEnum.Single_Elimination: pg = new EliminationTournament(1); break; } try { if (pg is TournamentApi.ITournamentVisualizer) { to.VisualizedBrackets = (TournamentApi.ITournamentVisualizer)pg; } } catch //(TournamentApi.InvalidTournamentStateException ex) { //Debug.WriteLine(ex); } foreach (var round in tourny.Rounds) { try { TournamentRoundsClass r = new TournamentRoundsClass(); List<TournamentApi.TournamentPairing> ppList = new List<TournamentApi.TournamentPairing>(); r.RoundNumber = round.RoundNumber; foreach (var pair in round.Pairings) { List<TournamentApi.TournamentTeamScore> ttList = new List<TournamentApi.TournamentTeamScore>(); TournamentPairingClass p = new TournamentPairingClass(); p.Id = pair.PairingId; p.GroupId = pair.GroupId; p.TimeToStart = pair.StartTime.GetValueOrDefault(); if (pair.StartTime.HasValue) p.TimeToStartDisplay = p.TimeToStart.ToString("HH:mm"); p.TrackId = pair.TrackNumber; foreach (var team in pair.Teams) { TeamViewModel t = new TeamViewModel(); t.TeamId = team.Team.TeamId; t.TeamName = team.Team.TeamName; t.TeamLinkId = team.TeamIdInGame; if (t.TeamLinkId != new Guid() && p.GameId == new Guid()) { var g = to.Games.Where(x => x.Team1Id == t.TeamLinkId || x.Team2Id == t.TeamLinkId).FirstOrDefault(); if (g != null) p.GameId = g.GameId; } t.Score = team.Score; p.Teams.Add(t); TournamentApi.TournamentTeamScore tt = new TournamentApi.TournamentTeamScore(new TournamentApi.TournamentTeam(t.TeamId, team.Team.SeedRating), new TournamentApi.HighestPointsScore(team.Score)); ttList.Add(tt); } TournamentApi.TournamentPairing pp = new TournamentApi.TournamentPairing(ttList); pp.GroupId = p.GroupId; ppList.Add(pp); r.Pairings.Add(p); } TournamentApi.TournamentRound rr = new TournamentApi.TournamentRound(ppList); to.TournamentRoundsApi.Add(rr); to.TournamentRounds.Add(r); } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } if (pg != null) { pg.LoadState(to.TeamsForTournamentApi, to.TournamentRoundsApi); try { var nextRound = pg.CreateNextRound(null); to.IsTournamentFinished = (nextRound == null) && (tourny.Rounds.Count() > 1); if (to.TournamentRoundsApi.Any()) { var rankings = pg.GenerateRankings(); to.Rankings = new List<TournamentApi.TournamentRanking>(from rk in rankings select new TournamentApi.TournamentRanking { TeamName = to.TeamsForTournament.Where(tm => tm.TeamId == rk.team.TeamId).Single().TeamName, rank = rk.rank, Loses = rk.Loses, PointSpread = rk.PointSpread, scoreDescription = rk.scoreDescription, team = rk.team, TotalPoints = rk.TotalPoints, Wins = rk.Wins }); } } catch (TournamentApi.InvalidTournamentStateException) { } } } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } #endregion return to; } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } return null; }
public void SingleEliminationTieDisallowed() { IPairingsGenerator pg = new EliminationTournament(1); List<TournamentTeam> teams = new List<TournamentTeam>(CreateTeams(2)); List<TournamentRound> rounds = new List<TournamentRound>(); pg.LoadState(teams, rounds); TournamentRound round = pg.CreateNextRound(null); round.Pairings[0].TeamScores[0].Score = new HighestPointsScore(10); round.Pairings[0].TeamScores[1].Score = new HighestPointsScore(10); rounds.Add(round); try { RunTournament(pg, teams, rounds, false, null); Assert.Fail(); } catch (InvalidTournamentStateException) { return; } }
public void SingleEliminationThrowsExceptionOnNullParameters() { IPairingsGenerator pg = new EliminationTournament(1); try { pg.LoadState(null, null); Assert.Fail(); } catch (ArgumentNullException) { } }
public void SingleEliminationLastPersonNeverGetsABye() { IPairingsGenerator pg = new EliminationTournament(1); for (int i = 2; i <= 33; i++) { List<TournamentTeam> teams = new List<TournamentTeam>(CreateTeams(i)); List<TournamentRound> rounds = new List<TournamentRound>(); pg.LoadState(teams, rounds); TournamentTeam targetTeam = teams[teams.Count - 1]; TournamentRound round = pg.CreateNextRound(null); var targetTeamPairings = from p in round.Pairings where p.TeamScores.Where(ts => ts.Team.TeamId == targetTeam.TeamId).Any() select p; var pairingsThatAreByes = from ttp in targetTeamPairings where ttp.TeamScores.Count() == 1 select ttp; if (pairingsThatAreByes.Any()) { Assert.Fail(); } } }
public void SingleEliminationHandlesOutOfOrderCompetitors() { for (int i = 0; i < 10; i++) { var teamNames = new Dictionary<long, string>(); teamNames[0] = "A"; teamNames[1] = "B"; teamNames[2] = "C"; teamNames[3] = "D"; teamNames[4] = "E"; teamNames[5] = "F"; var teams = (from k in teamNames.Keys orderby k select new TournamentTeam(k, r.Next(1000))).ToList(); var round1 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[0], Score(1)), new TournamentTeamScore(teams[1], Score(2))), new TournamentPairing( new TournamentTeamScore(teams[2], Score(3)), new TournamentTeamScore(teams[3], Score(4)))); var round2 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[1], Score(5)), new TournamentTeamScore(teams[3], Score(6)))); var round3 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[4], Score(7)), new TournamentTeamScore(teams[5], Score(8)))); var round4 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[5], Score(9)), new TournamentTeamScore(teams[3], Score(10)))); var rounds = (new[] { round1, round2, round3, round4 }).ToList(); IPairingsGenerator pg = new EliminationTournament(1); pg.LoadState(teams, rounds); Assert.IsNull(pg.CreateNextRound(null)); DisplayTournamentRankings(pg.GenerateRankings()); } for (int i = 0; i < 10; i++) { var teamNames = new Dictionary<long, string>(); teamNames[0] = "A"; teamNames[1] = "B"; teamNames[2] = "C"; teamNames[3] = "D"; teamNames[4] = "E"; teamNames[5] = "F"; var teams = (from k in teamNames.Keys orderby k select new TournamentTeam(k, r.Next(1000))).ToList(); var round1 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[0], Score(1)), new TournamentTeamScore(teams[1], Score(2))), new TournamentPairing( new TournamentTeamScore(teams[2], Score(3)), new TournamentTeamScore(teams[3], Score(4)))); var round2 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[1], Score(5)), new TournamentTeamScore(teams[4], Score(6)))); var round3 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[3], Score(7)), new TournamentTeamScore(teams[5], Score(8)))); var round4 = new TournamentRound( new TournamentPairing( new TournamentTeamScore(teams[4], Score(9)), new TournamentTeamScore(teams[5], Score(10)))); var rounds = (new[] { round1, round2, round3, round4 }).ToList(); IPairingsGenerator pg = new EliminationTournament(1); pg.LoadState(teams, rounds); Assert.IsNull(pg.CreateNextRound(null)); DisplayTournamentRankings(pg.GenerateRankings()); } }
public void SingleEliminationHandlesManyCompetitorsWell() { IPairingsGenerator pg = new EliminationTournament(1); for (int i = 30; i <= 40; i++) { List<TournamentTeam> teams = new List<TournamentTeam>(CreateTeams(i)); List<TournamentRound> rounds = new List<TournamentRound>(); Dictionary<long, string> teamNames = new Dictionary<long, string>(); foreach (var team in teams) { teamNames.Add(team.TeamId, "Team#" + team.TeamId); } TournamentNameTable nameTable = new TournamentNameTable(teamNames); try { RunTournament(pg, teams, rounds, false, nameTable); DisplayTournamentRounds(rounds); DisplayTournamentRankings(pg.GenerateRankings()); } catch (InvalidTournamentStateException) { throw; } } }