public bool IsEnPassant(Board board, int startX, int startY, int endX, int endY, bool white) { //da li je poslednji potez bio pionom koji je presao 2 polja Type pawn = new Pawn(true).GetType(); if (board.LastMove != null && board.LastMove.End.Piece.GetType() == pawn && Math.Abs(board.LastMove.End.X - board.LastMove.Start.X) == 2) { int x = board.LastMove.End.X; int y; for (int i = -1; i <= 1; i = i + 2) { y = board.LastMove.End.Y + i; if (BoardExplorer.WithinBoundaries(x, y)) { //da li je pocetno polje mog piona u istoj vrsti i susednoj koloni if (x == startX && y == startY) { int coef = white ? 1 : -1; //da li je krajnje polje mog piona u istoj koloni i susednoj vrsti if (endY == board.LastMove.End.Y && endX == (x + coef)) { //jedi protivnickog piona return(true); } } } } } return(false); }
public bool CanMoveTwice(Board board, int startX, int startY, int endX, int endY, bool white) { int coef = white ? 2 : -2; int rowX = white ? 1 : 6; if ((startY - endY) == 0 && startX == rowX && (endX - startX) == coef) { List <Field> path = white ? BoardExplorer. ExploreNorth(board, board.Fields[startX][startY], board.Fields[endX][endY]) : BoardExplorer.ExploreSouth(board, board.Fields[startX][startY], board.Fields[endX][endY]); if (path[path.Count - 1].Piece == null) { return(true); } } return(false); }
public override bool ValidMove(Move move, Board board) { int startX = move.Start.X; int startY = move.Start.Y; int endX = move.End.X; int endY = move.End.Y; int dx = Math.Abs(endX - startX); int dy = Math.Abs(endY - startY); if (move.GetType().Equals(new ShortCastling(null, null).GetType()) && Validator.ShortCastlingPossible(board, move)) { return(true); } if (move.GetType().Equals(new LongCastling(null, null).GetType()) && Validator.LongCastlingPossible(board, move)) { return(true); } if (dx > 1) { return(false); } else if (dy > 1) { return(false); } else if (dx == dy && dx == 0) { return(false); } else { List <Field> attackers = BoardExplorer.FieldAttackers(board, board.Fields[endX][endY], !board.Fields[startX][startY].Piece.White); return(attackers.Count == 0); } }
public override bool ValidMove(Move move, Board board) { int startX = move.Start.X; int startY = move.Start.Y; int endX = move.End.X; int endY = move.End.Y; List <Field> inTheWay; if (startX != endX && startY != endY) { return(false); } //trazenje vertikalno else if (startY == endY) { //grana iznad if (endX > startX) { inTheWay = BoardExplorer.ExploreNorth(board, move.Start, move.End); } //grana ispod else { inTheWay = BoardExplorer.ExploreSouth(board, move.Start, move.End); } } //trazenje horizontalno else { if (endY > startY) { inTheWay = BoardExplorer.ExploreEast(board, move.Start, move.End); } else { inTheWay = BoardExplorer.ExploreWest(board, move.Start, move.End); } } return(BoardExplorer.IsPathClear(inTheWay[inTheWay.Count - 1], move.End)); }
public override bool ValidMove(Move move, Board board) { int startX = move.Start.X; int startY = move.Start.Y; int endX = move.End.X; int endY = move.End.Y; //da li je ciljno polje dijagonalno u odnosu na startno //pomeraj po X osi mora biti jednak pomeraju po Y osi if (Math.Abs(endX - startX) != Math.Abs(endY - startY)) { return(false); } else { List <Field> inTheWay; if (endX > startX && endY > startY) { inTheWay = BoardExplorer.ExploreNorthEast(board, move.Start, move.End); } else if (endX > startX && endY < startY) { inTheWay = BoardExplorer.ExploreSouthEast(board, move.Start, move.End); } else if (endX < startX && endY < startY) { inTheWay = BoardExplorer.ExploreSouthWest(board, move.Start, move.End); } else { inTheWay = BoardExplorer.ExploreNorthWest(board, move.Start, move.End); } return(BoardExplorer.IsPathClear(inTheWay[inTheWay.Count - 1], move.End)); } }