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; } } }