예제 #1
0
파일: Sprava.cs 프로젝트: stankela/bilten
        public static Sprava[] getSpraveIPauze(int pauzeMask, Gimnastika gim)
        {
            List <Sprava> result        = new List <Sprava>();
            int           spravaIndex   = 1;
            int           pauzaIndex    = 1;
            int           maxPauzaIndex = 12; // 6 sprava + 6 pauza

            if (gim == Gimnastika.ZSG)
            {
                maxPauzaIndex = 10;
            }
            for (int i = 1; i <= maxPauzaIndex; ++i)
            {
                if (RasporedNastupa.isPauzaSet(pauzeMask, i))
                {
                    result.Add((Sprava)((int)Sprava.PraznaSprava1 + pauzaIndex - 1));
                    ++pauzaIndex;
                }
                else
                {
                    if ((gim == Gimnastika.MSG && spravaIndex <= 6) || (gim == Gimnastika.ZSG && spravaIndex <= 4))
                    {
                        result.Add(Sprave.getSprava(spravaIndex, gim));
                        ++spravaIndex;
                    }
                }
            }
            return(result.ToArray());
        }
예제 #2
0
 public virtual void initPoredakSpravaFinaleKupa(Gimnastika gimnastika)
 {
     foreach (Sprava s in Sprave.getSprave(gimnastika))
     {
         PoredakSpravaFinaleKupa poredak = new PoredakSpravaFinaleKupa();
         poredak.Sprava = s;
         _poredakSpravaFinaleKupa.Add(poredak);
     }
 }
예제 #3
0
 public Takmicenje3(Gimnastika gimnastika)
 {
     foreach (Sprava s in Sprave.getSprave(gimnastika))
     {
         if (s != Sprava.Preskok)
         {
             _poredak.Add(new PoredakSprava(DeoTakmicenjaKod.Takmicenje3, s));
         }
     }
     _poredakPreskok = new PoredakPreskok(DeoTakmicenjaKod.Takmicenje3);
 }
예제 #4
0
        // NOTE: Nisu implementirani Equals i GetHashCode (iako se PoredakSpravaFinaleKupa cuva u setovima) zato sto je
        // podrazumevani Equals dovoljan.

        public virtual void dumpRezultati(StreamWriter streamWriter)
        {
            string header = Sprave.toString(Sprava).ToUpper() + " - FINALE";

            streamWriter.WriteLine(header);
            foreach (RezultatSpravaFinaleKupa r in getRezultati())
            {
                string line = r.Rank + ". " + r.Gimnasticar.ImeSrednjeImePrezimeDatumRodjenja + "   " + r.Total;
                streamWriter.WriteLine(line);
            }
        }
예제 #5
0
        public virtual void addNewGrupa(Gimnastika gimnastika)
        {
            Sprava[] sprave = Sprave.getSpraveIPauze(PauzeMask, gimnastika);
            if (canAddNewGrupa())
            {
                int brojRotacija = sprave.Length;
                int grupa        = getBrojGrupa() + 1;

                for (int i = 1; i <= brojRotacija; i++)
                {
                    foreach (Sprava s in sprave)
                    {
                        StartListe.Add(new StartListaNaSpravi(s, (byte)grupa, (byte)i, NacinRotacije.NeRotirajNista));
                    }
                }
            }
        }
예제 #6
0
        public RasporedSudija(IList <TakmicarskaKategorija> kategorije,
                              DeoTakmicenjaKod deoTakKod, Gimnastika gimnastika)
        {
            if (kategorije.Count == 0)
            {
                throw new ArgumentException("Kategorije ne smeju da budu prazne.");
            }

            this.Naziv      = RasporedNastupa.kreirajNaziv(kategorije);
            this.deoTakKod  = deoTakKod;
            this.takmicenje = kategorije[0].Takmicenje;

            Sprava[] sprave = Sprave.getSprave(gimnastika);
            foreach (Sprava s in sprave)
            {
                odbori.Add(new SudijskiOdborNaSpravi(s));
            }
        }
예제 #7
0
        private RezultatEkipno createRezultatEkipno(Ekipa e, List <RezultatUkupno> rezultatiUkupno, int brojRezultata,
                                                    Gimnastika gimnastika)
        {
            RezultatEkipno result = new RezultatEkipno();

            result.Ekipa = e;

            foreach (Sprava s in Sprave.getSprave(gimnastika))
            {
                if (!e.getSpravaSeBoduje(s))
                {
                    continue;
                }

                PropertyDescriptor[] propDesc = new PropertyDescriptor[] {
                    TypeDescriptor.GetProperties(typeof(RezultatEkipno))[s.ToString()]
                };
                ListSortDirection[] sortDir = new ListSortDirection[] {
                    ListSortDirection.Descending
                };
                rezultatiUkupno.Sort(new SortComparer <RezultatUkupno>(propDesc, sortDir));

                for (int i = 0; i < rezultatiUkupno.Count; i++)
                {
                    if (i < brojRezultata)
                    {
                        Nullable <float> ocena = rezultatiUkupno[i].getSprava(s);
                        if (ocena != null)
                        {
                            result.addOcena(s, ocena.Value);
                        }
                    }
                }
            }

            if (e.Penalty != null)
            {
                result.addPenalty(e.Penalty.Value);
            }
            return(result);
        }
예제 #8
0
        public Takmicenje1(Takmicenje takmicenje)
        {
            if (takmicenje.ZbirViseKola)
            {
                _poredakUkupnoZbirViseKola = new PoredakUkupnoZbirViseKola();
                _poredakEkipnoZbirViseKola = new PoredakEkipnoZbirViseKola();
            }
            else if (takmicenje.FinaleKupa)
            {
                _poredakUkupnoFinaleKupa = new PoredakUkupnoFinaleKupa();
                _poredakEkipnoFinaleKupa = new PoredakEkipnoFinaleKupa();
            }

            _poredakUkupno = new PoredakUkupno(DeoTakmicenjaKod.Takmicenje1);
            foreach (Sprava s in Sprave.getSprave(takmicenje.Gimnastika))
            {
                if (s != Sprava.Preskok)
                {
                    _poredakSprava.Add(new PoredakSprava(DeoTakmicenjaKod.Takmicenje1, s));
                }
            }
            _poredakPreskok = new PoredakPreskok(DeoTakmicenjaKod.Takmicenje1);
            _poredakEkipno  = new PoredakEkipno(DeoTakmicenjaKod.Takmicenje1);
        }
예제 #9
0
        public virtual void kreirajRotaciju(int grupa, int rot, List <List <Sprava> > aktivneSprave)
        {
            foreach (Sprava s in Sprave.getSpraveIPauze(PauzeMask, Takmicenje.Gimnastika))
            {
                StartListaNaSpravi startLista = getStartLista(s, grupa, rot);
                startLista.clear();

                if (aktivneSprave[rot - 1].IndexOf(s) == -1)
                {
                    // Sprava nije aktivna u rotaciji.
                    continue;
                }

                StartListaNaSpravi startListaPrethRot = getStartListaPrethRot(startLista, aktivneSprave);
                if (startListaPrethRot.Nastupi.Count == 0)
                {
                    continue;
                }
                if (Sprave.isPraznaSprava(startListaPrethRot.Sprava))
                {
                    // Ako je prethodna sprava pauza, samo prebacujem gimnasticare na novu spravu, bez obzira koji je
                    // nacin rotacije. Rotacija je izvrsena kada sam prebacivao sa sprave na pauzu.
                    foreach (NastupNaSpravi n in startListaPrethRot.Nastupi)
                    {
                        startLista.addNastup(new NastupNaSpravi(n.Gimnasticar, n.Ekipa));
                    }
                    continue;
                }

                // Nadji nacin rotacije (u start listi na prvoj rotaciji).
                StartListaNaSpravi current = startListaPrethRot;
                while (current.Rotacija != 1)
                {
                    current = getStartListaPrethRot(current, aktivneSprave);
                }
                NacinRotacije nacinRotacije = current.NacinRotacije;

                if (nacinRotacije == NacinRotacije.RotirajSve || nacinRotacije == NacinRotacije.NeRotirajNista)
                {
                    foreach (NastupNaSpravi n in startListaPrethRot.Nastupi)
                    {
                        startLista.addNastup(new NastupNaSpravi(n.Gimnasticar, n.Ekipa));
                    }

                    if (nacinRotacije == NacinRotacije.RotirajSve)
                    {
                        NastupNaSpravi n2 = startLista.Nastupi[0];
                        startLista.removeNastup(n2);
                        startLista.addNastup(n2);
                    }
                }
                else if (nacinRotacije == NacinRotacije.RotirajEkipeRotirajGimnasticare ||
                         nacinRotacije == NacinRotacije.NeRotirajEkipeRotirajGimnasticare)
                {
                    // Najpre pronadji ekipe
                    List <List <NastupNaSpravi> > listaEkipa = new List <List <NastupNaSpravi> >();
                    int m = 0;
                    while (m < startListaPrethRot.Nastupi.Count)
                    {
                        NastupNaSpravi n       = startListaPrethRot.Nastupi[m];
                        byte           ekipaId = n.Ekipa;
                        if (ekipaId == 0)
                        {
                            List <NastupNaSpravi> pojedinac = new List <NastupNaSpravi>();
                            pojedinac.Add(new NastupNaSpravi(n.Gimnasticar, 0));
                            listaEkipa.Add(pojedinac);
                            ++m;
                            continue;
                        }

                        List <NastupNaSpravi> novaEkipa = new List <NastupNaSpravi>();
                        while (n.Ekipa == ekipaId)
                        {
                            novaEkipa.Add(new NastupNaSpravi(n.Gimnasticar, ekipaId));
                            if (++m < startListaPrethRot.Nastupi.Count)
                            {
                                n = startListaPrethRot.Nastupi[m];
                            }
                            else
                            {
                                break;
                            }
                        }
                        listaEkipa.Add(novaEkipa);
                    }

                    if (nacinRotacije == NacinRotacije.RotirajEkipeRotirajGimnasticare)
                    {
                        // Rotiraj ekipe
                        List <NastupNaSpravi> prvaEkipa = listaEkipa[0];
                        listaEkipa.RemoveAt(0);
                        listaEkipa.Add(prvaEkipa);
                    }

                    foreach (List <NastupNaSpravi> ekipa in listaEkipa)
                    {
                        // Rotiraj clanove ekipe
                        NastupNaSpravi nastup = ekipa[0];
                        ekipa.RemoveAt(0);
                        ekipa.Add(nastup);

                        foreach (NastupNaSpravi n in ekipa)
                        {
                            startLista.addNastup(new NastupNaSpravi(n.Gimnasticar, n.Ekipa));
                        }
                    }
                }
            }
        }