private SwissTournament GetTournament(int draftId) { if (TournamentManagers.TryAdd(draftId, new SwissTournament())) { var draft = _db.CubeDrafts .Include("CubeDraftResults") .Include("CubeDraftPlayers") .Include("CubeDraftPlayers.MtgoLink") .Single(d => d.Id == draftId); if (draft != null) { foreach (var player in draft.CubeDraftPlayers.Where(p => p.Confirmed)) { var playerObj = new Player(); playerObj.FromDB(player); TournamentManagers[draftId].AddPlayer(playerObj); } foreach (var result in draft.CubeDraftResults) { var match = new TournMatch(); match.FromDB(result); TournamentManagers[draftId].AddMatch(match); } } } return(TournamentManagers[draftId]); }
private void SplitMatch(int rowNumber) { TournMatch tournMatch = (TournMatch)((DataRowView)this.dgMatches.Rows[rowNumber].DataBoundItem)["MatchObject"]; while (tournMatch.Players.Count > 0) { if (!tournMatch.Players[0].IsBye) { this.listUnassignedPlayers.Items.Add((object)new ManualPairingObject(this.GetPlayer((object)tournMatch.Players[0]))); } tournMatch.Players.RemoveAt(0); } bool flag = false; for (int index = 0; index < this.ddlOpenTables.Items.Count; ++index) { if (int.Parse(this.ddlOpenTables.Items[index].ToString()) > tournMatch.Table) { this.ddlOpenTables.Items.Insert(index, (object)tournMatch.Table.ToString()); flag = true; break; } } if (!flag) { this.ddlOpenTables.Items.Add((object)tournMatch.Table.ToString()); this.ddlOpenTables.SelectedIndex = 0; } this.Matches.RemoveMatch((ITournMatch)tournMatch); this.dgMatches.Rows.RemoveAt(rowNumber); }
private void CreateMatch(ITournPlayer player1, ITournPlayer player2, ITournPlayer winner) { int table = int.Parse(this.ddlOpenTables.Text); if (this.Matches.GetByRoundTable(this.Round, table) == null) { TournMatch tournMatch = new TournMatch(); tournMatch.Table = table; tournMatch.Round = this.Round; tournMatch.Players.AddPlayer(player1); tournMatch.Players.AddPlayer(player2); if (winner != null) { tournMatch.Winner = winner.ID; tournMatch.Status = TournMatchResult.Winner; } tournMatch.Players.SortByIDByesLast(); this.Matches.AddMatch((ITournMatch)tournMatch); this.NewMatches.AddMatch((ITournMatch)tournMatch); this.Matches.SortByRoundTable(); this.BindMatches(); this.RemovePlayerFromUnassigned(tournMatch.Players[0].ID); this.RemovePlayerFromUnassigned(tournMatch.Players[1].ID); this.ddlOpenTables.Items.Remove((object)table.ToString()); if (this.ddlOpenTables.Items.Count <= 0) { return; } this.ddlOpenTables.SelectedIndex = 0; } else { int num = (int)MessageBox.Show("Error assigning match to the table"); } }
private void NextPair() { var player = _tempPlayers.Shuffle().OrderByDescending(p => p.Wins).First(); var previousOpponents = Matches.Where(p => p.Player1 == player || p.Player2 == player) .Select(p => p.Player1 == player ? p.Player2 : p.Player1); //Find the best player //can't add ThenBy points as it can create infinte loops var match = _tempPlayers.OrderByDescending(p => p.Wins).ThenBy(p => Guid.NewGuid()).ToList().FirstOrDefault(p => !previousOpponents.Contains(player) && p != player); if (match == null) { throw new InvalidOperationException("Unable to find match for player:" + player.PlayerName + "tempPlayers: " + _tempPlayers.Count + " " + _tempPlayers[0].PlayerName + " " + _tempPlayers[1].PlayerName); } TournMatch thispair = new TournMatch(player, match, _nextRound); if (!previousOpponents.Contains(match)) { _pairings.Add(thispair); _tempPlayers.Remove(player); _tempPlayers.Remove(match); } else { Console.WriteLine("Caught a Re-pair: {0}", thispair.ToString()); /*if (cycle >= 10) * { * Thread.Sleep(5000); * }*/ int samepoints = player.Wins; var playertier = _pairings.Where( tierpair => (tierpair.Player1.Wins == samepoints || tierpair.Player2.Wins == samepoints)).ToArray(); foreach (TournMatch thistierpair in playertier) { _pairings.Remove(thistierpair); _tempPlayers.Add(thistierpair.Player1); _tempPlayers.Add(thistierpair.Player2); } var equals = _tempPlayers.Where(equalplayer => equalplayer.Wins == player.Wins).ToArray(); if (equals.Length == 2) { Console.WriteLine("Pair Down"); _tempPlayers.Remove(player); NextPair(); _tempPlayers.Add(player); } } return; }
private void ddlDroppedPlayers_SelectedIndexChanged(object sender, EventArgs e) { if (this.CurrentTournament == null) { int num = (int)MessageBox.Show("Error reading tournament info"); this.DialogResult = DialogResult.Cancel; this.Close(); } if (this.ddlDroppedPlayers.SelectedIndex < 0) { int num1 = (int)MessageBox.Show("Invalid Player"); } else { this.currentPlayer = (ITournPlayer)this.ddlDroppedPlayers.SelectedItem; this.listCurrentPairings.Items.Clear(); this.listNewPairings.Items.Clear(); int round = this.CurrentTournament.CurrentRound - 1; ITournMatchArray byRound = this.CurrentTournament.Matches.GetByPlayer(this.currentPlayer.ID).GetByRound(round); if (byRound.Count == 0) { int num2 = (int)MessageBox.Show("Player was not in previous round"); } else { if (byRound[0].Players[0].ID == byRound[0].Winner) { this.chkPrevRoundP1Drop.Text = byRound[0].Players[0].FullNameWithId + " (Winner)"; this.chkPrevRoundP2Drop.Text = byRound[0].Players[1].FullNameWithId; } else if (byRound[0].Players[1].ID == byRound[0].Winner) { this.chkPrevRoundP1Drop.Text = byRound[0].Players[0].FullNameWithId; this.chkPrevRoundP2Drop.Text = byRound[0].Players[1].FullNameWithId + " (Winner)"; } else { this.chkPrevRoundP1Drop.Text = string.Format("{0} ({1})", (object)byRound[0].Players[0].FullNameWithId, (object)byRound[0].StatusText); this.chkPrevRoundP2Drop.Text = byRound[0].Players[1].FullNameWithId; } this.chkPrevRoundP1Drop.Checked = byRound[0].Players[0].DropRound == round; this.chkPrevRoundP2Drop.Checked = byRound[0].Players[1].DropRound == round; this.radioREOSwapDrops.Enabled = byRound[0].Players[0].IsActive ^ byRound[0].Players[1].IsActive; this.CurrentMatches = this.CurrentTournament.Matches.GetPairedDown(this.CurrentTournament.CurrentRound); foreach (ITournMatch currentMatch in (IEnumerable <ITournMatch>) this.CurrentMatches) { if (currentMatch.Players.HasPlayer(Player.BYE_ID) && currentMatch.Winner != Player.BYE_ID) { this.playerVsBye = currentMatch; this.radioREOVsCurrentPlayerWithBye.Enabled = true; using (IEnumerator <ITournPlayer> enumerator = currentMatch.Players.GetEnumerator()) { while (enumerator.MoveNext()) { ITournPlayer current = enumerator.Current; if (!current.IsBye) { this.radioREOVsCurrentPlayerWithBye.Text = string.Format("Pair vs. Bye Player: {0} ({1} pts)", (object)current.FullNameWithId, (object)current.Points); } } break; } } } this.radioREOByeLoss.Enabled = true; this.radioREOByeWin.Enabled = true; this.radioREORePairings.Enabled = true; byRound.SortByPoints(); for (int index = this.CurrentMatches.Count - 1; index >= 0; --index) { if (this.CurrentMatches[index].Points > this.currentPlayer.Tie1_Wins) { this.CurrentMatches.RemoveAt(index); } } Random random = new Random(); for (int pointCount = 0; pointCount <= this.currentPlayer.Tie1_Wins; ++pointCount) { if (this.CurrentMatches.GetByPoints(this.CurrentTournament.CurrentRound, pointCount).Count == 0) { ITournMatchArray byPoints = this.CurrentTournament.Matches.GetByPoints(this.CurrentTournament.CurrentRound, pointCount); if (byPoints.Count > 0) { this.CurrentMatches.AddMatch(byPoints[random.Next(byPoints.Count - 1)]); } } } this.CurrentMatches.SortByPoints(); foreach (ITournMatch currentMatch in (IEnumerable <ITournMatch>) this.CurrentMatches) { this.listCurrentPairings.Items.Add((object)string.Format("#{0}: {1} ({2} pts) vs {3} ({4} pts)", (object)(currentMatch.Table + this.CurrentTournament.TableOffset), (object)currentMatch.Players[0].FullNameWithId, (object)currentMatch.Players[0].Tie1_Wins, (object)currentMatch.Players[1].FullNameWithId, (object)currentMatch.Players[1].Tie1_Wins)); } this.PendingMatches.Clear(); ITournPlayer player1 = this.currentPlayer; foreach (ITournMatch currentMatch in (IEnumerable <ITournMatch>) this.CurrentMatches) { TournMatch tournMatch = new TournMatch(currentMatch); this.PendingMatches.AddMatch((ITournMatch)tournMatch); ITournPlayer currentPlayer = this.currentPlayer; ITournPlayer player2 = !tournMatch.Players[0].IsBye ? (!tournMatch.Players[1].IsBye ? (tournMatch.Players[0].Tie1_Wins <= tournMatch.Players[1].Tie1_Wins ? (tournMatch.Players[0].Tie1_Wins >= tournMatch.Players[1].Tie1_Wins ? tournMatch.Players[random.Next(tournMatch.Players.Count - 1)] : tournMatch.Players[0]) : tournMatch.Players[1]) : tournMatch.Players[1]) : tournMatch.Players[0]; tournMatch.Players.RemovePlayer(player2); tournMatch.Players.AddPlayer(player1); tournMatch.Winner = Player.BYE_ID; tournMatch.Status = TournMatchResult.Incomplete; player1 = player2; } if (!player1.IsBye) { ITournMatch blankMatch = this.CreateBlankMatch(); blankMatch.Players.AddPlayer(player1); blankMatch.Players.AddPlayer((ITournPlayer) new TournPlayer((IPlayer)Player.ByePlayer)); blankMatch.Winner = player1.ID; blankMatch.Status = TournMatchResult.Winner; this.PendingMatches.AddMatch(blankMatch); } foreach (ITournMatch pendingMatch in (List <ITournMatch>) this.PendingMatches) { this.listNewPairings.Items.Add((object)string.Format("#{0}: {1} ({2} pts) vs {3} ({4} pts)", (object)(pendingMatch.Table + this.CurrentTournament.TableOffset), (object)pendingMatch.Players[0].FullNameWithId, (object)pendingMatch.Players[0].Tie1_Wins, (object)pendingMatch.Players[1].FullNameWithId, (object)pendingMatch.Players[1].Tie1_Wins)); } this.chkPrintNewResultSlips.Enabled = true; } } }
private void btnApplyChanges_Click(object sender, EventArgs e) { this.currentPlayer.DropRound = 0; this.currentPlayer.DropReason = CutType.Active; if (this.radioREOByeLoss.Checked) { ITournMatch blankMatch = this.CreateBlankMatch(); blankMatch.Players.AddPlayer(this.currentPlayer); blankMatch.Players.AddPlayer((ITournPlayer) new TournPlayer((IPlayer)Player.ByePlayer)); blankMatch.Winner = Player.BYE_ID; blankMatch.Status = TournMatchResult.Winner; this.PendingMatches.Clear(); this.NewMatches.AddMatch(blankMatch); } else if (this.radioREOByeWin.Checked) { ITournMatch blankMatch = this.CreateBlankMatch(); blankMatch.Players.AddPlayer(this.currentPlayer); blankMatch.Players.AddPlayer((ITournPlayer) new TournPlayer((IPlayer)Player.ByePlayer)); blankMatch.Winner = this.currentPlayer.ID; blankMatch.Status = TournMatchResult.Winner; this.PendingMatches.Clear(); this.NewMatches.AddMatch(blankMatch); } else if (this.radioREORePairings.Checked) { this.NewMatches.Append((ITournMatchArray)this.PendingMatches); this.PendingMatches.Clear(); } else if (this.radioREOSwapDrops.Checked) { int round = this.CurrentTournament.CurrentRound - 1; ITournMatchArray byPlayer1 = this.CurrentTournament.Matches.GetByPlayer(this.currentPlayer.ID); if (byPlayer1.Count == 0) { int num = (int)MessageBox.Show("Error"); return; } ITournMatchArray byRound1 = byPlayer1.GetByRound(round); if (byRound1.Count > 1) { int num = (int)MessageBox.Show("Error"); return; } ITournPlayer byId = this.CurrentTournament.Players.FindById(byRound1[0].GetOpponentId(this.currentPlayer.ID)); byId.DropRound = round; byId.DropReason = CutType.Drop; ITournMatchArray byPlayer2 = this.CurrentTournament.Matches.GetByPlayer(byId.ID); if (byPlayer2.Count == 0) { int num = (int)MessageBox.Show("Error"); return; } ITournMatchArray byRound2 = byPlayer2.GetByRound(this.CurrentTournament.CurrentRound); if (byRound2.Count > 1) { int num = (int)MessageBox.Show("Error"); return; } TournMatch tournMatch = new TournMatch(byRound2[0]); tournMatch.Players.RemovePlayer(byId); tournMatch.Players.AddPlayer(this.currentPlayer); tournMatch.Winner = Player.BYE_ID; tournMatch.Status = TournMatchResult.Incomplete; this.PendingMatches.Clear(); this.NewMatches.AddMatch((ITournMatch)tournMatch); } else if (this.radioREOVsCurrentPlayerWithBye.Checked) { this.playerVsBye.Players.SortByIDByesLast(); this.playerVsBye.Players.RemoveAt(this.playerVsBye.Players.Count - 1); this.playerVsBye.Players.AddPlayer(this.currentPlayer); this.playerVsBye.Winner = Player.BYE_ID; this.playerVsBye.Status = TournMatchResult.Incomplete; this.PendingMatches.Clear(); this.NewMatches.AddMatch(this.playerVsBye); } this.DialogResult = DialogResult.OK; }
public void AddMatch(TournMatch match) { Matches.AddMatch(match); CurrentRound = Matches.Count == 0 ? 0 : Matches.Max(m => m.Round); }