/// <summary> /// Specifically For en-passant /// (need to remove the pawn which is currently in the opposite direction) /// </summary> /// <param name="destination"></param> public override void HandleCapture(Tuple <int, int> destination) { if ((destination.Equals((MoveStrategy as PawnAdapterStrategy).DiagonalLeft) || destination.Equals((MoveStrategy as PawnAdapterStrategy).DiagonalRight)) && ChessBoard.GetPiece(destination.Item1, destination.Item2) == null) { ChessBoard.Remove(destination.Item1 + (Direction * -1), destination.Item2); } }
public virtual bool Move(int row, int column) { var destination = new Tuple <int, int>(row, column); var origin = new Tuple <int, int>(Row, Column); var moveSet = MoveStrategy.GetMoveSet(Row, Column, OpposingColor); var canMove = !destination.Equals(origin) && moveSet.Any(t => t.Equals(destination)) && !ChessBoard.IsCheckedState(this, destination); if (canMove) { BeforeMove(destination); ChessBoard.Remove(Row, Column); HandleCapture(destination); MoveCount++; AfterMove(); ChessBoard.AddReplace(this, destination.Item1, destination.Item2); } return(canMove); }