コード例 #1
0
        public void ListaElemeketAtrak(LancoltLista <IGyepElem> Honnan, LancoltLista <IGyepElem> Hova)
        {
            IGyepElem aktGyepElem;

            while (!Honnan.UresLista())
            {
                aktGyepElem = Honnan.GetAktElem(1);
                Hova.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                Honnan.Torles(aktGyepElem);
            }
        }
コード例 #2
0
        public static LancoltLista <ZoldTerulet> FeluleteketLancoltListabaTesz(List <Megrendelo> mLista)
        {
            LancoltLista <ZoldTerulet> feluletek = new LancoltLista <ZoldTerulet>();

            foreach (Megrendelo m in mLista)
            {
                for (int i = 0; i < m.FeluletekSzama; i++)
                {
                    feluletek.BeszurCsokkenoSorrendben(m.Feluletek[i].Terulet, m.Feluletek[i]);
                }
            }

            return(feluletek);
        }
コード例 #3
0
        public static LancoltLista <IGyepElem> GyepRaktar(int gyepekSzama)
        {
            LancoltLista <IGyepElem> gyepRaktar = new LancoltLista <IGyepElem>();
            IGyepElem   gyepElem;
            int         random;
            ZoldTerulet legkisebbTerulet = feluletek.GetUtolsoElem();

            for (int i = 0; i < gyepekSzama; i++)
            {
                random = R.Next(0, 4);
                if (random == 0)
                {
                    gyepElem = new KertiGyep(R.Next(1, 10), R.Next(1, 10));
                }
                else if (random == 1)
                {
                    gyepElem = new MediterranGyep(R.Next(1, 10), R.Next(1, 10));
                }
                else if (random == 2)
                {
                    gyepElem = new ParkGyep(R.Next(1, 10), R.Next(1, 10));
                }
                else
                {
                    gyepElem = new SportGyep(R.Next(1, 10), R.Next(1, 10));
                }

                if (gyepElem.Terulet > legkisebbTerulet.Terulet)
                {
                    // A rendszer váltson ki kivételt, ha olyan méretű gyeptégla kerül be, amely meghaladja a legkisebb zöldterület méretét.
                    throw new GyepElemTulNagyKivetel(gyepElem, legkisebbTerulet);
                }
                gyepRaktar.BeszurCsokkenoSorrendben(gyepElem.Terulet, gyepElem);
            }

            return(gyepRaktar);
        }
コード例 #4
0
        // egy adott megrendelőt szolgál ki; ha az összes telkét sikerült lefedni, igazzal tér vissza
        public bool AktMegrendeloKiszolgalasa(Megrendelo M)
        {
            int         i = 0;
            int         j = 1;
            ZoldTerulet z;

            ElkeszultTeruletek = new LancoltLista <ZoldTerulet>();
            LancoltLista <IGyepElem> kivettGyepElemek = new LancoltLista <IGyepElem>();

            while (i < M.FeluletekSzama)
            {
                z = Teruletek.GetAktElem(j);
                // a korábban sorbarendezett Megrendelők ID-i alapján keresi ki a felületek láncolt listájából a lefedendő felületet
                if (z.MegrendeloID == M.ID && AktTeruletLefedo(z, kivettGyepElemek))
                {
                    Teruletek.Torles(z);
                    ElkeszultTeruletek.BeszurCsokkenoSorrendben(z.Terulet, z);
                    i++;
                }
                else
                {
                    if (z.MegrendeloID == M.ID)
                    {
                        return(false);
                    }
                    j++;
                }
            }
            if (i >= M.FeluletekSzama)
            {
                OnMegrendelesElkeszult(ElkeszultTeruletek);
                return(true);
            }
            ListaElemeketAtrak(kivettGyepElemek, Elemek);
            return(false);
        }
コード例 #5
0
        // egy telket fed le, mohó szeretne lenni
        public bool AktTeruletLefedo(ZoldTerulet Z, LancoltLista <IGyepElem> kivettGyepElemek)
        {
            int       t = 1;
            double    osszLefedettTerulet = 0;
            double    lefedettsegMerteke  = 0;
            int       futasokSzama        = 0;
            IGyepElem aktGyepElem;

            LancoltLista <IGyepElem> AktTeruletElemei = new LancoltLista <IGyepElem>();
            bool tulszamolt = false;

            while (osszLefedettTerulet < Z.Terulet && !Elemek.UresLista() && lefedettsegMerteke < Z.LefedettsegMin && !tulszamolt)
            {
                aktGyepElem = Elemek.GetAktElem(t);

                tulszamolt = (aktGyepElem == null);

                if (aktGyepElem != null && (osszLefedettTerulet + aktGyepElem.Terulet) < Z.Terulet)
                {
                    if (Z is MaganKert && (aktGyepElem is KertiGyep || aktGyepElem is SportGyep))
                    {
                        osszLefedettTerulet += aktGyepElem.Terulet;
                        AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                        Elemek.Torles(aktGyepElem);
                    }
                    else if (Z is KozPark && (aktGyepElem is ParkGyep || aktGyepElem is SportGyep))
                    {
                        osszLefedettTerulet += aktGyepElem.Terulet;
                        AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                        Elemek.Torles(aktGyepElem);
                    }
                    else if (Z is FutballStadion && aktGyepElem is SportGyep)
                    {
                        osszLefedettTerulet += aktGyepElem.Terulet;
                        AktTeruletElemei.BeszurCsokkenoSorrendben(aktGyepElem.Terulet, aktGyepElem);
                        Elemek.Torles(aktGyepElem);
                    }
                    else
                    {
                        t++;
                    }
                }
                else
                {
                    t++;
                }
                futasokSzama++;

                lefedettsegMerteke = 100 * osszLefedettTerulet / Z.Terulet;
            }

            if (lefedettsegMerteke >= Z.LefedettsegMin)
            {
                // ha sikerült lefedni a területet - megrendelő nem kerül kiszolgálásra, ha nem sikerül minden területét lefedni
                ListaElemeketAtrak(AktTeruletElemei, kivettGyepElemek);
                return(true);
            }
            // ha nem sikerült lefedni a területet
            ListaElemeketAtrak(AktTeruletElemei, Elemek);
            return(false);
        }