public void KlasičniEliminatorPolja_PoljaKojaTrebaUklonitiOkoBrodaVraćaPoljaBrodaISvaOkolnaPoljaZaBrodUSrediniMreže() { int redaka = 10; int stupaca = 10; int duljinaBroda = 4; Polje početnoPolje = new Polje(3, 2); Orijentacija smjer = Orijentacija.Vertikalno; Mreža m = new Mreža(redaka, stupaca); var poljaBroda = m.DajPoljaZaBrod(smjer, početnoPolje, duljinaBroda); IEliminatorPolja e = new KlasičniEliminatorPolja(); var zaEliminirati = e.PoljaKojaTrebaUklonitiOkoBroda(poljaBroda, redaka, stupaca); Assert.AreEqual(18, zaEliminirati.Count()); foreach (Polje p in poljaBroda) { Assert.IsTrue(zaEliminirati.Contains(p)); } // provjerimo polja u uglovima broda (lijevo-gore, lijevo-dolje, desno-gore i desno-dolje) Assert.IsTrue(zaEliminirati.Contains(new Polje(2, 1))); Assert.IsTrue(zaEliminirati.Contains(new Polje(2, 3))); Assert.IsTrue(zaEliminirati.Contains(new Polje(7, 1))); Assert.IsTrue(zaEliminirati.Contains(new Polje(7, 3))); }
private IEnumerable <IEnumerable <Polje> > DajPoljaUNastavku(Orijentacija orijentacija) { switch (orijentacija) { case Orijentacija.Vertikalno: return(DajPoljaUNastavku(Smijer.Gore, Smijer.Dolje)); case Orijentacija.Horizontalno: return(DajPoljaUNastavku(Smijer.Lijevo, Smijer.Desno)); default: throw new NotImplementedException(); } }
public Polje UputiPucanj() { Orijentacija o = DajOrijentaciju(); var liste = DajPoljaUNastavku(o); if (liste.Count() == 1) { zadnjeGađano = liste.First().First(); } else { int indeks = slučajni.Next(liste.Count()); zadnjeGađano = liste.ElementAt(indeks).First(); } return(zadnjeGađano); }
public IEnumerable <Polje> DajPoljaZaBrod(Orijentacija smjer, Polje početno, int duljinaBroda) { int redak = početno.Redak; int stupac = početno.Stupac; int deltaRedak = smjer == Orijentacija.Horizontalno ? 0 : 1; int deltaStupac = smjer == Orijentacija.Vertikalno ? 0 : 1; List <Polje> poljaZaBrod = new List <Polje>(); for (int i = 0; i < duljinaBroda; ++i) { poljaZaBrod.Add(polja[redak, stupac]); EliminirajPolje(redak, stupac); redak += deltaRedak; stupac += deltaStupac; } return(poljaZaBrod); }
public Polje UputiPucanj() { Orijentacija o = DajOrijentaciju(); var liste = DajPoljaUNastavku(o); // sortiraj dobivene liste po duljinama te ih grupiraj liste.Sort((lista1, lista2) => lista2.Count() - lista1.Count()); var grupe = liste.GroupBy(lista => lista.Count()); // uzmi najdulju listu, a ako ih ima više onda slučajni odabir var najdulji = grupe.First(); int indeks = najdulji.Count() == 1 ? 0 : slučajni.Next(najdulji.Count()); zadnjeGađano = najdulji.ElementAt(indeks).First(); mreža.EliminirajPolje(zadnjeGađano); return(zadnjeGađano); }
public Polje UputiPucanj() { //odrediti orijentaciju (gore-dolje ili lijevo-desno) //naći slobodna polja u tim smjerovima // izabrati polje vratiti ga kao rezultat Orijentacija o = DajOrijentaciju(); var liste = DajPoljaUNastavku(o); if (liste.Count() == 1) { zadnjeGađano = liste.First().First(); } { int indeks = slučajni.Next(liste.Count()); zadnjeGađano = liste.ElementAt(indeks).First(); } return(zadnjeGađano); }
public void KlasičniEliminatorPolja_PoljaKojaTrebaUklonitiOkoBrodaVraćaPoljaBrodaIPoljaLijevoIIznadZaBrodUDonjemDesnomKutuMreže() { int redaka = 10; int stupaca = 10; int duljinaBroda = 4; Polje početnoPolje = new Polje(redaka - 1, stupaca - duljinaBroda); Orijentacija smjer = Orijentacija.Horizontalno; Mreža m = new Mreža(redaka, stupaca); var poljaBroda = m.DajPoljaZaBrod(smjer, početnoPolje, duljinaBroda); IEliminatorPolja e = new KlasičniEliminatorPolja(); var zaEliminirati = e.PoljaKojaTrebaUklonitiOkoBroda(poljaBroda, redaka, stupaca); Assert.AreEqual(10, zaEliminirati.Count()); foreach (Polje p in poljaBroda) { Assert.IsTrue(zaEliminirati.Contains(p)); } // provjerimo 3 krajnja polja uz brod (lijevo, lijevo-iznad, desno iznad) Assert.IsTrue(zaEliminirati.Contains(new Polje(redaka - 1, početnoPolje.Stupac - 1))); Assert.IsTrue(zaEliminirati.Contains(new Polje(redaka - 2, početnoPolje.Stupac - 1))); Assert.IsTrue(zaEliminirati.Contains(new Polje(redaka - 2, stupaca - 1))); }
public void KlasičniEliminatorPolja_PoljaKojaTrebaUklonitiOkoBrodaVraćaPoljaBrodaIPoljaIspodIDesnoZaBrodUGornjemLijevomKutuMreže() { int redaka = 10; int stupaca = 10; int duljinaBroda = 4; Polje početnoPolje = new Polje(0, 0); Orijentacija smjer = Orijentacija.Horizontalno; Mreža m = new Mreža(redaka, stupaca); var poljaBroda = m.DajPoljaZaBrod(smjer, početnoPolje, duljinaBroda); IEliminatorPolja e = new KlasičniEliminatorPolja(); var zaEliminirati = e.PoljaKojaTrebaUklonitiOkoBroda(poljaBroda, redaka, stupaca); Assert.AreEqual(10, zaEliminirati.Count()); foreach (Polje p in poljaBroda) { Assert.IsTrue(zaEliminirati.Contains(p)); } // provjerimo 3 krajnja polja uz brod (ispod-lijevo, ispod-desno, desno) Assert.IsTrue(zaEliminirati.Contains(new Polje(1, 0))); Assert.IsTrue(zaEliminirati.Contains(new Polje(1, 4))); Assert.IsTrue(zaEliminirati.Contains(new Polje(0, 4))); }
public PoljeSmjer(Orijentacija smjer, Polje polje) { Smjer = smjer; Polje = polje; }