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); }
public void DodajBrod(IEnumerable <Polje> polja) { Brod brod = new Brod(polja); brodovi.Add(brod); brod.ProtivničkiBrodJePotopljen += OnProtivničkiBrodJePotopljen; }
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); }
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)); } }
public void DodajBrod(Brod b) { brodovi.Add(b); }
public abstract void PostaviBrodNaMrezu(Brod b);
public override void PostaviBrodNaMrezu(Brod b) { throw new NotImplementedException(); }
public void EliminirajBrod(Brod brod) { this.brodovi.Remove(brod); }
public void DodajBrod(Brod brod) { this.brodovi.Add(brod); }