public Piece Move(Position origin, Position destination) { Piece p = Board.RemovePiece(origin); p.AddMoveCount(); Piece pieceCaptured = Board.RemovePiece(destination); Board.InsertPiece(p, destination); if (pieceCaptured != null) { Captured.Add(pieceCaptured); } // #SpecialMove Castling short if (p is King && destination.Column == origin.Column + 2) { Position RookOrigin = new Position(origin.Line, origin.Column + 3); Position RookDestination = new Position(origin.Line, origin.Column + 1); Piece R = Board.RemovePiece(RookOrigin); R.AddMoveCount(); Board.InsertPiece(R, RookDestination); } // #SpecialMove Castling long if (p is King && destination.Column == origin.Column - 2) { Position RookOrigin = new Position(origin.Line, origin.Column - 4); Position RookDestination = new Position(origin.Line, origin.Column - 1); Piece R = Board.RemovePiece(RookOrigin); R.AddMoveCount(); Board.InsertPiece(R, RookDestination); } // #SpecialMove En Passant if (p is Pawn) { if (origin.Column != destination.Column && pieceCaptured == null) { Position posP; if (p.Color == Color.White) { posP = new Position(destination.Line + 1, destination.Column); } else { posP = new Position(destination.Line - 1, destination.Column); } pieceCaptured = Board.RemovePiece(posP); Captured.Add(pieceCaptured); } } return(pieceCaptured); }