Exemple #1
0
        public void RasporediIgraceSingleElimination(Takmicenje takmicenje)
        {
            List <(int prijavaID, int ELO)> Prijave = NadjiELOPrijavama(takmicenje); // dobavlja elo i smjesta ga u tuple s prijavom

            Prijave.Sort((y, x) => x.ELO.CompareTo(y.ELO));                          // sortira silazno po elou
            //jquery bracket prikazuje byeove ako kao ime igraca/tima posaljes NULL ,ja bih mogao iskoristit to i imati "univerzalan
            //slucaj" gdje cu samo prvu rundu postavit

            Runda runda      = takmicenje.Bracketi.First().Runde.Where(x => x.BrojRunde == 1).FirstOrDefault();
            Runda drugaRunda = takmicenje.Bracketi.First().Runde.Where(x => x.BrojRunde == 2).FirstOrDefault();
            //kod single elim je samo jedan bracket
            List <(int?prijavaA, int?prijavaB)> Parovi = GetParove(Prijave);
            // dobavlja parove od prijava  ukljucujuci i byeove koji su null
            int BrojacParova = 0;

            foreach (Utakmica x in runda.Utakmice)
            {
                (int?pr1, int?pr2)Par = Parovi[BrojacParova++];
                RasporediUcescaNaUtakmicu(x, Par, true);
                db.SaveChanges();

                if (Par.pr1 == null || Par.pr2 == null)
                //ako je bye,odma ga na drugu rundu dodaj jer se taj mec nece manualno evidentirati kao ostali
                {
                    int      BrojOdgovarajuceIduceUtakmice = NadjiOdgovarajucuIducuUtakmicu(x.BrojUtakmice, runda.Utakmice.Count());
                    Utakmica IducaRundaUtakmica            =
                        db.Utakmice.Include(x => x.UcescaNaUtakmici)
                        .Where(c => c.Runda == drugaRunda && c.BrojUtakmice == BrojOdgovarajuceIduceUtakmice)
                        .FirstOrDefault();
                    RasporediUcescaNaUtakmicu(IducaRundaUtakmica, Par, true);
                    db.SaveChanges();
                }
            }
        }
        public void GenerisiRaspored(Takmicenje _takmicenje)
        {
            using (var transakcija = db.Database.BeginTransaction())
            {
                try
                {
                    Bracket noviBracket = new Bracket
                    {
                        Naziv        = _takmicenje.Naziv + " bracket",
                        TakmicenjeID = _takmicenje.ID,
                        Runde        = new List <Runda>()
                    };

                    _takmicenje.Bracketi.Add(noviBracket);
                    db.SaveChanges();

                    //kreirati runde(izracunati broj rundi od broja prijava i sistema takmicenja)
                    //otprilike ce biti nesto ovako :
                    (int runde, int byeovi)Runde = pomocnaFunkcijaIzracunajRunde(_takmicenje.Sistem, _takmicenje.Prijave.Count());
                    //kreirati runde i za svaku rundu ce biti potrebno kreirati utakmice
                    //otprilike ovako
                    int kopijaBrojIgraca = _takmicenje.Prijave.Count();  //brojIGraca(query je ovo) // ovo je ustvari brojPrijava a ne igraca)
                    int brojUtakmice     = 1;
                    for (int i = 0; i < Runde.runde; i++)
                    {
                        Runda runda = new Runda
                        {
                            BracketID = noviBracket.ID,
                            BrojRunde = i + 1,
                            Utakmice  = new List <Utakmica>()
                        };// atributi : BracketID postaviti, brojRunde = i+1 // datum pocetka bi se mogao pri evidenciji meca rjesavat,prvi                                                 mec koji se evidentira updateuje pocetkarunde datum
                        noviBracket.Runde.Add(runda);
                        db.SaveChanges();
                        KreirajTekmeURundi(ref kopijaBrojIgraca, runda.ID, _takmicenje.Sistem, ref brojUtakmice, _takmicenje.Vrsta);
                    }
                    RasporediIgrace(_takmicenje);

                    db.SaveChanges();
                    _takmicenje.Inicirano = true;
                    db.SaveChanges();
                    transakcija.Commit();
                }
                catch (Exception err)
                {
                    transakcija.Rollback();
                    throw err;
                }
            }
        }