Пример #1
0
        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)));
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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)));
        }
Пример #8
0
        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)));
        }
Пример #9
0
 public PoljeSmjer(Orijentacija smjer, Polje polje)
 {
     Smjer = smjer;
     Polje = polje;
 }