-- Max Game Crasher V1 - ТЕКСТ И КНОПКИ СДВИНУТЫ ВПРАВО local w = display.contentWidth local h = display.contentHeight local gg = display.newGroup() local men = display.newGroup() -- СОСТОЯНИЯ local rotate_all = false local reverse_mode = false local disco_mode = false local black_screen = false -- КНОПКА open local btn = display.newRoundedRect(gg, w - 90, 30, 100, 45, 12) btn:setFillColor(0.3,0.3,0.4) btn:setStrokeColor(0.7,0.5,0.9,1) btn.strokeWidth = 2 local btnText = display.newText("open", btn.x, btn.y, native.systemFontBold, 18) btnText:setFillColor(1,1,1) gg:insert(btnText) -- МЕНЮ (размеры не меняем) local panelW = 560 local panelH = 500 local panel = display.newRoundedRect(men, display.contentCenterX, display.contentCenterY, panelW, panelH, 18) panel:setFillColor(0.1,0.1,0.15,0.96) panel:setStrokeColor(0.7,0.5,0.9,1) panel.strokeWidth = 2 local title = display.newText("Max Game Crasher V1", panel.x, panel.y - panelH/2 + 35, native.systemFontBold, 24) title:setFillColor(1,1,1) men:insert(title) local close = display.newText("×", panel.x + panelW/2 - 35, panel.y - panelH/2 + 35, native.systemFontBold, 36) close:setFillColor(1,0.4,0.4) men:insert(close) local lineTop = display.newLine(panel.x - panelW/2 + 20, panel.y - panelH/2 + 55, panel.x + panelW/2 - 20, panel.y - panelH/2 + 55) lineTop:setStrokeColor(0.7,0.5,0.9,0.5) lineTop.strokeWidth = 1 men:insert(lineTop) men.isVisible = false -- ПЕРЕТАСКИВАНИЕ КНОПКИ local btnDrag = false local btnStartX, btnStartY local function onBtnDrag(e) if e.phase == "began" then btnDrag = true btnStartX = e.x - gg.x btnStartY = e.y - gg.y elseif e.phase == "moved" and btnDrag then gg.x = e.x - btnStartX gg.y = e.y - btnStartY elseif e.phase == "ended" then btnDrag = false end return true end btn:addEventListener("touch", onBtnDrag) btnText:addEventListener("touch", onBtnDrag) -- ПЕРЕТАСКИВАНИЕ МЕНЮ local menuDrag = false local menuStartX, menuStartY local function onMenuDrag(e) if e.phase == "began" then menuDrag = true menuStartX = e.x - men.x menuStartY = e.y - men.y elseif e.phase == "moved" and menuDrag then men.x = e.x - menuStartX men.y = e.y - menuStartY elseif e.phase == "ended" then menuDrag = false end return true end panel:addEventListener("touch", onMenuDrag) title:addEventListener("touch", onMenuDrag) local function toggleMenu() men.isVisible = not men.isVisible btnText.text = men.isVisible and "close" or "open" end btn:addEventListener("tap", toggleMenu) btnText:addEventListener("tap", toggleMenu) close:addEventListener("tap", toggleMenu) -- ============ ФУНКЦИИ ============ -- 1. ROTATE ALL local rotateFrame = nil local function rotateAllUpdate() if not rotate_all then return end local stage = display.getCurrentStage() if not stage then return end local function rotateObj(obj) if obj and obj.rotation then obj.rotation = (obj.rotation or 0) + 5 end if obj and obj.numChildren then for i = 1, obj.numChildren do rotateObj(obj[i]) end end end rotateObj(stage) end local function toggleRotate() rotate_all = not rotate_all if rotate_all then if not rotateFrame then rotateFrame = Runtime:addEventListener("enterFrame", rotateAllUpdate) end else if rotateFrame then Runtime:removeEventListener("enterFrame", rotateFrame); rotateFrame = nil end end end -- 2. REVERSE MODE local reverseFrame = nil local function reverseUpdate() if not reverse_mode then return end local stage = display.getCurrentStage() if not stage then return end local function reverseObj(obj) if obj and obj.rotation then obj.rotation = (obj.rotation or 0) + 180 end if obj and obj.xScale then obj.xScale = -1 obj.yScale = -1 end if obj and obj.numChildren then for i = 1, obj.numChildren do reverseObj(obj[i]) end end end reverseObj(stage) end local function toggleReverse() reverse_mode = not reverse_mode if reverse_mode then if not reverseFrame then reverseFrame = Runtime:addEventListener("enterFrame", reverseUpdate) end reverseUpdate() else if reverseFrame then Runtime:removeEventListener("enterFrame", reverseFrame); reverseFrame = nil end local stage = display.getCurrentStage() if stage then local function fixObj(obj) if obj and obj.rotation then obj.rotation = 0 end if obj and obj.xScale then obj.xScale = 1; obj.yScale = 1 end if obj and obj.numChildren then for i = 1, obj.numChildren do fixObj(obj[i]) end end end fixObj(stage) end end end -- 3. DISCO local discoTimer = nil local function discoUpdate() if not disco_mode then return end local stage = display.getCurrentStage() if not stage then return end local function randomColor(obj) if obj and obj.setFillColor then obj:setFillColor(math.random(), math.random(), math.random()) end if obj and obj.numChildren then for i = 1, obj.numChildren do randomColor(obj[i]) end end end randomColor(stage) end local function toggleDisco() disco_mode = not disco_mode if disco_mode then if discoTimer then timer.cancel(discoTimer) end discoTimer = timer.performWithDelay(1000, discoUpdate, 0) discoUpdate() else if discoTimer then timer.cancel(discoTimer); discoTimer = nil end end end -- 4. BLACK SCREEN local blackRect = nil local function updateBlackScreen() if black_screen then if not blackRect then blackRect = display.newRect(0, 0, display.contentWidth, display.contentHeight) blackRect.anchorX = 0 blackRect.anchorY = 0 blackRect:setFillColor(0,0,0) blackRect:toFront() else blackRect.width = display.contentWidth blackRect.height = display.contentHeight blackRect:toFront() end else if blackRect then blackRect:removeSelf() blackRect = nil end end end local function toggleBlackScreen() black_screen = not black_screen updateBlackScreen() end Runtime:addEventListener("orientation", function() updateBlackScreen() end) -- ============ ЧЕКБОКСЫ (СДВИНУТЫ ВПРАВО) ============ local startY = panel.y - panelH/2 + 90 local function addCheckbox(name, getter, setter) local y = startY startY = y + 55 -- текст правее (было -230, стало -140) local label = display.newText(name, panel.x - 140, y, native.systemFont, 18) label:setFillColor(1,1,1) men:insert(label) -- кнопка правее (было +190, стало +220) local box = display.newRoundedRect(men, panel.x + 220, y, 36, 36, 6) box:setFillColor(0.2,0.2,0.25) box:setStrokeColor(0.8,0.8,0.8,1) box.strokeWidth = 2 local check = display.newLine(men, box.x - 12, box.y, box.x - 3, box.y + 9, box.x + 12, box.y - 9) check:setStrokeColor(0.2,0.9,0.4) check.strokeWidth = 5 check.isVisible = getter() local function tap() setter() check.isVisible = getter() end box:addEventListener("tap", tap) check:addEventListener("tap", tap) end addCheckbox("Rotate All", function() return rotate_all end, toggleRotate) addCheckbox("Reverse Mode", function() return reverse_mode end, toggleReverse) addCheckbox("Disco", function() return disco_mode end, toggleDisco) addCheckbox("Black Screen", function() return black_screen end, toggleBlackScreen) print("=================================") print("Max Game Crasher V1 - ТЕКСТ СДВИНУТ ВПРАВО") print("Rotate All, Reverse Mode, Disco, Black Screen") print("=================================")