public virtual Polje PoljeZaSmjer(smjer odabrani, Polje zadnjiPogodak) { switch (odabrani) { case smjer.gore: return(new Polje(zadnjiPogodak.Redak - 1, zadnjiPogodak.Stupac)); case smjer.dolje: return(new Polje(zadnjiPogodak.Redak + 1, zadnjiPogodak.Stupac)); case smjer.lijevo: return(new Polje(zadnjiPogodak.Redak, zadnjiPogodak.Stupac - 1)); case smjer.desno: return(new Polje(zadnjiPogodak.Redak, zadnjiPogodak.Stupac + 1)); default: return(null); //PROBLEM } }
public smjer SuprotniSmjer(smjer trenutni) { switch (trenutni) { case smjer.gore: return(smjer.dolje); case smjer.dolje: return(smjer.gore); case smjer.lijevo: return(smjer.desno); case smjer.desno: return(smjer.lijevo); default: return(smjer.nepoznato); } }
public override Polje SlijedecePolje() { // Stanja koja vode u ovaj objekt su: // A) prvi pogodak broda (smjer jos nije odabran) // B) promasaj nakon sto smo ranije pogodili - treba mijenjati smjer Polje prviPogodak = zap.trenutnaMeta.First(); Polje zadnjiPogodak = zap.trenutnaMeta.Last(); smjer noviSmjer = smjer.nepoznato; if (zap.rezultatGadjanja == rezultatGadjanja.pogodak) { // A - izaberi nasumice smjer i gadjaj if (zap.moguciSmjerovi.Count == 0) { zap.moguciSmjerovi = IzracunajMoguceSmjerove(prviPogodak); } noviSmjer = zap.moguciSmjerovi.ElementAt(zap.rand.Next(zap.moguciSmjerovi.Count)); zap.moguciSmjerovi.Remove(noviSmjer); return(PoljeZaSmjer(noviSmjer, zadnjiPogodak)); } else { // B - ako postoji, izaberi suprotni smjer i gadjaj od prvog! pogotka // brodovi se ne dodiruju -> nije moguce slucajno pogoditi drugi brod i izazvati zabunu smjera zap.pronadjeniSmjer = SuprotniSmjer(zap.pronadjeniSmjer); if (zap.pronadjeniSmjer == smjer.nepoznato) { noviSmjer = zap.moguciSmjerovi.ElementAt(zap.rand.Next(zap.moguciSmjerovi.Count)); zap.moguciSmjerovi.Remove(noviSmjer); return(PoljeZaSmjer(noviSmjer, zadnjiPogodak)); } else { return(PoljeZaSmjer(zap.pronadjeniSmjer, prviPogodak)); } } }