public void ReturnMove(Position origin, Position destiny, Piece pieceCapture) { Piece piece = chessboard.RemovePiece(destiny); piece.DeleteMovesQuantity(); if (pieceCapture != null) { chessboard.InsertPiece(pieceCapture, destiny); piecesCaptured.Remove(pieceCapture); } chessboard.InsertPiece(piece, origin); //Special play small Castle if (piece is King && destiny.column == origin.column + 2) { Position originRook = new Position(origin.line, origin.column + 3); Position destinyRook = new Position(origin.line, origin.column + 1); Piece rook = chessboard.RemovePiece(destinyRook); rook.DeleteMovesQuantity(); chessboard.InsertPiece(rook, originRook); } //Special play big Castle if (piece is King && destiny.column == origin.column - 2) { Position originRook = new Position(origin.line, origin.column - 4); Position destinyRook = new Position(origin.line, origin.column - 1); Piece rook = chessboard.RemovePiece(destinyRook); rook.DeleteMovesQuantity(); chessboard.InsertPiece(rook, originRook); } //Special play En Passant if (piece is Pawn) { if (origin.column != destiny.column && pieceCapture == vulnerableEnPassant) { Piece pawn = chessboard.RemovePiece(destiny); Position piecePosition; if (piece.color == Color.White) { piecePosition = new Position(3, destiny.column); } else { piecePosition = new Position(4, destiny.column); } chessboard.InsertPiece(pawn, piecePosition); } } }