Ejemplo n.º 1
0
        private Flota SložiBrodove(Mreža mreža,
                                   IEnumerable <int> duljineBrodova)
        {
            Flota flota = new Flota();
            TražilicaNizovaPolja tražilica = new TražilicaNizovaPolja(mreža);
            istačPolja           istač     = new  istačPolja(mreža);

            foreach (int duljina in duljineBrodova)
            {
                var polja = mreža.RaspoloživaPolja;
                // raspoloživih polja manje nego duljina – ništa od flote!
                if (polja.Count() < duljina)
                {
                    return(null);
                }
                var kandidati = tražilica.DajNizovePolja(duljina);
                // nema više nizova polja – ništa od flote!
                if (kandidati.Count() == 0)
                {
                    return(null);
                }
                var izbor = Izaberi(kandidati);
                flota.DodajBrod(izbor);
                istač.Ukloni(izbor);
            }
            return(flota);
        }
        virtual public Flota SloziFlotu(int redaka, int stupaca, int[] duljineBrodova)
        {
            // sve cemo pokusati par puta za slucaj da naletimo na gresku ako brodovi ne stanu na mrezu
            int count = 5;

            while (count > 0)
            {
                try {
                    Flota flota = new Flota();
                    this.Mreza = new Mreza(redaka, stupaca);

                    // Gradimo brodove pocevsi od najduljeg -> da se ne upucamo u nogu i
                    // zauzmemo previse slobodnih polja s malim brodovima pa veliki ne stanu nigdje
                    Array.Sort(duljineBrodova);
                    duljineBrodova.Reverse();
                    foreach (int duljina in duljineBrodova)
                    {
                        Brod b = SagradiBrod(duljina);
                        flota.DodajBrod(b);
                        PostaviBrodNaMrezu(b);
                    }
                    return(flota);
                }
                catch (Exception) {
                    count--;
                }
            }
            return(null);
        }
Ejemplo n.º 3
0
        private Flota SložiBrodove(int[] duljineBrodova, Mreža mreža)
        {
            Flota flota = new Flota();

            // za svaku duljinu broda:
            for (int i = 0; i < duljineBrodova.Length; ++i)
            {
                var  slobodnaPolja = mreža.DajSlobodnaPolja();
                var  pp            = izbornikPolja.IzaberiPočetnoPolje(slobodnaPolja, duljineBrodova[i]);
                var  pbr           = mreža.DajPoljaZaBrod(pp.Smjer, pp.Polje, duljineBrodova[i]);
                Brod b             = new Brod(pbr);
                flota.DodajBrod(b);
                EliminirajPoljaOkoBroda(mreža, pbr);
            }
            return(flota);
        }
Ejemplo n.º 4
0
        public Flota SložiFlotu(int redaka, int stupaca, int[] duljineBrodova)
        {
            Flota f = new Flota();
            // napravi mrežu
            Mreža m = new Mreža(redaka, stupaca);

            // za svaku duljinu broda:
            for (int i = 0; i < duljineBrodova.Length; ++i)
            {
                var  slobodnaPolja = m.DajSlobodnaPolja();
                var  pp            = IzaberiPočetnoPolje(slobodnaPolja, duljineBrodova[i]);
                var  pbr           = DajPoljaZaBrod(pp.Item1, pp.Item2, duljineBrodova[i]);
                Brod b             = new Brod(pbr);
                f.DodajBrod(b);
                EliminirajPoljaOkoBroda(m, pbr);
            }
            return(f);
        }
Ejemplo n.º 5
0
        private Flota SložiFlotu(Mreža mreža, IEnumerable <int> duljineBrodova)
        {
            Flota           flota      = new Flota();
            TerminatorPolja terminator = new TerminatorPolja(mreža);

            foreach (int i in duljineBrodova)
            {
                var nizovi = mreža.DajNizoveSlobodnihPolja(i);
                if (nizovi.Count() == 0)
                {
                    return(null);
                }
                int indeks = slučajni.Next(nizovi.Count());
                var niz    = nizovi.ElementAt(indeks);
                flota.DodajBrod(niz);
                terminator.UkloniPolja(niz);
            }
            return(flota);
        }