public override bool LegalanPotez(Pozicija novaPozicija, Ploca ploca) { base.LegalanPotez(novaPozicija, ploca); Top top = new Top(this.Boja, this.Id); top.Pozicija.PostaviHorizontalno(this.Pozicija.Horizontalno).PostaviVertikalno(this.Pozicija.Vertikalno); Lovac lovac = new Lovac(this.Boja, this.Id); lovac.Pozicija.PostaviHorizontalno(this.Pozicija.Horizontalno).PostaviVertikalno(this.Pozicija.Vertikalno); bool legalan = true; try { legalan = top.LegalanPotez(novaPozicija, ploca); } catch (IllegalMoveException ime) { if (ime.NemogucPotez) { legalan = lovac.LegalanPotez(novaPozicija, ploca); } else { throw ime; } } return(true); }
public override bool LegalanPotez(Pozicija novaPozicija, Ploca ploca) { base.LegalanPotez(novaPozicija, ploca); return(true); }
public Figura OdigrajPotez(Figura figura, Pozicija pozicija, Ploca ploca) { if (!DobraFigura(figura)) { throw new Exception("Kriva figura."); } return(figura.PostaviPoziciju(pozicija, ploca)); }
private void PozicijaPromijenjena(object sender, EventArgs e) { PozicijaEventArgs pea = e as PozicijaEventArgs; Ploca ploca = pea.Ploca; Figura figura = sender as Figura; Pozicija pozicija = pea.Pozicija; ploca.AzurirajStanje(figura, pozicija); }
public override bool LegalanPotez(Pozicija novaPozicija, Ploca ploca) { base.LegalanPotez(novaPozicija, ploca); if (Math.Abs(this.Pozicija.Horizontalno - novaPozicija.Horizontalno) > 1 || Math.Abs(this.Pozicija.Vertikalno - novaPozicija.Vertikalno) > 1) { throw new IllegalMoveException("Illegal move", true); } return(true); }
public virtual bool LegalanPotez(Pozicija pozicija, Ploca ploca) { if (this.Pozicija.Horizontalno == pozicija.Horizontalno && this.Pozicija.Vertikalno == pozicija.Vertikalno) { throw new NoMoveException("No move"); } if (pozicija.Horizontalno < 0 || pozicija.Horizontalno > 7 || pozicija.Vertikalno < 0 || pozicija.Vertikalno > 7) { throw new Exception("Illegal move"); } return(true); }
public Figura PostaviPoziciju(Pozicija pozicija, Ploca ploca) { OnPozicijaSeMijenja(this, new PozicijaEventArgs { Pozicija = pozicija, Ploca = ploca }); OnPozicijaPromijenjena(this, new PozicijaEventArgs { Pozicija = pozicija, Ploca = ploca }); this.Pozicija = pozicija; return(this); }
public Figura PostaviPoziciju(Pozicija pozicija) { if (Ploca.Potez != 0) { throw new Exception("Krivi poziv metode"); } if (this.Pozicija == null) { this.Pozicija = new Pozicija(); } this.Pozicija = pozicija; return(this); }
public Pozicija PostaviVertikalno(int vrijednost) { if (this == null) { Pozicija pozicija = new Pozicija(); pozicija.Vertikalno = vrijednost; return(pozicija); } else { this.Vertikalno = vrijednost; return(this); } }
internal void AzurirajStanje(Figura figura, Pozicija novaPozicija) { var staraPozicija = figura.Pozicija; pozicijaFigura[staraPozicija] = null; stanje[figura.Pozicija.Horizontalno, figura.Pozicija.Vertikalno] = null; string kljuc = PoljeZaKolonu(figura.Pozicija.Vertikalno) + (figura.Pozicija.Horizontalno + 1); var fig = dict[kljuc]; dict[kljuc] = null; figura.Pozicija = novaPozicija; pozicijaFigura[novaPozicija] = figura; kljuc = PoljeZaKolonu(novaPozicija.Vertikalno) + novaPozicija.Horizontalno; dict[kljuc] = figura; stanje[novaPozicija.Horizontalno, novaPozicija.Vertikalno] = figura; }
public Pozicija PozicijaZaPolje(string polje) { var slovo = polje[0].ToString().ToUpper(); var kolona = polje[1].ToString(); Pozicija pozicija = new Pozicija(); switch (slovo) { case "A": pozicija.PostaviVertikalno(0).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "B": pozicija.PostaviVertikalno(1).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "C": pozicija.PostaviVertikalno(2).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "D": pozicija.PostaviVertikalno(3).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "E": pozicija.PostaviVertikalno(4).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "F": pozicija.PostaviVertikalno(5).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "G": pozicija.PostaviVertikalno(6).PostaviHorizontalno(int.Parse(kolona) - 1); break; case "H": pozicija.PostaviVertikalno(7).PostaviHorizontalno(int.Parse(kolona) - 1); break; default: break; } return(pozicija); }
public override bool LegalanPotez(Pozicija novaPozicija, Ploca ploca) { base.LegalanPotez(novaPozicija, ploca); int horizontalno = this.Pozicija.Horizontalno > novaPozicija.Horizontalno ? this.Pozicija.Horizontalno - novaPozicija.Horizontalno : novaPozicija.Horizontalno - this.Pozicija.Horizontalno; int vertikalno = this.Pozicija.Vertikalno > novaPozicija.Vertikalno ? this.Pozicija.Vertikalno - novaPozicija.Vertikalno : novaPozicija.Vertikalno - this.Pozicija.Vertikalno; if (!((horizontalno == 2 && vertikalno == 1) || (horizontalno == 1 && vertikalno == 2))) { throw new IllegalMoveException("Illegal move"); } var figura = ploca.VratiFiguru(novaPozicija); if (figura != null && figura.Boja == this.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } return(true); }
public override string ToString(Pozicija pozicija) { //return this.Boja.ToString() + " Kralj " + pozicija.Horizontalno + "," + pozicija.Vertikalno; return("K" + Ploca.SkracenaBoja(this.Boja) + "-" + this.Id); }
public abstract string ToString(Pozicija pozicija);
public override bool LegalanPotez(Pozicija novaPozicija, Ploca ploca) { base.LegalanPotez(novaPozicija, ploca); Figura figura = null; if (this.Pozicija.Horizontalno != novaPozicija.Horizontalno && this.Pozicija.Vertikalno != novaPozicija.Vertikalno) { throw new IllegalMoveException("Illegal move", true); } if (this.Pozicija.Vertikalno < novaPozicija.Vertikalno) { for (int i = this.Pozicija.Vertikalno + 1; i <= novaPozicija.Vertikalno; i++) { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(novaPozicija.Horizontalno).PostaviVertikalno(i)); if (figura != null && figura.Boja == this.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } else if (figura != null && figura.Pozicija.Vertikalno < novaPozicija.Vertikalno) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } if (this.Pozicija.Vertikalno > novaPozicija.Vertikalno) { for (int i = this.Pozicija.Vertikalno - 1; i >= novaPozicija.Vertikalno; i--) { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(novaPozicija.Horizontalno).PostaviVertikalno(i)); if (figura != null && figura.Boja == this.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } else if (figura != null && figura.Pozicija.Horizontalno < novaPozicija.Horizontalno) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } if (this.Pozicija.Horizontalno < novaPozicija.Horizontalno) { for (int i = this.Pozicija.Horizontalno + 1; i <= novaPozicija.Horizontalno; i++) { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(i).PostaviVertikalno(novaPozicija.Vertikalno)); if (figura != null && figura.Boja == this.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } else if (figura != null && figura.Pozicija.Horizontalno < novaPozicija.Horizontalno) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } if (this.Pozicija.Horizontalno > novaPozicija.Horizontalno) { for (int i = this.Pozicija.Horizontalno - 1; i >= novaPozicija.Horizontalno; i--) { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(i).PostaviVertikalno(novaPozicija.Vertikalno)); if (figura != null && figura.Boja == this.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } else if (figura != null && figura.Pozicija.Horizontalno < novaPozicija.Horizontalno) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } var kralj = Kralj.VratiKraljaSaPloce(this, ploca); return(true); }
public override bool LegalanPotez(Pozicija novaPozicija, Ploca ploca) { base.LegalanPotez(novaPozicija, ploca); int horizontalno = Math.Abs(this.Pozicija.Horizontalno - novaPozicija.Horizontalno); int vertikalno = Math.Abs(this.Pozicija.Vertikalno - novaPozicija.Vertikalno); if (horizontalno != vertikalno) { throw new IllegalMoveException("Illegal move", true); } Figura figura = null; if (this.Pozicija.Horizontalno > novaPozicija.Horizontalno) { int ver = this.Pozicija.Vertikalno; for (int i = this.Pozicija.Horizontalno; i > novaPozicija.Horizontalno; i--) { int hor = i - 1; if (this.Pozicija.Vertikalno > novaPozicija.Vertikalno) { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(hor).PostaviVertikalno(--ver)); if (figura != null) { if (hor == novaPozicija.Horizontalno && ver == novaPozicija.Vertikalno) { if (this.Boja == figura.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } else { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } else { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(hor).PostaviVertikalno(++ver)); if (figura != null) { if (hor == novaPozicija.Horizontalno && ver == novaPozicija.Vertikalno) { if (this.Boja == figura.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } else { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } } } else { int ver = this.Pozicija.Vertikalno; for (int i = this.Pozicija.Horizontalno; i < novaPozicija.Horizontalno; i++) { int hor = i + 1; if (this.Pozicija.Vertikalno > novaPozicija.Vertikalno) { //ver = this.Pozicija.Vertikalno - i; figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(hor).PostaviVertikalno(--ver)); if (figura != null) { if (hor == novaPozicija.Horizontalno && ver == novaPozicija.Vertikalno) { if (this.Boja == figura.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } else { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } else { figura = ploca.VratiFiguru(new Pozicija().PostaviHorizontalno(hor).PostaviVertikalno(++ver)); if (figura != null) { if (hor == novaPozicija.Horizontalno && ver == novaPozicija.Vertikalno) { if (this.Boja == figura.Boja) { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } else { throw new IllegalMoveException("Figura " + figura.GetType().Name + " na putu."); } } } } } return(true); }
public Figura VratiFiguru(Pozicija pozicija) { return(stanje[pozicija.Horizontalno, pozicija.Vertikalno]); }