예제 #1
0
        public void Igraj()
        {
            rezultatGadjanja rez = rezultatGadjanja.nepoznato;

            while (true)
            {
                // za pocetak mi igramo prvi, dok ne smislimo bolji algoritam
                Polje p = ai.Gadjaj();
                rez = (rezultatGadjanja)protivnik.JaviRezultat(new Tuple <int, int>(p.Redak, p.Stupac));
                if (rez == rezultatGadjanja.PORAZ)
                {
                    this.tbDnevnik.Text = "Mi smo pobjedili!";
                    break;
                }
                this.Invoke((MethodInvoker) delegate { tbDnevnik.AppendText("(" + p.Redak + ", " + p.Stupac + "): " + rez.ToString() + "\n"); });
                Brod b = new Brod(ai.zap.trenutnaMeta);
                ai.ObradiPogodak(rez);
                protivnikFlotaGUI.DodajPolje(p, rez);
                if (rez == rezultatGadjanja.potopljen)
                {
                    protivnikFlotaGUI.PotopiBrod(b);
                }
                this.Invoke((MethodInvoker) delegate
                            { protivnikFlotaGUI.Invalidate(); });

                // sada igra protivnik
                Tuple <int, int> koord = protivnik.Gadjaj();
                p   = new Polje(koord.Item1, koord.Item2);
                rez = flota.ObradiPogodak(p.Redak, p.Stupac);
                if (rez == rezultatGadjanja.PORAZ)
                {
                    this.tbDnevnik.Text = "Protivnik je pobjedio!";
                    break;
                }
                this.Invoke((MethodInvoker) delegate { tbDnevnik.AppendText("@@ (" + p.Redak + ", " + p.Stupac + "): " + rez.ToString() + "\n"); });
                protivnik.ObradiPogodak((OOMPotapanje.mojRezultatGadjanja)rez);
                this.Invoke((MethodInvoker) delegate { mojaFlotaGUI.ZadajFlotu(flota); });


                // spavaj da ne bude prebrzo
                Thread.Sleep(500);
            }
        }
예제 #2
0
        public void ObradiPogodak(rezultatGadjanja rezultat)
        {
            this.zap.rezultatGadjanja = rezultat;
            switch (rezultat)
            {
            case rezultatGadjanja.pogodak:
                this.zap.trenutnaMeta.Add(this.zap.gadjanoPolje);
                break;

            case rezultatGadjanja.potopljen:
                this.zap.trenutnaMeta.Add(this.zap.gadjanoPolje);
                this.flota.Remove(this.zap.trenutnaMeta.Count);
                this.zap.trenutnaMeta.Clear();
                break;

            default:
                break;
            }
            this.Mreza.EliminirajPolje(this.zap.gadjanoPolje);
        }
예제 #3
0
        public void Flota_ObradiPogodakIspravnoJavljaPotapanje()
        {
            List <Polje> polja = new List <Polje> {
                new Polje(0, 1), new Polje(0, 2)
            };
            Brod  b = new Brod(polja);
            Flota f = new Flota();

            f.DodajBrod(b);
            List <Polje> polja2 = new List <Polje> {
                new Polje(2, 1), new Polje(2, 2)
            };
            Brod b2 = new Brod(polja2);

            f.DodajBrod(b2);
            rezultatGadjanja rez = f.ObradiPogodak(0, 2);

            rez = f.ObradiPogodak(0, 1);
            Assert.AreEqual(rezultatGadjanja.potopljen, rez);
            Assert.IsFalse(f.Brodovi.Contains(b));
        }
예제 #4
0
 public void DodajPolje(Polje p, rezultatGadjanja rez)
 {
     try { gadjanaPolja.Add(p, rez); }
     catch { gadjanaPolja[p] = rez; }
 }