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);
        }
Пример #2
0
        public void DodajBrod(IEnumerable <Polje> polja)
        {
            Brod brod = new Brod(polja);

            brodovi.Add(brod);
            brod.ProtivničkiBrodJePotopljen += OnProtivničkiBrodJePotopljen;
        }
Пример #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);
        }
Пример #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);
        }
        public override void PostaviBrodNaMrezu(Brod b)
        {
            // ova metoda je javna samo radi Unit testinga. Sve osim SloziFlotu bi trebalo biti privatno
            // ostale klase nemaju razloga izravno se mijesati u posao brodograditelja


            // Pravilo kaze da se brodovi ne smiju dirati.
            // To znaci da iz mreze moramo ukloniti sva polja broda + sva okolna polja.
            // Izabiremo jednostavnost ispred brzine --> ista polja uklanjamo vise puta
            // Dodatna pogodnost je sto se Mreza ne buni ako uklanjamo nepostojece polje --> slobodno uklanjamo preko granica mreze
            foreach (Polje p in b.Polja)
            {
                this.Mreza.EliminirajPolje(p);
                this.Mreza.EliminirajPolje(new Polje(p.Redak, p.Stupac + 1));
                this.Mreza.EliminirajPolje(new Polje(p.Redak, p.Stupac - 1));
                this.Mreza.EliminirajPolje(new Polje(p.Redak + 1, p.Stupac));
                this.Mreza.EliminirajPolje(new Polje(p.Redak - 1, p.Stupac));
            }
        }
Пример #6
0
 public void DodajBrod(Brod b)
 {
     brodovi.Add(b);
 }
 public abstract void PostaviBrodNaMrezu(Brod b);
 public override void PostaviBrodNaMrezu(Brod b)
 {
     throw new NotImplementedException();
 }
Пример #9
0
 public void EliminirajBrod(Brod brod)
 {
     this.brodovi.Remove(brod);
 }
Пример #10
0
 public void DodajBrod(Brod brod)
 {
     this.brodovi.Add(brod);
 }