예제 #1
0
        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);
        }
예제 #2
0
        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;
        }