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