local Players = game:GetService("Players") local player = Players.LocalPlayer local UserInputService = game:GetService("UserInputService") -- Create ScreenGui local gui = Instance.new("ScreenGui") gui.Name = "ScientificCalculator" gui.ResetOnSpawn = false gui.Parent = player.PlayerGui -- Create Calculator Frame local calculatorFrame = Instance.new("Frame") calculatorFrame.Size = UDim2.new(0.5, 0, 0.7, 0) calculatorFrame.Position = UDim2.new(0.25, 0, 0.15, 0) calculatorFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) calculatorFrame.BorderSizePixel = 0 calculatorFrame.Parent = gui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 10) corner.Parent = calculatorFrame local gradient = Instance.new("UIGradient") gradient.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(70, 70, 70)), ColorSequenceKeypoint.new(1, Color3.fromRGB(30, 30, 30)) } gradient.Parent = calculatorFrame -- Title Bar local titleBar = Instance.new("Frame") titleBar.Size = UDim2.new(1, 0, 0, 30) titleBar.Position = UDim2.new(0, 0, 0, 0) titleBar.BackgroundColor3 = Color3.fromRGB(20, 20, 20) titleBar.BorderSizePixel = 0 titleBar.Parent = calculatorFrame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 10) titleCorner.Parent = titleBar local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(0.7, 0, 1, 0) titleLabel.Position = UDim2.new(0, 10, 0, 0) titleLabel.Text = "Scientific Calculator" titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.BackgroundTransparency = 1 titleLabel.TextScaled = true titleLabel.Parent = titleBar -- Minimize Button (blue -) local minimizeButton = Instance.new("TextButton") minimizeButton.Size = UDim2.new(0, 30, 0, 30) minimizeButton.Position = UDim2.new(1, -70, 0, 0) minimizeButton.Text = "-" minimizeButton.BackgroundColor3 = Color3.fromRGB(0, 0, 255) minimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255) minimizeButton.BorderSizePixel = 0 minimizeButton.Parent = titleBar local minCorner = Instance.new("UICorner") minCorner.CornerRadius = UDim.new(0, 5) minCorner.Parent = minimizeButton -- Close Button (red X) local closeButton = Instance.new("TextButton") closeButton.Size = UDim2.new(0, 30, 0, 30) closeButton.Position = UDim2.new(1, -35, 0, 0) closeButton.Text = "X" closeButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) closeButton.TextColor3 = Color3.fromRGB(255, 255, 255) closeButton.BorderSizePixel = 0 closeButton.Parent = titleBar local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 5) closeCorner.Parent = closeButton -- Content Frame local contentFrame = Instance.new("Frame") contentFrame.Size = UDim2.new(1, 0, 1, -30) contentFrame.Position = UDim2.new(0, 0, 0, 30) contentFrame.BackgroundTransparency = 1 contentFrame.Parent = calculatorFrame -- Display for calculator local display = Instance.new("TextBox") display.Size = UDim2.new(0.95, 0, 0.1, 0) display.Position = UDim2.new(0.025, 0, 0.05, 0) display.Text = "0" display.TextScaled = true display.BackgroundColor3 = Color3.fromRGB(40, 40, 40) display.TextColor3 = Color3.fromRGB(255, 255, 255) display.ClearTextOnFocus = false display.Parent = contentFrame local displayCorner = Instance.new("UICorner") displayCorner.CornerRadius = UDim.new(0, 5) displayCorner.Parent = display local displayStroke = Instance.new("UIStroke") displayStroke.Color = Color3.fromRGB(100, 100, 100) displayStroke.Transparency = 0.5 displayStroke.Parent = display -- Create a UIGridLayout for calculator buttons local grid = Instance.new("UIGridLayout") grid.CellSize = UDim2.new(0, 50, 0, 50) grid.CellPadding = UDim2.new(0, 5, 0, 5) grid.SortOrder = Enum.SortOrder.LayoutOrder grid.Parent = contentFrame grid.StartCorner = Enum.StartCorner.TopLeft grid.HorizontalAlignment = Enum.HorizontalAlignment.Center grid.VerticalAlignment = Enum.VerticalAlignment.Center -- Expanded calculator buttons for more scientific functions (6 columns) local calcButtons = { {"AC", "CE", "(", ")", "^", "%"}, {"7", "8", "9", "/", "sqrt", "abs"}, {"4", "5", "6", "*", "sin", "asin"}, {"1", "2", "3", "-", "cos", "acos"}, {"0", ".", "=", "+", "tan", "atan"}, {"π", "e", "log", "log10", "exp", "deg"}, {"rad", "ans", "←"} } -- Calculator state local currentInput = "" local lastResult = "0" -- Function to evaluate the expression local function evaluate() local success, result = pcall(function() local expression = currentInput -- Replace math functions with Lua equivalents expression = expression:gsub("sin", "math.sin") expression = expression:gsub("cos", "math.cos") expression = expression:gsub("tan", "math.tan") expression = expression:gsub("asin", "math.asin") expression = expression:gsub("acos", "math.acos") expression = expression:gsub("atan", "math.atan") expression = expression:gsub("sqrt", "math.sqrt") expression = expression:gsub("abs", "math.abs") expression = expression:gsub("log", "math.log") expression = expression:gsub("log10", "math.log10") expression = expression:gsub("exp", "math.exp") expression = expression:gsub("deg", "math.deg") expression = expression:gsub("rad", "math.rad") expression = expression:gsub("π", tostring(math.pi)) expression = expression:gsub("e", tostring(math.exp(1))) return loadstring("return " .. expression)() end) if success then return tostring(result) else return "Error" end end -- Create buttons for the calculator for row, rowButtons in ipairs(calcButtons) do for col, btnText in ipairs(rowButtons) do local button = Instance.new("TextButton") button.Text = btnText button.TextColor3 = Color3.fromRGB(255, 255, 255) button.TextScaled = true button.BorderSizePixel = 0 button.LayoutOrder = (row - 1) * 6 + col -- Adjusted for 6 columns button.Parent = contentFrame -- Set button colors based on type for cooler look local buttonColor = Color3.fromRGB(50, 50, 50) -- Default if tonumber(btnText) then buttonColor = Color3.fromRGB(60, 60, 60) -- Numbers elseif btnText:match("[+*-/%=]") then buttonColor = Color3.fromRGB(255, 140, 0) -- Operators elseif btnText:match("[a-z]") or btnText == "sqrt" or btnText == "abs" then buttonColor = Color3.fromRGB(0, 120, 200) -- Functions elseif btnText == "AC" or btnText == "CE" or btnText == "←" then buttonColor = Color3.fromRGB(150, 0, 0) -- Clear buttons end button.BackgroundColor3 = buttonColor local btnCorner = Instance.new("UICorner") btnCorner.CornerRadius = UDim.new(0, 5) btnCorner.Parent = button local btnStroke = Instance.new("UIStroke") btnStroke.Color = Color3.fromRGB(100, 100, 100) btnStroke.Transparency = 0.7 btnStroke.Parent = button button.MouseButton1Click:Connect(function() if btnText == "AC" or btnText == "CE" then currentInput = "" display.Text = "0" elseif btnText == "=" then local result = evaluate() display.Text = result currentInput = result lastResult = result elseif btnText == "←" then currentInput = currentInput:sub(1, -2) display.Text = currentInput == "" and "0" or currentInput elseif btnText == "ans" then currentInput = currentInput .. lastResult display.Text = currentInput else currentInput = currentInput .. btnText display.Text = currentInput end end) end end -- Draggable functionality local dragging = false local dragStart = nil local startPos = nil titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = calculatorFrame.Position local conn conn = input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false conn:Disconnect() end end) end end) UserInputService.InputChanged:Connect(function(input) if (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) and dragging then local delta = input.Position - dragStart calculatorFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) -- Minimize functionality local originalSize = calculatorFrame.Size minimizeButton.MouseButton1Click:Connect(function() if contentFrame.Visible then originalSize = calculatorFrame.Size calculatorFrame.Size = UDim2.new(calculatorFrame.Size.X.Scale, calculatorFrame.Size.X.Offset, 0, 30) contentFrame.Visible = false minimizeButton.Text = "+" else calculatorFrame.Size = originalSize contentFrame.Visible = true minimizeButton.Text = "-" end end) -- Close functionality closeButton.MouseButton1Click:Connect(function() gui:Destroy() end)