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 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 Figura VratiFiguruIstogTipaBoje(Figura figura) { return(hashFigura.Where(x => x.Boja == figura.Boja && x.GetType() == figura.GetType()).FirstOrDefault()); }