public static MatchLijst GenereerMatchLijst() { List <Versus> versusLijst = new List <Versus>(); List <Persoon> aanwezigePersonen = new List <Persoon>(); foreach (Persoon p in DataSources.Instance.personen) { if (p.Aanwezig && p.Id > -1) { aanwezigePersonen.Add(p); } } //match personen op met elkaar Random random = new Random(); while (aanwezigePersonen.Count > 1) { Debug.WriteLine("aanwezige personen: " + aanwezigePersonen.Count + " - persoon 1: " + aanwezigePersonen[0].Naam); Versus versus = new Versus(); int rand = random.Next(0, 101); int randIndex = rand >= 55 ? 0 : 0 + 1; Persoon p1 = new Persoon(), p2 = new Persoon(); p1 = aanwezigePersonen[0]; for (int j = 1; j < aanwezigePersonen.Count; j++) { bool vorigeTegenstander = false; foreach (Persoon p in p1.vorigeTegenstanders) { if (aanwezigePersonen[j].Id == p.Id) { vorigeTegenstander = true; } } if (!vorigeTegenstander) { p2 = aanwezigePersonen[j]; aanwezigePersonen.Remove(aanwezigePersonen.Find(persoon => persoon.Id == p1.Id)); aanwezigePersonen.Remove(aanwezigePersonen.Find(persoon => persoon.Id == p2.Id)); break; } else { if (aanwezigePersonen.Count <= 4) { foreach (Persoon p in p1.vorigeTegenstanders) { if (p.Id == aanwezigePersonen[j].Id) { p2 = p; } } aanwezigePersonen.Remove(aanwezigePersonen.Find(persoon => persoon.Naam.Equals(p1.Naam))); aanwezigePersonen.Remove(aanwezigePersonen.Find(persoon => persoon.Naam.Equals(p2.Naam))); break; } } } versus.Id = versusLijst.Count; versus.Wit = randIndex == 1 ? p2 : p1; versus.Zwart = versus.Wit == p1 ? p2 : p1; versusLijst.Add(versus); Debug.WriteLine("Versus added!"); } MatchLijst matchLijst = new MatchLijst(versusLijst, DataSources.Instance.GenereerToernamentNummer()); DataSources.Instance.matchLijsten.Add(matchLijst); Persistentie.Opslaan(DataSources.Instance.matchLijsten, "matchLijsten"); return(matchLijst); }
public Matchmaking() { //kijk of er een huidige lijst is. zoniet, maak er dan een aan List <MatchLijst> matchLijsten = DataSources.Instance.matchLijsten; if (matchLijsten == null || matchLijsten.Find(matchLijst => matchLijst.huidigeLijst) == null) { MatchLijst.GenereerMatchLijst(); } huidigeMatchLijst = matchLijsten.Find(matchlijst => matchlijst.huidigeLijst); int vorigeNummer = -1; vorigeMatchLijst = matchLijsten.IndexOf(huidigeMatchLijst) <= 0 ? new MatchLijst() : matchLijsten[matchLijsten.IndexOf(huidigeMatchLijst) - 1]; if (vorigeMatchLijst == null) { vorigeMatchLijst = new MatchLijst(); } InitializeComponent(); Ronde.Text = (huidigeMatchLijst.nummer + 1).ToString(); Style style = new Style(); style.Setters.Add(new Setter(GridViewColumnHeader.FontSizeProperty, 20.0)); //vul de tabel met huidige matchlijst HuidigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Id", Binding = new Binding("Id"), Visibility = Visibility.Hidden }); HuidigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Wit", Binding = new Binding("Wit.Naam"), IsReadOnly = true, FontSize = 20, HeaderStyle = style }); HuidigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Zwart", Binding = new Binding("Zwart.Naam"), IsReadOnly = true, FontSize = 20, HeaderStyle = style }); HuidigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Uitslag", Binding = new Binding("Uitslag"), IsReadOnly = true, FontSize = 20, HeaderStyle = style }); VorigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Id", Binding = new Binding("Id"), Visibility = Visibility.Hidden }); VorigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Wit", Binding = new Binding("Wit.Naam"), IsReadOnly = true, FontSize = 20, HeaderStyle = style }); VorigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Zwart", Binding = new Binding("Zwart.Naam"), IsReadOnly = true, FontSize = 20, HeaderStyle = style }); VorigeMatches.Columns.Add(new DataGridTextColumn() { Header = "Uitslag", Binding = new Binding("Uitslag"), IsReadOnly = true, FontSize = 20, HeaderStyle = style }); bool allePersonenBestaan = true; foreach (Versus versus in huidigeMatchLijst.versuses) { if (versus.Wit == null || versus.Zwart == null) { allePersonenBestaan = false; } } if (!allePersonenBestaan) { if (MessageBox.Show("Een aantal matches bevatten personen die verwijderd zijn, wilt u de matches opnieuw aanmaken?", "personen missen in matches", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { matchLijsten.Remove(huidigeMatchLijst); MatchLijst.GenereerMatchLijst(); huidigeMatchLijst = matchLijsten.Find(matchlijst => matchlijst.huidigeLijst); } else { MessageBox.Show("Verander de matches zodat elke match een witte en zwarte speler heeft", "update matches"); } } VulDataGrid(); HuidigeMatches.MouseDoubleClick += DubbelKlik; }