/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { musicEnabled: true, difficultyLevel: "Normal", gameSpeedSetting: "Normal", colorMode: "Normal", shapeSize: "Normal", redBallsCollected: 0, blueBallsCollected: 0, yellowBallsCollected: 0, particleEffectsEnabled: true, screenEffectsEnabled: true, animationQuality: "High" }); /**** * Classes ****/ var BackgroundParticle = Container.expand(function () { var self = Container.call(this); var colors = [0xfeca57, 0xff9500, 0xff69b4, 0x4da6ff, 0xffffff]; // Yellow, Orange, Pink, Blue, White var randomColor = colors[Math.floor(Math.random() * colors.length)]; var particleGraphics = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); particleGraphics.tint = randomColor; particleGraphics.alpha = 0.3 + Math.random() * 0.4; // Random transparency self.speedX = (Math.random() - 0.5) * 0.5; self.speedY = -0.3 - Math.random() * 0.7; self.life = 0; self.maxLife = 300 + Math.random() * 200; var initialScale = 0.3 + Math.random() * 0.7; particleGraphics.scaleX = initialScale; particleGraphics.scaleY = initialScale; self.update = function () { self.x += self.speedX; self.y += self.speedY; self.life++; // Fade out as particle ages var lifeRatio = self.life / self.maxLife; particleGraphics.alpha = (1 - lifeRatio) * (0.3 + Math.random() * 0.4); // Gentle floating motion self.x += Math.sin(self.life * 0.01) * 0.1; // Remove particle when it's old or off screen if (self.life >= self.maxLife || self.y < -50 || self.x < -50 || self.x > 2100) { self.shouldRemove = true; } }; return self; }); var Basket = Container.expand(function (color) { var self = Container.call(this); self.color = color; var basketGraphics = self.attachAsset(color + 'Basket', { anchorX: 0.5, anchorY: 0.5 }); // Apply shape size setting to baskets var sizeMultiplier = shapeSize === 'Small' ? 0.7 : shapeSize === 'Large' ? 1.3 : 1.0; basketGraphics.scaleX = sizeMultiplier; basketGraphics.scaleY = sizeMultiplier; return self; }); var FallingShape = Container.expand(function (color) { var self = Container.call(this); self.color = color; self.speed = 3; self.lastY = 0; var shapeGraphics = self.attachAsset(color + 'Shape', { anchorX: 0.5, anchorY: 0.5 }); // Apply shape size setting var sizeMultiplier = shapeSize === 'Small' ? 0.7 : shapeSize === 'Large' ? 1.3 : 1.0; shapeGraphics.scaleX = sizeMultiplier; shapeGraphics.scaleY = sizeMultiplier; self.update = function () { self.lastY = self.y; self.y += self.speed; }; return self; }); var MenuButton = Container.expand(function (text, color) { var self = Container.call(this); // Create button background self.bg = LK.getAsset('shape', { width: 600, height: 120, color: color || 0x3498db, shape: 'ellipse', anchorX: 0.5, anchorY: 0.5 }); self.addChild(self.bg); // Create button text self.text = new Text2(text, { size: 60, fill: 0xFFFFFF }); self.text.anchor.set(0.5, 0.5); self.addChild(self.text); self.isPressed = false; self.down = function (x, y, obj) { self.isPressed = true; tween(self, { scaleX: 0.95, scaleY: 0.95 }, { duration: 100 }); }; self.up = function (x, y, obj) { if (self.isPressed) { self.isPressed = false; tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); if (self.onClick) { self.onClick(); } } }; return self; }); var PowerUp = Container.expand(function (type) { var self = Container.call(this); self.type = type; // 'slowMotion' or 'doublePoints' self.speed = 2; self.lastY = 0; var powerUpGraphics = self.attachAsset(type + 'PowerUp', { anchorX: 0.5, anchorY: 0.5 }); // Add glowing effect powerUpGraphics.alpha = 0.8; var glowPhase = 0; self.update = function () { self.lastY = self.y; self.y += self.speed; // Glow animation glowPhase += 0.1; powerUpGraphics.alpha = 0.6 + Math.sin(glowPhase) * 0.3; // Gentle rotation powerUpGraphics.rotation += 0.05; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ // Function to format game time from seconds to readable format function formatGameTime(seconds) { var hours = Math.floor(seconds / 3600); var minutes = Math.floor(seconds % 3600 / 60); var remainingSeconds = seconds % 60; if (hours > 0) { return hours + ' saat ' + minutes + ' dakika ' + remainingSeconds + ' saniye'; } else if (minutes > 0) { return minutes + ' dakika ' + remainingSeconds + ' saniye'; } else { return remainingSeconds + ' saniye'; } function showSpinWheel() { gameState = 'spinwheel'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Spin wheel title var wheelTitle = new Text2('🎰 ŞANS ÇARKI', { size: 90, fill: 0xe67e22 }); wheelTitle.anchor.set(0.5, 0.5); wheelTitle.x = 2048 / 2; wheelTitle.y = 400; currentMenu.addChild(wheelTitle); // Animate title with casino colors var titleColors = [0xe67e22, 0xf39c12, 0xe74c3c, 0x9b59b6]; var currentColorIndex = 0; function animateWheelTitle() { currentColorIndex = (currentColorIndex + 1) % titleColors.length; tween(wheelTitle, { tint: titleColors[currentColorIndex], scaleX: 1.1, scaleY: 1.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(wheelTitle, { scaleX: 1, scaleY: 1 }, { duration: 400, onFinish: animateWheelTitle }); } }); } animateWheelTitle(); // Wheel description var wheelDesc = new Text2('Günde bir kez ücretsiz çevirebilirsiniz!\nHarika ödüller kazanma şansı.', { size: 50, fill: 0xFFFFFF }); wheelDesc.anchor.set(0.5, 0.5); wheelDesc.x = 2048 / 2; wheelDesc.y = 600; currentMenu.addChild(wheelDesc); // Wheel prizes section var prizesTitle = new Text2('🏆 ÖDÜLLER', { size: 60, fill: 0xf1c40f }); prizesTitle.anchor.set(0.5, 0.5); prizesTitle.x = 2048 / 2; prizesTitle.y = 800; currentMenu.addChild(prizesTitle); var prizesList = new Text2('• 🪙 50 Premium Coin\n• 🪙 100 Premium Coin\n• 🪙 200 Premium Coin\n• ⚡ Çift XP Boost (1 gün)\n• 🛡️ Ekstra Can x3\n• 🎁 Sürpriz Ödül\n• 💎 Nadir Şekil Kilidi\n• 🌟 Mega Bonus (500 Coin)', { size: 45, fill: 0xecf0f1 }); prizesList.anchor.set(0.5, 0.5); prizesList.x = 2048 / 2; prizesList.y = 1050; currentMenu.addChild(prizesList); // Check if user can spin today var lastSpinDate = storage.lastSpinDate || ''; var today = new Date().toDateString(); var canSpin = lastSpinDate !== today; // Spin button var spinButton = new MenuButton(canSpin ? '🎰 ÇARKI ÇEVİR!' : '⏰ Yarın Tekrar Dene', canSpin ? 0x27ae60 : 0x95a5a6); spinButton.x = 2048 / 2; spinButton.y = 1400; if (canSpin) { // Animate spin button when available var _pulseSpinButton = function pulseSpinButton() { tween(spinButton, { scaleX: 1.15, scaleY: 1.15 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(spinButton, { scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: _pulseSpinButton }); } }); }; _pulseSpinButton(); } spinButton.onClick = function () { LK.getSound('Click').play(); if (canSpin) { // Perform spin performSpin(); } }; currentMenu.addChild(spinButton); // Premium spin section var premiumSpinTitle = new Text2('💎 PREMİUM ÇEVİRME', { size: 60, fill: 0x9b59b6 }); premiumSpinTitle.anchor.set(0.5, 0.5); premiumSpinTitle.x = 2048 / 2; premiumSpinTitle.y = 1600; currentMenu.addChild(premiumSpinTitle); var premiumSpinDesc = new Text2('10 Premium Coin ile istediğiniz zaman çevirebilirsiniz!\nDaha yüksek ödül şansı.', { size: 45, fill: 0xbdc3c7 }); premiumSpinDesc.anchor.set(0.5, 0.5); premiumSpinDesc.x = 2048 / 2; premiumSpinDesc.y = 1720; currentMenu.addChild(premiumSpinDesc); // Premium spin button var premiumCoins = storage.premiumCoins || 0; var premiumSpinButton = new MenuButton('💎 Premium Çevirme (10 Coin)', premiumCoins >= 10 ? 0xe67e22 : 0x95a5a6); premiumSpinButton.x = 2048 / 2; premiumSpinButton.y = 1850; premiumSpinButton.onClick = function () { LK.getSound('Click').play(); if (premiumCoins >= 10) { storage.premiumCoins = premiumCoins - 10; performSpin(true); // Premium spin } }; currentMenu.addChild(premiumSpinButton); // Current coins display var coinsDisplay = new Text2('💰 Mevcut Coin: ' + premiumCoins, { size: 50, fill: 0xf1c40f }); coinsDisplay.anchor.set(0.5, 0.5); coinsDisplay.x = 2048 / 2; coinsDisplay.y = 2000; currentMenu.addChild(coinsDisplay); // Back button var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2200; backButton.onClick = function () { LK.getSound('Click').play(); createMainMenu(); }; currentMenu.addChild(backButton); } function performSpin(isPremium) { // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Spinning animation screen var spinTitle = new Text2('🎰 ÇARK DÖNÜYOR...', { size: 90, fill: 0xe67e22 }); spinTitle.anchor.set(0.5, 0.5); spinTitle.x = 2048 / 2; spinTitle.y = 800; currentMenu.addChild(spinTitle); // Animate spinning title tween(spinTitle, { rotation: Math.PI * 4 // 2 full rotations }, { duration: 2000, easing: tween.easeOut, onFinish: function onFinish() { // Show result showSpinResult(isPremium); } }); // Add excitement text var excitementText = new Text2('🌟 Hangi ödülü kazanacaksınız? 🌟', { size: 60, fill: 0xf1c40f }); excitementText.anchor.set(0.5, 0.5); excitementText.x = 2048 / 2; excitementText.y = 1200; currentMenu.addChild(excitementText); // Animate excitement text tween(excitementText, { alpha: 0.5 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(excitementText, { alpha: 1 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { if (excitementText.parent) { tween(excitementText, { alpha: 0.5 }, { duration: 500, easing: tween.easeInOut }); } } }); } }); } function showSpinResult(isPremium) { // Define prizes (premium has better odds) var prizes = [{ name: '50 Premium Coin', value: 50, type: 'coin', rarity: 'common' }, { name: '100 Premium Coin', value: 100, type: 'coin', rarity: 'common' }, { name: '200 Premium Coin', value: 200, type: 'coin', rarity: 'rare' }, { name: 'Çift XP Boost (1 gün)', value: 1, type: 'boost', rarity: 'rare' }, { name: 'Ekstra Can x3', value: 3, type: 'lives', rarity: 'common' }, { name: 'Sürpriz Ödül', value: 0, type: 'surprise', rarity: 'epic' }, { name: 'Nadir Şekil Kilidi', value: 1, type: 'unlock', rarity: 'epic' }, { name: 'Mega Bonus (500 Coin)', value: 500, type: 'coin', rarity: 'legendary' }]; // Select random prize (premium has better chances for rare items) var randomValue = Math.random(); var selectedPrize; if (isPremium) { // Premium spin has better odds if (randomValue < 0.05) { selectedPrize = prizes[7]; // Legendary } else if (randomValue < 0.20) { selectedPrize = prizes[5 + Math.floor(Math.random() * 2)]; // Epic } else if (randomValue < 0.50) { selectedPrize = prizes[2 + Math.floor(Math.random() * 2)]; // Rare } else { selectedPrize = prizes[Math.floor(Math.random() * 2)]; // Common } } else { // Normal spin if (randomValue < 0.01) { selectedPrize = prizes[7]; // Legendary } else if (randomValue < 0.10) { selectedPrize = prizes[5 + Math.floor(Math.random() * 2)]; // Epic } else if (randomValue < 0.30) { selectedPrize = prizes[2 + Math.floor(Math.random() * 2)]; // Rare } else { selectedPrize = prizes[Math.floor(Math.random() * 5)]; // Common } } // Update last spin date for free spins if (!isPremium) { storage.lastSpinDate = new Date().toDateString(); } // Apply prize switch (selectedPrize.type) { case 'coin': storage.premiumCoins = (storage.premiumCoins || 0) + selectedPrize.value; break; case 'boost': storage.doubleXPBoost = true; storage.boostExpiry = Date.now() + 24 * 60 * 60 * 1000; // 24 hours break; case 'lives': storage.extraLives = (storage.extraLives || 0) + selectedPrize.value; break; case 'unlock': storage.rareShapesUnlocked = true; break; case 'surprise': // Random bonus storage.premiumCoins = (storage.premiumCoins || 0) + (150 + Math.floor(Math.random() * 100)); break; } // Clear menu and show result if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Result title var resultTitle = new Text2('🎉 TEBRİKLER! 🎉', { size: 100, fill: 0x27ae60 }); resultTitle.anchor.set(0.5, 0.5); resultTitle.x = 2048 / 2; resultTitle.y = 600; currentMenu.addChild(resultTitle); // Prize announcement var prizeText = new Text2('Kazandığınız ödül:', { size: 60, fill: 0xf1c40f }); prizeText.anchor.set(0.5, 0.5); prizeText.x = 2048 / 2; prizeText.y = 800; currentMenu.addChild(prizeText); // Prize name with rarity color var rarityColors = { common: 0xFFFFFF, rare: 0x3498db, epic: 0x9b59b6, legendary: 0xf1c40f }; var prizeNameText = new Text2(selectedPrize.name, { size: 80, fill: rarityColors[selectedPrize.rarity] }); prizeNameText.anchor.set(0.5, 0.5); prizeNameText.x = 2048 / 2; prizeNameText.y = 1000; currentMenu.addChild(prizeNameText); // Animate prize text tween(prizeNameText, { scaleX: 1.2, scaleY: 1.2 }, { duration: 500, easing: tween.bounceOut, onFinish: function onFinish() { tween(prizeNameText, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeOut }); } }); // Show current coins var newCoins = storage.premiumCoins || 0; var coinsText = new Text2('💰 Toplam Coin: ' + newCoins, { size: 50, fill: 0xf39c12 }); coinsText.anchor.set(0.5, 0.5); coinsText.x = 2048 / 2; coinsText.y = 1200; currentMenu.addChild(coinsText); // Continue button var continueButton = new MenuButton('✨ DEVAM ET', 0x27ae60); continueButton.x = 2048 / 2; continueButton.y = 1500; continueButton.onClick = function () { LK.getSound('Click').play(); createMainMenu(); }; currentMenu.addChild(continueButton); // Spin again button (if premium) if (isPremium || storage.premiumCoins >= 10) { var spinAgainButton = new MenuButton('🎰 Tekrar Çevir', 0xe67e22); spinAgainButton.x = 2048 / 2; spinAgainButton.y = 1650; spinAgainButton.onClick = function () { LK.getSound('Click').play(); showSpinWheel(); }; currentMenu.addChild(spinAgainButton); } // Flash screen with rarity color LK.effects.flashScreen(rarityColors[selectedPrize.rarity], 1000); // Play celebration sound LK.getSound('Applause').play(); } ; } var baskets = []; var fallingShapes = []; var powerUps = []; var slowMotionActive = false; var doublePointsActive = false; var slowMotionTimer = 0; var doublePointsTimer = 0; var powerUpSpawnTimer = 0; // Update colors based on color mode var colors = colorMode === 'ColorBlind' ? ['red', 'blue', 'yellow'] : ['red', 'blue', 'yellow']; // Note: In real implementation, colorblind mode would use different color combinations var gameSpeed = 1; var consecutiveMatches = 0; var draggedBasket = null; var gameState = 'menu'; // 'menu', 'playing', 'howtoplay', 'settings' var menuButtons = []; var currentMenu = null; var musicEnabled = storage.musicEnabled !== undefined ? storage.musicEnabled : true; // Track music state var highScore = storage.highScore || 0; // Load saved high score // Game time tracking var totalGameTime = storage.totalGameTime || 0; // Total time played in seconds var currentSessionStartTime = 0; // When current game session started var gameTimeTimer = null; // Timer for tracking game time var sessionStartTime = 0; // Track when current session actually started // Ball collection requirements and tracking var ballRequirements = { red: 5, blue: 5, yellow: 5 }; var ballsCollected = { red: storage.redBallsCollected || 0, blue: storage.blueBallsCollected || 0, yellow: storage.yellowBallsCollected || 0 }; // Level system var currentLevel = 1; var levelCompleted = false; storage.currentLevel = 1; // Game settings from storage var difficultyLevel = storage.difficultyLevel || 'Normal'; // Easy, Normal, Hard var gameSpeedSetting = storage.gameSpeedSetting || 'Normal'; // Slow, Normal, Fast var colorMode = storage.colorMode || 'Normal'; // Normal, ColorBlind var shapeSize = storage.shapeSize || 'Normal'; // Small, Normal, Large // Create animated background var backgroundContainer = new Container(); game.addChild(backgroundContainer); // Create menu background var menuBg = LK.getAsset('menuBackground', { anchorX: 0, anchorY: 0 }); menuBg.x = 0; menuBg.y = 0; menuBg.alpha = 0.9; backgroundContainer.addChild(menuBg); // Create gradient layers var gradientLayer1 = LK.getAsset('gradientLayer1', { anchorX: 0, anchorY: 0 }); gradientLayer1.x = 0; gradientLayer1.y = 0; gradientLayer1.alpha = 0.3; backgroundContainer.addChild(gradientLayer1); var gradientLayer2 = LK.getAsset('gradientLayer2', { anchorX: 0, anchorY: 0 }); gradientLayer2.x = 0; gradientLayer2.y = 0; gradientLayer2.alpha = 0.2; backgroundContainer.addChild(gradientLayer2); // Animate gradient layers function animateGradientLayers() { // Animate menu background tween(menuBg, { alpha: 0.7 }, { duration: 4000, easing: tween.easeInOut, onFinish: function onFinish() { tween(menuBg, { alpha: 0.9 }, { duration: 4000, easing: tween.easeInOut }); } }); tween(gradientLayer1, { alpha: 0.1 }, { duration: 3000, easing: tween.easeInOut, onFinish: function onFinish() { tween(gradientLayer1, { alpha: 0.3 }, { duration: 3000, easing: tween.easeInOut, onFinish: animateGradientLayers }); } }); tween(gradientLayer2, { alpha: 0.1 }, { duration: 2500, easing: tween.easeInOut, onFinish: function onFinish() { tween(gradientLayer2, { alpha: 0.2 }, { duration: 2500, easing: tween.easeInOut }); } }); } animateGradientLayers(); // Particle system var backgroundParticles = []; var particleSpawnTimer = 0; // Create score display (initially hidden) var scoreTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); scoreTxt.visible = false; LK.gui.top.addChild(scoreTxt); // Create ball collection display (initially hidden) var ballCountTxt = new Text2('', { size: 50, fill: 0xFFFFFF }); ballCountTxt.anchor.set(1, 0); ballCountTxt.visible = false; LK.gui.topRight.addChild(ballCountTxt); // Create pause button (initially hidden) var pauseButton = new MenuButton('⏸️ DURAKLAT', 0x34495e); pauseButton.x = 150; pauseButton.y = 80; pauseButton.visible = false; pauseButton.onClick = function () { LK.getSound('Click').play(); togglePause(); }; LK.gui.topLeft.addChild(pauseButton); // Game pause state var gamePaused = false; var pauseMenu = null; // Function to update ball collection display function updateBallDisplay() { // Clear existing text and recreate with colored sections if (ballCountTxt.parent) { ballCountTxt.parent.removeChild(ballCountTxt); } // Create container for colored text elements var ballDisplayContainer = new Container(); ballDisplayContainer.x = ballCountTxt.x; ballDisplayContainer.y = ballCountTxt.y; LK.gui.topRight.addChild(ballDisplayContainer); // Title text with enhanced styling var titleText = new Text2('🎯 BÖLÜM ' + currentLevel + ' HEDEFLERİ', { size: 55, fill: 0xf1c40f }); titleText.anchor.set(1, 0); titleText.x = 0; titleText.y = 0; ballDisplayContainer.addChild(titleText); // Add animated glow effect to title tween(titleText, { alpha: 0.7 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(titleText, { alpha: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { // Continue glow animation if still in game if (gameState === 'playing') { tween(titleText, { alpha: 0.7 }, { duration: 1000, easing: tween.easeInOut }); } } }); } }); // Red ball text with red color var redText = new Text2('Kırmızı: ' + ballsCollected.red + '/' + ballRequirements.red, { size: 50, fill: 0xff0000 }); redText.anchor.set(1, 0); redText.x = 0; redText.y = 60; ballDisplayContainer.addChild(redText); // Blue ball text with blue color var blueText = new Text2('Mavi: ' + ballsCollected.blue + '/' + ballRequirements.blue, { size: 50, fill: 0x0066ff }); blueText.anchor.set(1, 0); blueText.x = 0; blueText.y = 120; ballDisplayContainer.addChild(blueText); // Yellow ball text with yellow color var yellowText = new Text2('Sarı: ' + ballsCollected.yellow + '/' + ballRequirements.yellow, { size: 50, fill: 0xffff00 }); yellowText.anchor.set(1, 0); yellowText.x = 0; yellowText.y = 180; ballDisplayContainer.addChild(yellowText); // Add power-up status display if (slowMotionActive || doublePointsActive) { var powerUpStatus = new Text2('', { size: 40, fill: 0xffffff }); powerUpStatus.anchor.set(1, 0); powerUpStatus.x = 0; powerUpStatus.y = 250; var statusText = ''; if (slowMotionActive) { statusText += '🕐 Yavaş Hareket: ' + Math.ceil(slowMotionTimer / 60) + 's\n'; } if (doublePointsActive) { statusText += '⭐ Çift Puan: ' + Math.ceil(doublePointsTimer / 60) + 's\n'; } powerUpStatus.setText(statusText); ballDisplayContainer.addChild(powerUpStatus); } // Update the global reference to the new container ballCountTxt = ballDisplayContainer; } // Internet connection status indicator in top right var connectionIndicator = new Text2('🌐 Bağlı', { size: 40, fill: 0x27ae60 }); connectionIndicator.anchor.set(1, 0); // Anchor to top right connectionIndicator.x = -20; // Position relative to topRight anchor connectionIndicator.y = 20; // Position from top LK.gui.topRight.addChild(connectionIndicator); // Premium activity indicator in top right (moved down) var premiumIndicator = new Text2('Premium ✅', { size: 40, fill: 0x27ae60 }); premiumIndicator.anchor.set(1, 0); // Anchor to top right premiumIndicator.x = -20; // Position relative to topRight anchor premiumIndicator.y = 70; // Position below connection indicator LK.gui.topRight.addChild(premiumIndicator); // Initialize menu system function createMainMenu() { gameState = 'menu'; gamePaused = false; // Hide game UI elements scoreTxt.visible = false; ballCountTxt.visible = false; pauseButton.visible = false; // Show connection and premium indicators in main menu connectionIndicator.visible = true; premiumIndicator.visible = true; // Clean up pause menu if it exists if (pauseMenu) { pauseMenu.destroy(); pauseMenu = null; } // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Play main menu background music if (musicEnabled) { LK.playMusic('Mainmenubackground'); } // Game title var titleText = new Text2('TOPLARI YAKALA', { size: 120, fill: 0xffff00 }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 600; currentMenu.addChild(titleText); // Enhanced title animations with multiple effects var titleColors = [0xfeca57, 0xff9500, 0xff69b4, 0x4da6ff, 0x27ae60, 0xe74c3c]; // Yellow, Orange, Pink, Blue, Green, Red var currentColorIndex = 0; function animateTitle() { // Color cycling animation with faster transitions currentColorIndex = (currentColorIndex + 1) % titleColors.length; tween(titleText, { tint: titleColors[currentColorIndex] }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { animateTitle(); } }); } // Fast yellow blinking animation function yellowBlinkTitle() { tween(titleText, { tint: 0xffff00 }, { duration: 200, easing: tween.linear, onFinish: function onFinish() { tween(titleText, { tint: 0xfeca57 }, { duration: 200, easing: tween.linear, onFinish: yellowBlinkTitle }); } }); } // Pulse effect - continuous scale animation function pulseTitle() { tween(titleText, { scaleX: 1.15, scaleY: 1.15 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { tween(titleText, { scaleX: 1, scaleY: 1 }, { duration: 1200, easing: tween.easeInOut, onFinish: pulseTitle }); } }); } // Gentle floating movement with enhanced motion function floatTitle() { var randomY = 600 + (Math.random() - 0.5) * 40; tween(titleText, { y: randomY }, { duration: 3000, easing: tween.easeInOut, onFinish: floatTitle }); } // Rotation effect function rotateTitle() { tween(titleText, { rotation: Math.PI * 0.05 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(titleText, { rotation: -Math.PI * 0.05 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(titleText, { rotation: 0 }, { duration: 1000, easing: tween.easeInOut, onFinish: rotateTitle }); } }); } }); } // Glow effect simulation with alpha changes function glowTitle() { tween(titleText, { alpha: 0.7 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(titleText, { alpha: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: glowTitle }); } }); } // Start all animations animateTitle(); yellowBlinkTitle(); pulseTitle(); floatTitle(); rotateTitle(); glowTitle(); // Menu buttons - Main game controls group var startButton = new MenuButton('OYUNU BAŞLAT', 0x27ae60); startButton.x = 2048 / 2; startButton.y = 1000; // Enhanced start button animations // Gradient color animation with multiple colors var startButtonColors = [0x27ae60, 0x2ecc71, 0x1abc9c, 0x16a085, 0x27ae60]; var currentStartColorIndex = 0; function animateStartButton() { currentStartColorIndex = (currentStartColorIndex + 1) % startButtonColors.length; tween(startButton.bg, { tint: startButtonColors[currentStartColorIndex] }, { duration: 800, easing: tween.easeInOut, onFinish: animateStartButton }); } // Pulsing scale animation function pulseStartButton() { tween(startButton, { scaleX: 1.1, scaleY: 1.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(startButton, { scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: pulseStartButton }); } }); } // Glow effect with alpha changes function glowStartButton() { tween(startButton, { alpha: 0.7 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(startButton, { alpha: 1 }, { duration: 600, easing: tween.easeInOut, onFinish: glowStartButton }); } }); } // Gentle floating movement function floatStartButton() { var randomY = 1000 + (Math.random() - 0.5) * 20; tween(startButton, { y: randomY }, { duration: 2000, easing: tween.easeInOut, onFinish: floatStartButton }); } // Start all animations animateStartButton(); pulseStartButton(); glowStartButton(); floatStartButton(); startButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation tween(startButton, { scaleX: 1.2, scaleY: 1.2, rotation: Math.PI * 0.05 }, { duration: 150, easing: tween.bounceOut, onFinish: function onFinish() { tween(startButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { startGame(); } }); } }); }; currentMenu.addChild(startButton); // Information and help group var howToPlayButton = new MenuButton('❓ NASIL OYNANIR?', 0x3498db); howToPlayButton.x = 2048 / 2; howToPlayButton.y = 1150; // Enhanced how to play button animations // Question mark pulse animation - makes the button more noticeable function pulseHowToPlayButton() { tween(howToPlayButton, { scaleX: 1.08, scaleY: 1.08 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { tween(howToPlayButton, { scaleX: 1, scaleY: 1 }, { duration: 1200, easing: tween.easeInOut, onFinish: pulseHowToPlayButton }); } }); } // Color cycling animation with educational colors var howToPlayColors = [0x3498db, 0x9b59b6, 0x1abc9c, 0xf39c12]; // Blue, Purple, Teal, Orange var currentHowToPlayColorIndex = 0; function animateHowToPlayButton() { currentHowToPlayColorIndex = (currentHowToPlayColorIndex + 1) % howToPlayColors.length; tween(howToPlayButton.bg, { tint: howToPlayColors[currentHowToPlayColorIndex] }, { duration: 1500, easing: tween.easeInOut, onFinish: animateHowToPlayButton }); } // Gentle shake animation to draw attention function shakeHowToPlayButton() { tween(howToPlayButton, { x: 2048 / 2 + 8 }, { duration: 150, easing: tween.easeInOut, onFinish: function onFinish() { tween(howToPlayButton, { x: 2048 / 2 - 8 }, { duration: 150, easing: tween.easeInOut, onFinish: function onFinish() { tween(howToPlayButton, { x: 2048 / 2 }, { duration: 150, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat shake after delay LK.setTimeout(shakeHowToPlayButton, 5000); } }); } }); } }); } // Glow effect for help button function glowHowToPlayButton() { tween(howToPlayButton, { alpha: 0.6 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(howToPlayButton, { alpha: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: glowHowToPlayButton }); } }); } // Start all animations pulseHowToPlayButton(); animateHowToPlayButton(); glowHowToPlayButton(); // Start shake animation after a delay LK.setTimeout(shakeHowToPlayButton, 3000); howToPlayButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with question mark theme tween(howToPlayButton, { scaleX: 1.3, scaleY: 1.3, rotation: Math.PI * 0.1 }, { duration: 200, easing: tween.bounceOut, onFinish: function onFinish() { tween(howToPlayButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { showHowToPlay(); } }); } }); }; currentMenu.addChild(howToPlayButton); var statisticsButton = new MenuButton('📊 İSTATİSTİKLERİM', 0x6c5ce7); statisticsButton.x = 2048 / 2; statisticsButton.y = 1300; // Enhanced statistics button animations // Data visualization effect with color cycling var statisticsColors = [0x6c5ce7, 0x9b59b6, 0x3498db, 0x1abc9c]; // Purple, Violet, Blue, Teal var currentStatsColorIndex = 0; function animateStatisticsButton() { currentStatsColorIndex = (currentStatsColorIndex + 1) % statisticsColors.length; tween(statisticsButton.bg, { tint: statisticsColors[currentStatsColorIndex] }, { duration: 1800, easing: tween.easeInOut, onFinish: animateStatisticsButton }); } // Chart-like pulse animation function pulseStatisticsButton() { tween(statisticsButton, { scaleX: 1.06, scaleY: 1.06 }, { duration: 1400, easing: tween.easeInOut, onFinish: function onFinish() { tween(statisticsButton, { scaleX: 1, scaleY: 1 }, { duration: 1400, easing: tween.easeInOut, onFinish: pulseStatisticsButton }); } }); } // Data bar effect simulation with gentle shake function shakeStatisticsButton() { tween(statisticsButton, { x: 2048 / 2 + 6 }, { duration: 100, easing: tween.easeInOut, onFinish: function onFinish() { tween(statisticsButton, { x: 2048 / 2 - 6 }, { duration: 100, easing: tween.easeInOut, onFinish: function onFinish() { tween(statisticsButton, { x: 2048 / 2 }, { duration: 100, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat shake after delay LK.setTimeout(shakeStatisticsButton, 4000); } }); } }); } }); } // Glow effect for data visualization theme function glowStatisticsButton() { tween(statisticsButton, { alpha: 0.75 }, { duration: 700, easing: tween.easeInOut, onFinish: function onFinish() { tween(statisticsButton, { alpha: 1 }, { duration: 700, easing: tween.easeInOut, onFinish: glowStatisticsButton }); } }); } // Start all animations animateStatisticsButton(); pulseStatisticsButton(); glowStatisticsButton(); // Start shake animation after a delay LK.setTimeout(shakeStatisticsButton, 2000); statisticsButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with chart theme tween(statisticsButton, { scaleX: 1.25, scaleY: 1.25, rotation: Math.PI * 0.08 }, { duration: 180, easing: tween.bounceOut, onFinish: function onFinish() { tween(statisticsButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 120, easing: tween.easeOut, onFinish: function onFinish() { showStatistics(); } }); } }); }; currentMenu.addChild(statisticsButton); // Game settings group var settingsButton = new MenuButton('⚙️ AYARLAR', 0xf39c12); settingsButton.x = 2048 / 2; settingsButton.y = 1450; // Enhanced settings button animations // Gear rotation effect function rotateSettingsButton() { tween(settingsButton, { rotation: Math.PI * 0.05 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(settingsButton, { rotation: -Math.PI * 0.05 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(settingsButton, { rotation: 0 }, { duration: 1500, easing: tween.easeInOut, onFinish: rotateSettingsButton }); } }); } }); } // Mechanical color cycling var settingsColors = [0xf39c12, 0xe67e22, 0xd35400, 0x95a5a6]; // Orange, Dark Orange, Darker Orange, Gray var currentSettingsColorIndex = 0; function animateSettingsButton() { currentSettingsColorIndex = (currentSettingsColorIndex + 1) % settingsColors.length; tween(settingsButton.bg, { tint: settingsColors[currentSettingsColorIndex] }, { duration: 1600, easing: tween.easeInOut, onFinish: animateSettingsButton }); } // Mechanical pulse animation function pulseSettingsButton() { tween(settingsButton, { scaleX: 1.08, scaleY: 1.08 }, { duration: 1300, easing: tween.easeInOut, onFinish: function onFinish() { tween(settingsButton, { scaleX: 1, scaleY: 1 }, { duration: 1300, easing: tween.easeInOut, onFinish: pulseSettingsButton }); } }); } // Gear-like glow effect function glowSettingsButton() { tween(settingsButton, { alpha: 0.7 }, { duration: 900, easing: tween.easeInOut, onFinish: function onFinish() { tween(settingsButton, { alpha: 1 }, { duration: 900, easing: tween.easeInOut, onFinish: glowSettingsButton }); } }); } // Start all animations rotateSettingsButton(); animateSettingsButton(); pulseSettingsButton(); glowSettingsButton(); settingsButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with gear theme tween(settingsButton, { scaleX: 1.3, scaleY: 1.3, rotation: Math.PI * 0.5 }, { duration: 200, easing: tween.bounceOut, onFinish: function onFinish() { tween(settingsButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { showSettings(); } }); } }); }; currentMenu.addChild(settingsButton); // Development and creator group var creatorsButton = new MenuButton('🎬 YAPIMCILAR', 0x9b59b6); creatorsButton.x = 2048 / 2; creatorsButton.y = 1600; // Enhanced creators button animations // Film reel color cycling var creatorsColors = [0x9b59b6, 0x8e44ad, 0x3498db, 0xe74c3c]; // Purple, Dark Purple, Blue, Red var currentCreatorsColorIndex = 0; function animateCreatorsButton() { currentCreatorsColorIndex = (currentCreatorsColorIndex + 1) % creatorsColors.length; tween(creatorsButton.bg, { tint: creatorsColors[currentCreatorsColorIndex] }, { duration: 2000, easing: tween.easeInOut, onFinish: animateCreatorsButton }); } // Movie credits roll effect function rollCreatorsButton() { tween(creatorsButton, { y: 1650 - 15 }, { duration: 1800, easing: tween.easeInOut, onFinish: function onFinish() { tween(creatorsButton, { y: 1650 + 15 }, { duration: 1800, easing: tween.easeInOut, onFinish: function onFinish() { tween(creatorsButton, { y: 1650 }, { duration: 1200, easing: tween.easeInOut, onFinish: rollCreatorsButton }); } }); } }); } // Film camera pulse effect function pulseCreatorsButton() { tween(creatorsButton, { scaleX: 1.07, scaleY: 1.07 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(creatorsButton, { scaleX: 1, scaleY: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: pulseCreatorsButton }); } }); } // Spotlight glow effect function glowCreatorsButton() { tween(creatorsButton, { alpha: 0.6 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(creatorsButton, { alpha: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: glowCreatorsButton }); } }); } // Start all animations animateCreatorsButton(); rollCreatorsButton(); pulseCreatorsButton(); glowCreatorsButton(); creatorsButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with film theme tween(creatorsButton, { scaleX: 1.4, scaleY: 1.4, rotation: Math.PI * 0.15 }, { duration: 250, easing: tween.bounceOut, onFinish: function onFinish() { tween(creatorsButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { showCreators(); } }); } }); }; currentMenu.addChild(creatorsButton); var recentUpdatesButton = new MenuButton('🆕 OYUNA SON EKLENENLER', 0x1abc9c); recentUpdatesButton.x = 2048 / 2; recentUpdatesButton.y = 1780; // Enhanced recent updates button animations // Notification badge flash effect var updatesColors = [0x1abc9c, 0x16a085, 0xe74c3c, 0xf1c40f]; // Teal, Dark Teal, Red, Yellow var currentUpdatesColorIndex = 0; function animateUpdatesButton() { currentUpdatesColorIndex = (currentUpdatesColorIndex + 1) % updatesColors.length; tween(recentUpdatesButton.bg, { tint: updatesColors[currentUpdatesColorIndex] }, { duration: 1200, easing: tween.easeInOut, onFinish: animateUpdatesButton }); } // New content notification pulse function pulseUpdatesButton() { tween(recentUpdatesButton, { scaleX: 1.12, scaleY: 1.12 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(recentUpdatesButton, { scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: pulseUpdatesButton }); } }); } // Notification glow effect with stronger intensity function glowUpdatesButton() { tween(recentUpdatesButton, { alpha: 0.5 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(recentUpdatesButton, { alpha: 1 }, { duration: 600, easing: tween.easeInOut, onFinish: glowUpdatesButton }); } }); } // New badge shake animation function shakeUpdatesButton() { tween(recentUpdatesButton, { x: 2048 / 2 + 10 }, { duration: 120, easing: tween.easeInOut, onFinish: function onFinish() { tween(recentUpdatesButton, { x: 2048 / 2 - 10 }, { duration: 120, easing: tween.easeInOut, onFinish: function onFinish() { tween(recentUpdatesButton, { x: 2048 / 2 }, { duration: 120, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat shake after delay LK.setTimeout(shakeUpdatesButton, 6000); } }); } }); } }); } // Start all animations animateUpdatesButton(); pulseUpdatesButton(); glowUpdatesButton(); // Start shake animation after a delay LK.setTimeout(shakeUpdatesButton, 3500); recentUpdatesButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with notification theme tween(recentUpdatesButton, { scaleX: 1.35, scaleY: 1.35, rotation: Math.PI * 0.12 }, { duration: 220, easing: tween.bounceOut, onFinish: function onFinish() { tween(recentUpdatesButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 180, easing: tween.easeOut, onFinish: function onFinish() { showRecentUpdates(); } }); } }); }; currentMenu.addChild(recentUpdatesButton); // Premium section - moved to bottom var premiumButton = new MenuButton('💎 PREMİUM GEÇİŞ', 0xf1c40f); premiumButton.x = 2048 / 2; // Center horizontally premiumButton.y = 2350; // Position at bottom of page // Enhanced premium button animations // Gold color cycling var premiumColors = [0xf1c40f, 0xf39c12, 0xe67e22, 0xd35400]; // Gold, Orange, Dark Orange, Darker Orange var currentPremiumColorIndex = 0; function animatePremiumButton() { currentPremiumColorIndex = (currentPremiumColorIndex + 1) % premiumColors.length; tween(premiumButton.bg, { tint: premiumColors[currentPremiumColorIndex] }, { duration: 1000, easing: tween.easeInOut, onFinish: animatePremiumButton }); } // Luxury pulse animation function pulsePremiumButton() { tween(premiumButton, { scaleX: 1.15, scaleY: 1.15 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(premiumButton, { scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: pulsePremiumButton }); } }); } // Premium glow effect with stronger intensity function glowPremiumButton() { tween(premiumButton, { alpha: 0.6 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(premiumButton, { alpha: 1 }, { duration: 600, easing: tween.easeInOut, onFinish: glowPremiumButton }); } }); } // Floating luxury effect function floatPremiumButton() { var randomY = 2350 + (Math.random() - 0.5) * 15; tween(premiumButton, { y: randomY }, { duration: 2000, easing: tween.easeInOut, onFinish: floatPremiumButton }); } // Start all animations animatePremiumButton(); pulsePremiumButton(); glowPremiumButton(); floatPremiumButton(); premiumButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with luxury theme tween(premiumButton, { scaleX: 1.4, scaleY: 1.4, rotation: Math.PI * 0.1 }, { duration: 200, easing: tween.bounceOut, onFinish: function onFinish() { tween(premiumButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { showPremium(); } }); } }); }; currentMenu.addChild(premiumButton); var premiumStoreButton = new MenuButton('🛍️ PREMİUM MAĞAZA', 0xd63384); premiumStoreButton.x = 2048 / 2; premiumStoreButton.y = 2500; // Position at bottom of page // Enhanced premium store button animations // Shopping color cycling var storeColors = [0xd63384, 0xb83d6e, 0x9c2755, 0x7f1d42]; // Pink, Dark Pink, Purple Pink, Dark Purple Pink var currentStoreColorIndex = 0; function animateStoreButton() { currentStoreColorIndex = (currentStoreColorIndex + 1) % storeColors.length; tween(premiumStoreButton.bg, { tint: storeColors[currentStoreColorIndex] }, { duration: 900, easing: tween.easeInOut, onFinish: animateStoreButton }); } // Shopping cart pulse animation function pulseStoreButton() { tween(premiumStoreButton, { scaleX: 1.12, scaleY: 1.12 }, { duration: 850, easing: tween.easeInOut, onFinish: function onFinish() { tween(premiumStoreButton, { scaleX: 1, scaleY: 1 }, { duration: 850, easing: tween.easeInOut, onFinish: pulseStoreButton }); } }); } // Store glow effect function glowStoreButton() { tween(premiumStoreButton, { alpha: 0.65 }, { duration: 650, easing: tween.easeInOut, onFinish: function onFinish() { tween(premiumStoreButton, { alpha: 1 }, { duration: 650, easing: tween.easeInOut, onFinish: glowStoreButton }); } }); } // Shopping bag sway effect function swayStoreButton() { var randomX = 2048 / 2 + (Math.random() - 0.5) * 20; tween(premiumStoreButton, { x: randomX }, { duration: 1800, easing: tween.easeInOut, onFinish: swayStoreButton }); } // Start all animations animateStoreButton(); pulseStoreButton(); glowStoreButton(); swayStoreButton(); premiumStoreButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with shopping theme tween(premiumStoreButton, { scaleX: 1.35, scaleY: 1.35, rotation: Math.PI * 0.08 }, { duration: 180, easing: tween.bounceOut, onFinish: function onFinish() { tween(premiumStoreButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 130, easing: tween.easeOut, onFinish: function onFinish() { showPremiumStore(); } }); } }); }; currentMenu.addChild(premiumStoreButton); // Exit section var exitButton = new MenuButton('🚪 ÇIKIŞ', 0xe74c3c); exitButton.x = 2048 / 2; exitButton.y = 1950; // Enhanced exit button animations // Warning color cycling var exitColors = [0xe74c3c, 0xc0392b, 0x95a5a6, 0x34495e]; // Red, Dark Red, Gray, Dark Gray var currentExitColorIndex = 0; function animateExitButton() { currentExitColorIndex = (currentExitColorIndex + 1) % exitColors.length; tween(exitButton.bg, { tint: exitColors[currentExitColorIndex] }, { duration: 2200, easing: tween.easeInOut, onFinish: animateExitButton }); } // Warning pulse with stronger effect function pulseExitButton() { tween(exitButton, { scaleX: 1.05, scaleY: 1.05 }, { duration: 1600, easing: tween.easeInOut, onFinish: function onFinish() { tween(exitButton, { scaleX: 1, scaleY: 1 }, { duration: 1600, easing: tween.easeInOut, onFinish: pulseExitButton }); } }); } // Danger glow effect function glowExitButton() { tween(exitButton, { alpha: 0.8 }, { duration: 1100, easing: tween.easeInOut, onFinish: function onFinish() { tween(exitButton, { alpha: 1 }, { duration: 1100, easing: tween.easeInOut, onFinish: glowExitButton }); } }); } // Warning door close effect function doorExitButton() { tween(exitButton, { y: 2050 - 8 }, { duration: 2500, easing: tween.easeInOut, onFinish: function onFinish() { tween(exitButton, { y: 2050 + 8 }, { duration: 2500, easing: tween.easeInOut, onFinish: function onFinish() { tween(exitButton, { y: 2050 }, { duration: 2000, easing: tween.easeInOut, onFinish: doorExitButton }); } }); } }); } // Start all animations animateExitButton(); pulseExitButton(); glowExitButton(); doorExitButton(); exitButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation with door/warning theme tween(exitButton, { scaleX: 1.2, scaleY: 1.2, rotation: Math.PI * 0.06 }, { duration: 160, easing: tween.bounceOut, onFinish: function onFinish() { tween(exitButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 140, easing: tween.easeOut, onFinish: function onFinish() { // On mobile, we can't actually exit, so show a message LK.effects.flashScreen(0x000000, 1000); } }); } }); }; currentMenu.addChild(exitButton); // Add glow animation to connection indicator tween(connectionIndicator, { alpha: 0.7 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(connectionIndicator, { alpha: 1 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat animation if still in main menu if (gameState === 'menu') { tween(connectionIndicator, { alpha: 0.7 }, { duration: 2000, easing: tween.easeInOut }); } } }); } }); // Add glow animation to premium indicator tween(premiumIndicator, { alpha: 0.7 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(premiumIndicator, { alpha: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat animation if still in main menu if (gameState === 'menu') { tween(premiumIndicator, { alpha: 0.7 }, { duration: 1500, easing: tween.easeInOut }); } } }); } }); // FPS indicator in top right var fpsIndicator = new Text2('FPS: 60', { size: 35, fill: 0xFFFFFF }); fpsIndicator.anchor.set(1, 0); // Anchor to top right fpsIndicator.x = -20; // Position relative to topRight anchor fpsIndicator.y = 120; // Position below premium indicator LK.gui.topRight.addChild(fpsIndicator); // Update FPS counter var frameCount = 0; var lastTime = Date.now(); function updateFPS() { frameCount++; var currentTime = Date.now(); if (currentTime - lastTime >= 1000) { // Update every second var fps = Math.round(frameCount * 1000 / (currentTime - lastTime)); fpsIndicator.setText('FPS: ' + fps); frameCount = 0; lastTime = currentTime; } // Only update FPS when in main menu if (gameState === 'menu') { LK.setTimeout(updateFPS, 16); // ~60 FPS update rate } } updateFPS(); // Add glow animation to FPS indicator tween(fpsIndicator, { alpha: 0.8 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(fpsIndicator, { alpha: 1 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat animation if still in main menu if (gameState === 'menu') { tween(fpsIndicator, { alpha: 0.8 }, { duration: 2000, easing: tween.easeInOut }); } } }); } }); // Special events notification at top of page var specialEventsNotification = new Text2('🎉 ÖZEL ETKİNLİK: Yılbaşı Bonusu Aktif! 🎉', { size: 50, fill: 0xff6b6b }); specialEventsNotification.anchor.set(0.5, 0.5); specialEventsNotification.x = 2048 / 2; specialEventsNotification.y = 100; // Position at very top of main menu currentMenu.addChild(specialEventsNotification); // Red blinking effect for New Year bonus function blinkSpecialEvents() { tween(specialEventsNotification, { tint: 0xff0000, alpha: 0.3 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { tween(specialEventsNotification, { tint: 0xff6b6b, alpha: 1 }, { duration: 400, easing: tween.easeInOut, onFinish: blinkSpecialEvents }); } }); } // Start red blinking animation blinkSpecialEvents(); // Copyright text var copyrightText = new Text2('© 2024 FRVR - Tüm hakları saklıdır', { size: 35, fill: 0x95a5a6 }); copyrightText.anchor.set(0.5, 0.5); copyrightText.x = 2048 / 2; copyrightText.y = 2650; // Position after premium buttons with proper spacing currentMenu.addChild(copyrightText); // Add subtle fade animation to copyright tween(copyrightText, { alpha: 0.6 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(copyrightText, { alpha: 1 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat fade animation if still in main menu if (gameState === 'menu') { tween(copyrightText, { alpha: 0.6 }, { duration: 2000, easing: tween.easeInOut }); } } }); } }); } function togglePause() { if (gameState !== 'playing') return; gamePaused = !gamePaused; pauseButton.text.setText(gamePaused ? '▶️ DEVAM' : '⏸️ DURAKLAT'); pauseButton.bg.tint = gamePaused ? 0x27ae60 : 0x34495e; if (gamePaused) { // Show pause menu pauseMenu = new Container(); game.addChild(pauseMenu); // Semi-transparent overlay var overlay = LK.getAsset('shape', { width: 2048, height: 2732, color: 0x000000, shape: 'box', anchorX: 0, anchorY: 0 }); overlay.alpha = 0.7; pauseMenu.addChild(overlay); // Pause title var pauseTitle = new Text2('OYUN DURAKLATILDI', { size: 80, fill: 0xFFFFFF }); pauseTitle.anchor.set(0.5, 0.5); pauseTitle.x = 2048 / 2; pauseTitle.y = 800; pauseMenu.addChild(pauseTitle); // Resume button var resumeButton = new MenuButton('▶️ DEVAM ET', 0x27ae60); resumeButton.x = 2048 / 2; resumeButton.y = 1200; resumeButton.onClick = function () { LK.getSound('Click').play(); togglePause(); }; pauseMenu.addChild(resumeButton); // Main menu button var mainMenuButton = new MenuButton('🏠 ANA MENÜ', 0xe74c3c); mainMenuButton.x = 2048 / 2; mainMenuButton.y = 1400; mainMenuButton.onClick = function () { LK.getSound('Click').play(); // Save game time before going to menu if (sessionStartTime > 0) { var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000); totalGameTime = (storage.totalGameTime || 0) + sessionTime; storage.totalGameTime = totalGameTime; sessionStartTime = 0; } // Save high score if current score is higher if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } gamePaused = false; pauseMenu.destroy(); pauseMenu = null; pauseButton.visible = false; createMainMenu(); }; pauseMenu.addChild(mainMenuButton); // Settings button var settingsInGameButton = new MenuButton('⚙️ AYARLAR', 0xf39c12); settingsInGameButton.x = 2048 / 2; settingsInGameButton.y = 1600; settingsInGameButton.onClick = function () { LK.getSound('Click').play(); showSettings(); }; pauseMenu.addChild(settingsInGameButton); } else { // Hide pause menu if (pauseMenu) { pauseMenu.destroy(); pauseMenu = null; } } } function startGame() { gameState = 'countdown'; gamePaused = false; // Clear menu if (currentMenu) { currentMenu.destroy(); currentMenu = null; } // Start countdown sequence startCountdown(); } function startCountdown() { // Create countdown container var countdownContainer = new Container(); game.addChild(countdownContainer); // Create semi-transparent overlay var overlay = LK.getAsset('shape', { width: 2048, height: 2732, color: 0x000000, shape: 'box', anchorX: 0, anchorY: 0 }); overlay.alpha = 0.7; countdownContainer.addChild(overlay); // Countdown numbers var countdownNumbers = ['3', '2', '1', 'BAŞLA!']; var currentIndex = 0; function showNextNumber() { if (currentIndex >= countdownNumbers.length) { // Countdown finished, start actual game countdownContainer.destroy(); actuallyStartGame(); return; } // Create countdown text var countdownText = new Text2(countdownNumbers[currentIndex], { size: currentIndex === 3 ? 100 : 200, fill: currentIndex === 3 ? 0x27ae60 : 0xf1c40f }); countdownText.anchor.set(0.5, 0.5); countdownText.x = 2048 / 2; countdownText.y = 2732 / 2; countdownContainer.addChild(countdownText); // Initial animation - start big and fade in countdownText.scaleX = 3; countdownText.scaleY = 3; countdownText.alpha = 0; // Play countdown sound LK.getSound('Click').play(); // Animate the number tween(countdownText, { scaleX: 1, scaleY: 1, alpha: 1 }, { duration: 300, easing: tween.bounceOut, onFinish: function onFinish() { // Hold for a moment then shrink and fade out LK.setTimeout(function () { tween(countdownText, { scaleX: 0.5, scaleY: 0.5, alpha: 0, rotation: Math.PI * 0.1 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { countdownText.destroy(); currentIndex++; showNextNumber(); } }); }, currentIndex === 3 ? 500 : 700); // Hold "BAŞLA!" longer } }); // Add pulsing glow effect function pulseGlow() { if (countdownText.parent) { tween(countdownText, { tint: 0xffffff }, { duration: 200, easing: tween.easeInOut, onFinish: function onFinish() { if (countdownText.parent) { tween(countdownText, { tint: currentIndex === 3 ? 0x27ae60 : 0xf1c40f }, { duration: 200, easing: tween.easeInOut }); } } }); } } // Start glow effect after initial animation LK.setTimeout(pulseGlow, 350); } // Start the countdown showNextNumber(); } function actuallyStartGame() { gameState = 'playing'; // Show score and ball collection display scoreTxt.visible = true; ballCountTxt.visible = true; pauseButton.visible = true; // Hide connection and premium indicators during gameplay connectionIndicator.visible = false; premiumIndicator.visible = false; pauseButton.text.setText('⏸️ DURAKLAT'); pauseButton.bg.tint = 0x34495e; updateBallDisplay(); // Clear existing baskets before creating new ones for (var i = baskets.length - 1; i >= 0; i--) { baskets[i].destroy(); } baskets = []; // Create baskets for (var i = 0; i < 3; i++) { var basket = new Basket(colors[i]); basket.x = 2048 / 4 * (i + 1); basket.y = 2732 - 200; baskets.push(basket); game.addChild(basket); } // Start background music only if enabled if (musicEnabled) { LK.playMusic('Background'); } // Start tracking game time for this session sessionStartTime = Date.now(); currentSessionStartTime = sessionStartTime; // Reset game variables and apply settings // Apply difficulty level var baseSpeed = difficultyLevel === 'Easy' ? 0.5 : difficultyLevel === 'Hard' ? 1.5 : 1.0; // Apply game speed setting var speedMultiplier = gameSpeedSetting === 'Slow' ? 0.7 : gameSpeedSetting === 'Fast' ? 1.3 : 1.0; gameSpeed = baseSpeed * speedMultiplier; consecutiveMatches = 0; LK.setScore(0); scoreTxt.setText('0'); // Reset power-ups slowMotionActive = false; doublePointsActive = false; slowMotionTimer = 0; doublePointsTimer = 0; powerUpSpawnTimer = 0; // Clear existing power-ups for (var p = powerUps.length - 1; p >= 0; p--) { powerUps[p].destroy(); } powerUps = []; // Reset ball collection for new game ballsCollected.red = 0; ballsCollected.blue = 0; ballsCollected.yellow = 0; storage.redBallsCollected = 0; storage.blueBallsCollected = 0; storage.yellowBallsCollected = 0; // Reset level completion status levelCompleted = false; // Reset level to 1 currentLevel = 1; storage.currentLevel = 1; } function showHowToPlay() { gameState = 'howtoplay'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Title var titleText = new Text2('NASIL OYNANIR', { size: 80, fill: 0xff6b6b }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; currentMenu.addChild(titleText); // Game objective section var objectiveText = new Text2('🎯 OYUNUN AMACI', { size: 60, fill: 0xf1c40f }); objectiveText.anchor.set(0.5, 0.5); objectiveText.x = 2048 / 2; objectiveText.y = 580; currentMenu.addChild(objectiveText); var objectiveDesc = new Text2('Yukarıdan düşen renkli şekilleri aynı renkteki sepetlerle yakalayın!\nDoğru renk eşleştirmeleri yaparak puan kazanın.', { size: 45, fill: 0xFFFFFF }); objectiveDesc.anchor.set(0.5, 0.5); objectiveDesc.x = 2048 / 2; objectiveDesc.y = 700; currentMenu.addChild(objectiveDesc); // Level system section var levelText = new Text2('🎮 BÖLÜM SİSTEMİ', { size: 60, fill: 0x3498db }); levelText.anchor.set(0.5, 0.5); levelText.x = 2048 / 2; levelText.y = 850; currentMenu.addChild(levelText); var levelDesc = new Text2('• BÖLÜM 1: Her renkten 5 top toplayın\n• BÖLÜM 2: Her renkten 10 top toplayın (SON BÖLÜM)\n• Her bölümde oyun daha da hızlanır!', { size: 40, fill: 0xFFFFFF }); levelDesc.anchor.set(0.5, 0.5); levelDesc.x = 2048 / 2; levelDesc.y = 970; currentMenu.addChild(levelDesc); // Controls section var controlsText = new Text2('📱 KONTROLLER', { size: 60, fill: 0x27ae60 }); controlsText.anchor.set(0.5, 0.5); controlsText.x = 2048 / 2; controlsText.y = 1120; currentMenu.addChild(controlsText); var controlsDesc = new Text2('• Sepetleri parmağınızla dokunup sürükleyin\n• Sepetler sadece sağa-sola hareket eder\n• Sepeti dokunduğunuz yere getirin', { size: 40, fill: 0xFFFFFF }); controlsDesc.anchor.set(0.5, 0.5); controlsDesc.x = 2048 / 2; controlsDesc.y = 1240; currentMenu.addChild(controlsDesc); // Scoring section var scoringText = new Text2('🏆 PUANLAMA SİSTEMİ', { size: 60, fill: 0xe67e22 }); scoringText.anchor.set(0.5, 0.5); scoringText.x = 2048 / 2; scoringText.y = 1390; currentMenu.addChild(scoringText); var scoringDesc = new Text2('• Doğru renk eşleştirme: +10 puan\n• Ardışık başarılı yakalamalar BONUS puan verir\n• Ne kadar çok yakalarsanız o kadar fazla puan!', { size: 40, fill: 0xFFFFFF }); scoringDesc.anchor.set(0.5, 0.5); scoringDesc.x = 2048 / 2; scoringDesc.y = 1510; currentMenu.addChild(scoringDesc); // Game over conditions var gameOverText = new Text2('❌ OYUN NASIL BİTER?', { size: 60, fill: 0xe74c3c }); gameOverText.anchor.set(0.5, 0.5); gameOverText.x = 2048 / 2; gameOverText.y = 1660; currentMenu.addChild(gameOverText); var gameOverDesc = new Text2('• Yanlış renkli sepete şekil düşürürseniz GAME OVER!\n• Herhangi bir şekli kaçırırsanız (yere düşerse) GAME OVER!\n• DİKKAT: Oyun sürekli hızlanır!', { size: 40, fill: 0xFFFFFF }); gameOverDesc.anchor.set(0.5, 0.5); gameOverDesc.x = 2048 / 2; gameOverDesc.y = 1780; currentMenu.addChild(gameOverDesc); // Tips section var tipsText = new Text2('💡 PRO İPUÇLARI', { size: 60, fill: 0x9b59b6 }); tipsText.anchor.set(0.5, 0.5); tipsText.x = 2048 / 2; tipsText.y = 1930; currentMenu.addChild(tipsText); var tipsDesc = new Text2('• Sepetleri şekil gelmeden ÖNCE konumlandırın\n• Hızlanan oyuna hazırlıklı olun\n• AYARLAR menüsünden zorluk seviyesini ayarlayın\n• Konsantre olun ve sakin kalın!', { size: 40, fill: 0xFFFFFF }); tipsDesc.anchor.set(0.5, 0.5); tipsDesc.x = 2048 / 2; tipsDesc.y = 2070; currentMenu.addChild(tipsDesc); // Enhanced back button with improved styling var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2300; // Add subtle animation to the back button tween(backButton, { alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(backButton, { alpha: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat animation if (gameState === 'howtoplay') { tween(backButton, { alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut }); } } }); } }); backButton.onClick = function () { LK.getSound('Click').play(); // Add visual feedback on click tween(backButton.bg, { tint: 0x2c3e50 }, { duration: 100, onFinish: function onFinish() { tween(backButton.bg, { tint: 0x34495e }, { duration: 100 }); } }); createMainMenu(); }; currentMenu.addChild(backButton); } function showSettings() { gameState = 'settings'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Settings title var settingsText = new Text2('AYARLAR', { size: 80, fill: 0xFFFFFF }); settingsText.anchor.set(0.5, 0.5); settingsText.x = 2048 / 2; settingsText.y = 500; currentMenu.addChild(settingsText); // Music toggle button var musicButton = new MenuButton(musicEnabled ? 'Oyun başlayınca arka plan müziği: açık' : 'Oyun başlayınca arka plan müziği: kapalı', musicEnabled ? 0x27ae60 : 0xe74c3c); musicButton.x = 2048 / 2; musicButton.y = 700; musicButton.onClick = function () { LK.getSound('Click').play(); musicEnabled = !musicEnabled; storage.musicEnabled = musicEnabled; // Save music preference if (musicEnabled) { LK.playMusic('Background'); musicButton.text.setText('Oyun başlayınca arka plan müziği: açık'); musicButton.bg.tint = 0x27ae60; } else { LK.stopMusic(); musicButton.text.setText('Oyun başlayınca arka plan müziği: kapalı'); musicButton.bg.tint = 0xe74c3c; } }; currentMenu.addChild(musicButton); // Difficulty Level button var difficultyButton = new MenuButton('Zorluk: ' + difficultyLevel, 0x8e44ad); difficultyButton.x = 2048 / 2; difficultyButton.y = 900; difficultyButton.onClick = function () { LK.getSound('Click').play(); var levels = ['Easy', 'Normal', 'Hard']; var currentIndex = levels.indexOf(difficultyLevel); difficultyLevel = levels[(currentIndex + 1) % levels.length]; storage.difficultyLevel = difficultyLevel; difficultyButton.text.setText('Zorluk: ' + difficultyLevel); var colors = [0x27ae60, 0xf39c12, 0xe74c3c]; difficultyButton.bg.tint = colors[levels.indexOf(difficultyLevel)]; }; currentMenu.addChild(difficultyButton); // Game Speed button var speedButton = new MenuButton('Hız: ' + gameSpeedSetting, 0x3498db); speedButton.x = 2048 / 2; speedButton.y = 1100; speedButton.onClick = function () { LK.getSound('Click').play(); var speeds = ['Slow', 'Normal', 'Fast']; var currentIndex = speeds.indexOf(gameSpeedSetting); gameSpeedSetting = speeds[(currentIndex + 1) % speeds.length]; storage.gameSpeedSetting = gameSpeedSetting; speedButton.text.setText('Hız: ' + gameSpeedSetting); var colors = [0x95a5a6, 0x3498db, 0xe67e22]; speedButton.bg.tint = colors[speeds.indexOf(gameSpeedSetting)]; }; currentMenu.addChild(speedButton); // Color Mode button var colorButton = new MenuButton('Renk: ' + colorMode, 0x16a085); colorButton.x = 2048 / 2; colorButton.y = 1300; colorButton.onClick = function () { LK.getSound('Click').play(); var modes = ['Normal', 'ColorBlind']; var currentIndex = modes.indexOf(colorMode); colorMode = modes[(currentIndex + 1) % modes.length]; storage.colorMode = colorMode; colorButton.text.setText('Renk: ' + colorMode); colorButton.bg.tint = colorMode === 'Normal' ? 0x16a085 : 0x34495e; }; currentMenu.addChild(colorButton); // Shape Size button var sizeButton = new MenuButton('Boyut: ' + shapeSize, 0xd35400); sizeButton.x = 2048 / 2; sizeButton.y = 1500; sizeButton.onClick = function () { LK.getSound('Click').play(); var sizes = ['Small', 'Normal', 'Large']; var currentIndex = sizes.indexOf(shapeSize); shapeSize = sizes[(currentIndex + 1) % sizes.length]; storage.shapeSize = shapeSize; sizeButton.text.setText('Boyut: ' + shapeSize); var colors = [0x95a5a6, 0xd35400, 0x8e44ad]; sizeButton.bg.tint = colors[sizes.indexOf(shapeSize)]; }; currentMenu.addChild(sizeButton); // Graphics settings section title var graphicsTitle = new Text2('🎨 GRAFİK AYARLARI', { size: 60, fill: 0xff6b6b }); graphicsTitle.anchor.set(0.5, 0.5); graphicsTitle.x = 2048 / 2; graphicsTitle.y = 1650; currentMenu.addChild(graphicsTitle); // Particle effects button var particleEffectsEnabled = storage.particleEffectsEnabled !== undefined ? storage.particleEffectsEnabled : true; var particleButton = new MenuButton(particleEffectsEnabled ? '✨ Partikül Efektleri: Açık' : '✨ Partikül Efektleri: Kapalı', particleEffectsEnabled ? 0x27ae60 : 0xe74c3c); particleButton.x = 2048 / 2; particleButton.y = 1800; particleButton.onClick = function () { LK.getSound('Click').play(); particleEffectsEnabled = !particleEffectsEnabled; storage.particleEffectsEnabled = particleEffectsEnabled; if (particleEffectsEnabled) { particleButton.text.setText('✨ Partikül Efektleri: Açık'); particleButton.bg.tint = 0x27ae60; } else { particleButton.text.setText('✨ Partikül Efektleri: Kapalı'); particleButton.bg.tint = 0xe74c3c; } }; currentMenu.addChild(particleButton); // Screen effects button var screenEffectsEnabled = storage.screenEffectsEnabled !== undefined ? storage.screenEffectsEnabled : true; var screenButton = new MenuButton(screenEffectsEnabled ? '💥 Ekran Efektleri: Açık' : '💥 Ekran Efektleri: Kapalı', screenEffectsEnabled ? 0x27ae60 : 0xe74c3c); screenButton.x = 2048 / 2; screenButton.y = 1950; screenButton.onClick = function () { LK.getSound('Click').play(); screenEffectsEnabled = !screenEffectsEnabled; storage.screenEffectsEnabled = screenEffectsEnabled; if (screenEffectsEnabled) { screenButton.text.setText('💥 Ekran Efektleri: Açık'); screenButton.bg.tint = 0x27ae60; } else { screenButton.text.setText('💥 Ekran Efektleri: Kapalı'); screenButton.bg.tint = 0xe74c3c; } }; currentMenu.addChild(screenButton); // Animation quality button var animationQuality = storage.animationQuality || 'High'; var animationButton = new MenuButton('🎭 Animasyon Kalitesi: ' + animationQuality, 0x9b59b6); animationButton.x = 2048 / 2; animationButton.y = 2100; animationButton.onClick = function () { LK.getSound('Click').play(); var qualities = ['Low', 'Medium', 'High']; var currentIndex = qualities.indexOf(animationQuality); animationQuality = qualities[(currentIndex + 1) % qualities.length]; storage.animationQuality = animationQuality; animationButton.text.setText('🎭 Animasyon Kalitesi: ' + animationQuality); var colors = [0x95a5a6, 0xf39c12, 0x9b59b6]; animationButton.bg.tint = colors[qualities.indexOf(animationQuality)]; }; currentMenu.addChild(animationButton); // Enhanced back button with improved styling var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2250; // Add subtle animation to the back button tween(backButton, { alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(backButton, { alpha: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat animation if (gameState === 'settings') { tween(backButton, { alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut }); } } }); } }); backButton.onClick = function () { LK.getSound('Click').play(); // Add visual feedback on click tween(backButton.bg, { tint: 0x2c3e50 }, { duration: 100, onFinish: function onFinish() { tween(backButton.bg, { tint: 0x34495e }, { duration: 100 }); } }); createMainMenu(); }; currentMenu.addChild(backButton); } function showStatistics() { gameState = 'statistics'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Statistics title var statisticsTitle = new Text2('İSTATİSTİKLERİM', { size: 80, fill: 0x6c5ce7 }); statisticsTitle.anchor.set(0.5, 0.5); statisticsTitle.x = 2048 / 2; statisticsTitle.y = 500; currentMenu.addChild(statisticsTitle); // High score section var highScoreTitle = new Text2('🏆 EN YÜKSEK SKOR', { size: 60, fill: 0xf1c40f }); highScoreTitle.anchor.set(0.5, 0.5); highScoreTitle.x = 2048 / 2; highScoreTitle.y = 700; currentMenu.addChild(highScoreTitle); var highScoreValue = new Text2(highScore.toString(), { size: 80, fill: 0xFFFFFF }); highScoreValue.anchor.set(0.5, 0.5); highScoreValue.x = 2048 / 2; highScoreValue.y = 800; currentMenu.addChild(highScoreValue); // Total game time section var gameTimeTitle = new Text2('⏰ TOPLAM OYUN SÜRESİ', { size: 60, fill: 0x9b59b6 }); gameTimeTitle.anchor.set(0.5, 0.5); gameTimeTitle.x = 2048 / 2; gameTimeTitle.y = 1000; currentMenu.addChild(gameTimeTitle); // Get the most current total time from storage var currentTotalTime = storage.totalGameTime || 0; var gameTimeValue = new Text2(formatGameTime(currentTotalTime), { size: 70, fill: 0xFFFFFF }); gameTimeValue.anchor.set(0.5, 0.5); gameTimeValue.x = 2048 / 2; gameTimeValue.y = 1120; currentMenu.addChild(gameTimeValue); // Achievement section var achievementsTitle = new Text2('🎯 BAŞARILARINIZ', { size: 60, fill: 0x27ae60 }); achievementsTitle.anchor.set(0.5, 0.5); achievementsTitle.x = 2048 / 2; achievementsTitle.y = 1320; currentMenu.addChild(achievementsTitle); // Show achievements based on high score var achievementText = ''; if (highScore >= 1000) { achievementText = '• Efsane Oyuncu: 1000+ puan\n• Usta Oyuncu: 500+ puan\n• Deneyimli Oyuncu: 100+ puan\n• Başlangıç: İlk oyun'; } else if (highScore >= 500) { achievementText = '• Usta Oyuncu: 500+ puan\n• Deneyimli Oyuncu: 100+ puan\n• Başlangıç: İlk oyun'; } else if (highScore >= 100) { achievementText = '• Deneyimli Oyuncu: 100+ puan\n• Başlangıç: İlk oyun'; } else if (highScore > 0) { achievementText = '• Başlangıç: İlk oyun'; } else { achievementText = 'Henüz hiç oynamadınız!\nOyuna başlayarak ilk başarımınızı kazanın.'; } var achievementsList = new Text2(achievementText, { size: 45, fill: 0xecf0f1 }); achievementsList.anchor.set(0.5, 0.5); achievementsList.x = 2048 / 2; achievementsList.y = 1480; currentMenu.addChild(achievementsList); // Progress section var progressTitle = new Text2('📊 SONRAKI BAŞARIM', { size: 60, fill: 0x3498db }); progressTitle.anchor.set(0.5, 0.5); progressTitle.x = 2048 / 2; progressTitle.y = 1680; currentMenu.addChild(progressTitle); var nextGoal = ''; if (highScore < 100) { nextGoal = 'Deneyimli Oyuncu için ' + (100 - highScore) + ' puan daha'; } else if (highScore < 500) { nextGoal = 'Usta Oyuncu için ' + (500 - highScore) + ' puan daha'; } else if (highScore < 1000) { nextGoal = 'Efsane Oyuncu için ' + (1000 - highScore) + ' puan daha'; } else { nextGoal = 'Tüm başarımları tamamladınız!'; } var nextGoalText = new Text2(nextGoal, { size: 50, fill: 0xbdc3c7 }); nextGoalText.anchor.set(0.5, 0.5); nextGoalText.x = 2048 / 2; nextGoalText.y = 1780; currentMenu.addChild(nextGoalText); // Back button var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2000; backButton.onClick = function () { LK.getSound('Click').play(); createMainMenu(); }; currentMenu.addChild(backButton); } function showCreators() { gameState = 'creators'; // Stop background music and play Creators music LK.stopMusic(); LK.playMusic('Creators'); // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Creators title with animated styling var creatorsTitle = new Text2('🎮 YAPIMCILAR 🎮', { size: 90, fill: 0xff6b6b }); creatorsTitle.anchor.set(0.5, 0.5); creatorsTitle.x = 2048 / 2; creatorsTitle.y = 500; currentMenu.addChild(creatorsTitle); // Animate title with color cycling var titleColors = [0xff6b6b, 0xfeca57, 0x4da6ff, 0x9b59b6]; // Red, Yellow, Blue, Purple var currentColorIndex = 0; function animateCreatorsTitle() { currentColorIndex = (currentColorIndex + 1) % titleColors.length; tween(creatorsTitle, { tint: titleColors[currentColorIndex], scaleX: 1.1, scaleY: 1.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(creatorsTitle, { scaleX: 1, scaleY: 1 }, { duration: 500, onFinish: animateCreatorsTitle }); } }); } animateCreatorsTitle(); // Game development section var gameDevTitle = new Text2('🎯 OYUN GELİŞTİRME EKİBİ', { size: 65, fill: 0xf1c40f }); gameDevTitle.anchor.set(0.5, 0.5); gameDevTitle.x = 2048 / 2; gameDevTitle.y = 700; currentMenu.addChild(gameDevTitle); // Lead developer var leadDeveloperText = new Text2('👨💻 Ana Geliştirici: Şafak\n\n🔧 Oyun Motoru: FRVR LK Engine\n💻 Programlama: JavaScript\n🎨 Grafik Tasarım: Dijital Sanat', { size: 50, fill: 0xFFFFFF }); leadDeveloperText.anchor.set(0.5, 0.5); leadDeveloperText.x = 2048 / 2; leadDeveloperText.y = 950; currentMenu.addChild(leadDeveloperText); // Special thanks section var thanksTitle = new Text2('🙏 TEŞEKKÜRLER', { size: 60, fill: 0x27ae60 }); thanksTitle.anchor.set(0.5, 0.5); thanksTitle.x = 2048 / 2; thanksTitle.y = 1200; currentMenu.addChild(thanksTitle); var thanksText = new Text2('• FRVR oyun platformu ve geliştirme araçları\n• Oyuncularımızın değerli geri bildirimleri\n• Beta test sürecindeki katkıları\n• Müzik ve ses efektleri için açık kaynak topluluk', { size: 45, fill: 0xecf0f1 }); thanksText.anchor.set(0.5, 0.5); thanksText.x = 2048 / 2; thanksText.y = 1400; currentMenu.addChild(thanksText); // Game info section var gameInfoTitle = new Text2('ℹ️ OYUN BİLGİLERİ', { size: 60, fill: 0x3498db }); gameInfoTitle.anchor.set(0.5, 0.5); gameInfoTitle.x = 2048 / 2; gameInfoTitle.y = 1600; currentMenu.addChild(gameInfoTitle); var gameInfoText = new Text2('📅 Geliştirme Başlangıcı: 2024\n🎮 Platform: FRVR\n📱 Desteklenen Cihazlar: Mobil & Masaüstü\n🌍 Dil Desteği: Türkçe', { size: 45, fill: 0xbdc3c7 }); gameInfoText.anchor.set(0.5, 0.5); gameInfoText.x = 2048 / 2; gameInfoText.y = 1780; currentMenu.addChild(gameInfoText); // Contact section var contactTitle = new Text2('📞 İLETİŞİM', { size: 60, fill: 0xe67e22 }); contactTitle.anchor.set(0.5, 0.5); contactTitle.x = 2048 / 2; contactTitle.y = 1980; currentMenu.addChild(contactTitle); var contactText = new Text2('Geri bildirimleriniz ve önerileriniz için:\n🎮 FRVR platform üzerinden mesaj gönderebilirsiniz', { size: 45, fill: 0x95a5a6 }); contactText.anchor.set(0.5, 0.5); contactText.x = 2048 / 2; contactText.y = 2100; currentMenu.addChild(contactText); // Back button var backButton = new MenuButton('🔙 ANA MENÜYE DÖN', 0x95a5a6); backButton.x = 2048 / 2; backButton.y = 2300; backButton.onClick = function () { LK.getSound('Click').play(); // Stop Creators music and restore background music if enabled LK.stopMusic(); if (musicEnabled) { LK.playMusic('Background'); } createMainMenu(); }; currentMenu.addChild(backButton); } // Check if user is already logged in var userLoggedIn = storage.userLoggedIn || false; // Create login screen function function createLoginScreen() { gameState = 'login'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Play main menu background music if (musicEnabled) { LK.playMusic('Mainmenubackground'); } // Login screen title var titleText = new Text2('TOPLARI YAKALA', { size: 100, fill: 0xffff00 }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 600; currentMenu.addChild(titleText); // Welcome text var welcomeText = new Text2('OYUNA HOŞGELDİNİZ', { size: 60, fill: 0xFFFFFF }); welcomeText.anchor.set(0.5, 0.5); welcomeText.x = 2048 / 2; welcomeText.y = 800; currentMenu.addChild(welcomeText); // Guest login button var guestButton = new MenuButton('👤 MİSAFİR OLARAK GİRİŞ YAP', 0x27ae60); guestButton.x = 2048 / 2; guestButton.y = 1200; // Enhanced guest button animations function pulseGuestButton() { tween(guestButton, { scaleX: 1.1, scaleY: 1.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(guestButton, { scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: pulseGuestButton }); } }); } // Color cycling animation var guestColors = [0x27ae60, 0x2ecc71, 0x1abc9c, 0x16a085]; var currentGuestColorIndex = 0; function animateGuestButton() { currentGuestColorIndex = (currentGuestColorIndex + 1) % guestColors.length; tween(guestButton.bg, { tint: guestColors[currentGuestColorIndex] }, { duration: 800, easing: tween.easeInOut, onFinish: animateGuestButton }); } // Start animations pulseGuestButton(); animateGuestButton(); guestButton.onClick = function () { LK.getSound('Click').play(); // Save guest login status storage.userLoggedIn = true; storage.loginType = 'guest'; userLoggedIn = true; // Enhanced click animation tween(guestButton, { scaleX: 1.2, scaleY: 1.2, rotation: Math.PI * 0.05 }, { duration: 150, easing: tween.bounceOut, onFinish: function onFinish() { tween(guestButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { createMainMenu(); } }); } }); }; currentMenu.addChild(guestButton); // Register button var registerButton = new MenuButton('📝 KAYIT OL', 0x3498db); registerButton.x = 2048 / 2; registerButton.y = 1400; // Enhanced register button animations function pulseRegisterButton() { tween(registerButton, { scaleX: 1.08, scaleY: 1.08 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { tween(registerButton, { scaleX: 1, scaleY: 1 }, { duration: 1200, easing: tween.easeInOut, onFinish: pulseRegisterButton }); } }); } // Color cycling for register button var registerColors = [0x3498db, 0x2980b9, 0x9b59b6, 0x8e44ad]; var currentRegisterColorIndex = 0; function animateRegisterButton() { currentRegisterColorIndex = (currentRegisterColorIndex + 1) % registerColors.length; tween(registerButton.bg, { tint: registerColors[currentRegisterColorIndex] }, { duration: 1000, easing: tween.easeInOut, onFinish: animateRegisterButton }); } // Start animations pulseRegisterButton(); animateRegisterButton(); registerButton.onClick = function () { LK.getSound('Click').play(); // Enhanced click animation tween(registerButton, { scaleX: 1.3, scaleY: 1.3, rotation: Math.PI * 0.1 }, { duration: 200, easing: tween.bounceOut, onFinish: function onFinish() { tween(registerButton, { scaleX: 1, scaleY: 1, rotation: 0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { // Show register screen or message showRegisterInfo(); } }); } }); }; currentMenu.addChild(registerButton); // Privacy and Security Section var privacyTitle = new Text2('🔒 GÜVENLİK VE GİZLİLİK', { size: 50, fill: 0x27ae60 }); privacyTitle.anchor.set(0.5, 0.5); privacyTitle.x = 2048 / 2; privacyTitle.y = 1600; currentMenu.addChild(privacyTitle); // Secure connection indicator var secureConnectionText = new Text2('🔐 Güvenli Bağlantı Aktif', { size: 35, fill: 0x27ae60 }); secureConnectionText.anchor.set(0.5, 0.5); secureConnectionText.x = 2048 / 2; secureConnectionText.y = 1680; currentMenu.addChild(secureConnectionText); // Privacy policy link var privacyPolicyButton = new MenuButton('📄 Gizlilik Politikası', 0x3498db); privacyPolicyButton.x = 2048 / 4; privacyPolicyButton.y = 1780; privacyPolicyButton.onClick = function () { LK.getSound('Click').play(); showPrivacyPolicy(); }; currentMenu.addChild(privacyPolicyButton); // Terms of service link var termsButton = new MenuButton('📋 Kullanım Şartları', 0x9b59b6); termsButton.x = 2048 * 3 / 4; termsButton.y = 1780; termsButton.onClick = function () { LK.getSound('Click').play(); showTermsOfService(); }; currentMenu.addChild(termsButton); // Social proof and trust section var socialProofTitle = new Text2('🏆 OYUNCU İSTATİSTİKLERİ', { size: 50, fill: 0x27ae60 }); socialProofTitle.anchor.set(0.5, 0.5); socialProofTitle.x = 2048 / 2; socialProofTitle.y = 1880; currentMenu.addChild(socialProofTitle); // User statistics with animated counters var userStatsText = new Text2('📊 50.000+ Kayıtlı Oyuncu\n🎯 En Yüksek Skor: 15.000 Puan\n🎮 Bu Hafta: 2.500+ Aktif Oyuncu', { size: 42, fill: 0xFFFFFF }); userStatsText.anchor.set(0.5, 0.5); userStatsText.x = 2048 / 2; userStatsText.y = 1980; currentMenu.addChild(userStatsText); // Add pulsing animation to statistics tween(userStatsText, { alpha: 0.7 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(userStatsText, { alpha: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { if (gameState === 'login') { tween(userStatsText, { alpha: 0.7 }, { duration: 1500, easing: tween.easeInOut }); } } }); } }); // Rating system display var ratingText = new Text2('⭐⭐⭐⭐⭐ (4.8/5) - 2.500 Değerlendirme', { size: 45, fill: 0xf1c40f }); ratingText.anchor.set(0.5, 0.5); ratingText.x = 2048 / 2; ratingText.y = 2120; currentMenu.addChild(ratingText); // Animate rating with golden glow effect tween(ratingText, { tint: 0xfeca57, scaleX: 1.05, scaleY: 1.05 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { tween(ratingText, { tint: 0xf1c40f, scaleX: 1, scaleY: 1 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { if (gameState === 'login') { tween(ratingText, { tint: 0xfeca57, scaleX: 1.05, scaleY: 1.05 }, { duration: 1200, easing: tween.easeInOut }); } } }); } }); // Security certificates display var securityText = new Text2('🔒 SSL Güvenli • 🛡️ Veri Koruması Sertifikası • ✅ GDPR Uyumlu', { size: 38, fill: 0x27ae60 }); securityText.anchor.set(0.5, 0.5); securityText.x = 2048 / 2; securityText.y = 2220; currentMenu.addChild(securityText); // Social Media and Community Section var socialTitle = new Text2('🌐 SOSYAL MEDYA VE TOPLULUK', { size: 50, fill: 0x3498db }); socialTitle.anchor.set(0.5, 0.5); socialTitle.x = 2048 / 2; socialTitle.y = 2340; currentMenu.addChild(socialTitle); // Social media buttons row var facebookButton = new MenuButton('📘 Facebook', 0x4267B2); facebookButton.x = 2048 / 4; facebookButton.y = 2450; // Scale down social buttons facebookButton.scaleX = 0.8; facebookButton.scaleY = 0.8; facebookButton.onClick = function () { LK.getSound('Click').play(); // Simulate opening Facebook page LK.effects.flashScreen(0x4267B2, 300); }; currentMenu.addChild(facebookButton); var twitterButton = new MenuButton('🐦 Twitter', 0x1DA1F2); twitterButton.x = 2048 * 3 / 4; twitterButton.y = 2450; // Scale down social buttons twitterButton.scaleX = 0.8; twitterButton.scaleY = 0.8; twitterButton.onClick = function () { LK.getSound('Click').play(); // Simulate opening Twitter page LK.effects.flashScreen(0x1DA1F2, 300); }; currentMenu.addChild(twitterButton); // Friend invitation feature var inviteFriendsButton = new MenuButton('👥 ARKADAŞLARI DAVET ET', 0x27ae60); inviteFriendsButton.x = 2048 / 2; inviteFriendsButton.y = 2570; // Enhanced invite button animations function pulseInviteButton() { tween(inviteFriendsButton, { scaleX: 1.05, scaleY: 1.05 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(inviteFriendsButton, { scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: pulseInviteButton }); } }); } pulseInviteButton(); inviteFriendsButton.onClick = function () { LK.getSound('Click').play(); // Show friend invitation screen showFriendInvitation(); }; currentMenu.addChild(inviteFriendsButton); // Community links var communityButton = new MenuButton('💬 TOPLULUK - Discord', 0x7289DA); communityButton.x = 2048 / 2; communityButton.y = 2690; communityButton.onClick = function () { LK.getSound('Click').play(); // Simulate opening Discord community LK.effects.flashScreen(0x7289DA, 300); }; currentMenu.addChild(communityButton); // Info text var infoText = new Text2('Misafir girişi ile tüm özelliklere erişebilirsiniz.\nKayıt olarak ilerlemenizi kaybetmeden oynayabilirsiniz.', { size: 40, fill: 0xbdc3c7 }); infoText.anchor.set(0.5, 0.5); infoText.x = 2048 / 2; infoText.y = 2800; currentMenu.addChild(infoText); } // Function to show register information function showRegisterInfo() { // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Title var titleText = new Text2('KAYIT OL', { size: 80, fill: 0x3498db }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 600; currentMenu.addChild(titleText); // Info message var infoText = new Text2('Kayıt özelliği yakında gelecek!\n\nŞu an için misafir girişi ile\ntüm oyun özelliklerini kullanabilirsiniz.', { size: 50, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0.5); infoText.x = 2048 / 2; infoText.y = 1000; currentMenu.addChild(infoText); // Social proof section for registration var socialProofTitle = new Text2('🌟 NEDEN BİZE GÜVENİYORLAR?', { size: 55, fill: 0x3498db }); socialProofTitle.anchor.set(0.5, 0.5); socialProofTitle.x = 2048 / 2; socialProofTitle.y = 1200; currentMenu.addChild(socialProofTitle); // Trust indicators with animated effects var trustText = new Text2('👥 50.000+ Güvenli Kullanıcı\n⭐ 4.8/5 Kullanıcı Memnuniyeti\n🏆 "En İyi Mobil Oyun" Ödülü\n🔒 %100 Güvenli Veri Saklama', { size: 45, fill: 0x27ae60 }); trustText.anchor.set(0.5, 0.5); trustText.x = 2048 / 2; trustText.y = 1350; currentMenu.addChild(trustText); // Add trust badge glow animation tween(trustText, { alpha: 0.8, scaleX: 1.02, scaleY: 1.02 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(trustText, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { if (gameState === 'register') { tween(trustText, { alpha: 0.8, scaleX: 1.02, scaleY: 1.02 }, { duration: 1000, easing: tween.easeInOut }); } } }); } }); // Registration benefits var benefitsText = new Text2('KAYIT AVANTAJLARI:\n• ☁️ İlerlemeniz bulutta saklanacak\n• 🏆 Başarımlarınız kalıcı olacak\n• 📊 Liderlik tablosunda yer alacaksınız\n• 🎁 Özel kayıt bonusu alacaksınız', { size: 42, fill: 0xFFFFFF }); benefitsText.anchor.set(0.5, 0.5); benefitsText.x = 2048 / 2; benefitsText.y = 1550; currentMenu.addChild(benefitsText); // Temporary guest login button var tempGuestButton = new MenuButton('👤 MİSAFİR GİRİŞİ YAP', 0x27ae60); tempGuestButton.x = 2048 / 2; tempGuestButton.y = 1700; tempGuestButton.onClick = function () { LK.getSound('Click').play(); storage.userLoggedIn = true; storage.loginType = 'guest'; userLoggedIn = true; createMainMenu(); }; currentMenu.addChild(tempGuestButton); // Privacy and Security Links var privacyLinksTitle = new Text2('📋 YASAL BELGELER', { size: 50, fill: 0x3498db }); privacyLinksTitle.anchor.set(0.5, 0.5); privacyLinksTitle.x = 2048 / 2; privacyLinksTitle.y = 1800; currentMenu.addChild(privacyLinksTitle); // Privacy policy link var privacyPolicyButton = new MenuButton('📄 Gizlilik Politikası', 0x3498db); privacyPolicyButton.x = 2048 / 4; privacyPolicyButton.y = 1900; privacyPolicyButton.onClick = function () { LK.getSound('Click').play(); showPrivacyPolicy(); }; currentMenu.addChild(privacyPolicyButton); // Terms of service link var termsButton = new MenuButton('📋 Kullanım Şartları', 0x9b59b6); termsButton.x = 2048 * 3 / 4; termsButton.y = 1900; termsButton.onClick = function () { LK.getSound('Click').play(); showTermsOfService(); }; currentMenu.addChild(termsButton); // Back button var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2150; backButton.onClick = function () { LK.getSound('Click').play(); createLoginScreen(); }; currentMenu.addChild(backButton); } // Always show login screen every time the game starts createLoginScreen(); // Spawn falling shapes function spawnShape() { var randomColor = colors[Math.floor(Math.random() * colors.length)]; var shape = new FallingShape(randomColor); shape.x = Math.random() * (2048 - 160) + 80; shape.y = -80; // Apply difficulty and speed settings to shape speed var baseFallSpeed = difficultyLevel === 'Easy' ? 2 : difficultyLevel === 'Hard' ? 4 : 3; var speedMultiplier = gameSpeedSetting === 'Slow' ? 0.7 : gameSpeedSetting === 'Fast' ? 1.3 : 1.0; shape.speed = baseFallSpeed * speedMultiplier + gameSpeed * 0.5; // Apply slow motion effect if active if (slowMotionActive) { shape.speed *= 0.5; } // Add beautiful entrance animation based on quality settings var animationQuality = storage.animationQuality || 'High'; if (animationQuality !== 'Low') { // Start with small scale and fade in shape.scaleX = 0.1; shape.scaleY = 0.1; shape.alpha = 0; // Animate scale with bounce effect var animDuration = animationQuality === 'Medium' ? 200 : 300; tween(shape, { scaleX: 1.2, scaleY: 1.2, alpha: 1 }, { duration: animDuration, easing: tween.bounceOut, onFinish: function onFinish() { tween(shape, { scaleX: 1, scaleY: 1 }, { duration: animDuration * 0.67, easing: tween.easeOut }); } }); // Add subtle rotation animation only on high quality if (animationQuality === 'High') { tween(shape, { rotation: Math.PI * 0.1 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(shape, { rotation: -Math.PI * 0.1 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { // Continue subtle rotation loop if (shape.parent) { tween(shape, { rotation: 0 }, { duration: 400, easing: tween.easeInOut }); } } }); } }); } } fallingShapes.push(shape); game.addChild(shape); } // Handle touch/mouse events function handleMove(x, y, obj) { if (gameState === 'playing' && draggedBasket) { draggedBasket.x = Math.max(100, Math.min(1948, x)); } } game.move = handleMove; game.down = function (x, y, obj) { // Only handle basket dragging during gameplay if (gameState !== 'playing') { return; } // Check if touch is on any basket for (var i = 0; i < baskets.length; i++) { var basket = baskets[i]; var dx = x - basket.x; var dy = y - basket.y; if (Math.abs(dx) < 100 && Math.abs(dy) < 60) { draggedBasket = basket; break; } } }; game.up = function (x, y, obj) { draggedBasket = null; }; // Main game loop var shapeSpawnTimer = 0; var difficultyTimer = 0; game.update = function () { // Update background particles (always running) var particleEffectsEnabled = storage.particleEffectsEnabled !== undefined ? storage.particleEffectsEnabled : true; if (particleEffectsEnabled) { particleSpawnTimer++; var spawnRate = storage.animationQuality === 'Low' ? 40 : storage.animationQuality === 'Medium' ? 30 : 20; if (particleSpawnTimer >= spawnRate) { // Spawn particle every spawnRate frames var particle = new BackgroundParticle(); particle.x = Math.random() * 2048; particle.y = 2732 + 50; // Start below screen backgroundParticles.push(particle); backgroundContainer.addChild(particle); particleSpawnTimer = 0; } } // Update and clean up particles for (var p = backgroundParticles.length - 1; p >= 0; p--) { var particle = backgroundParticles[p]; if (particle.shouldRemove) { particle.destroy(); backgroundParticles.splice(p, 1); } } // Only run game logic when actually playing and not paused if (gameState !== 'playing' || gamePaused) { return; } // Update power-up timers if (slowMotionActive) { slowMotionTimer--; if (slowMotionTimer <= 0) { slowMotionActive = false; updateBallDisplay(); } } if (doublePointsActive) { doublePointsTimer--; if (doublePointsTimer <= 0) { doublePointsActive = false; updateBallDisplay(); } } // Spawn power-ups occasionally powerUpSpawnTimer++; if (powerUpSpawnTimer >= 900) { // Every 15 seconds if (Math.random() < 0.7) { // 70% chance to spawn var powerUpType = Math.random() < 0.5 ? 'slowMotion' : 'doublePoints'; var powerUp = new PowerUp(powerUpType); powerUp.x = Math.random() * (2048 - 120) + 60; powerUp.y = -60; powerUps.push(powerUp); game.addChild(powerUp); } powerUpSpawnTimer = 0; } // Update power-ups for (var p = powerUps.length - 1; p >= 0; p--) { var powerUp = powerUps[p]; // Check if power-up went off screen if (powerUp.lastY < 2732 && powerUp.y >= 2732) { powerUp.destroy(); powerUps.splice(p, 1); continue; } // Check collision with baskets for (var j = 0; j < baskets.length; j++) { var basket = baskets[j]; if (powerUp.intersects(basket)) { // Activate power-up LK.getSound('powerup').play(); if (powerUp.type === 'slowMotion') { slowMotionActive = true; slowMotionTimer = 600; // 10 seconds } else if (powerUp.type === 'doublePoints') { doublePointsActive = true; doublePointsTimer = 600; // 10 seconds } updateBallDisplay(); // Visual effect LK.effects.flashScreen(powerUp.type === 'slowMotion' ? 0x3498db : 0xf1c40f, 300); powerUp.destroy(); powerUps.splice(p, 1); break; } } } // Spawn shapes shapeSpawnTimer++; // Calculate spawn interval based on difficulty and slow motion var baseInterval = difficultyLevel === 'Easy' ? 150 : difficultyLevel === 'Hard' ? 90 : 120; var spawnInterval = Math.max(30, baseInterval - gameSpeed * 10); if (slowMotionActive) { spawnInterval *= 1.5; // Slow down spawning during slow motion } if (shapeSpawnTimer >= spawnInterval) { spawnShape(); shapeSpawnTimer = 0; } // Update difficulty difficultyTimer++; if (difficultyTimer >= 600) { // Every 10 seconds gameSpeed += 0.2; difficultyTimer = 0; } // Update falling shapes for (var i = fallingShapes.length - 1; i >= 0; i--) { var shape = fallingShapes[i]; // Check if shape went off screen if (shape.lastY < 2732 && shape.y >= 2732) { // Shape missed - game over // Save final game time if (sessionStartTime > 0) { var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000); totalGameTime = (storage.totalGameTime || 0) + sessionTime; storage.totalGameTime = totalGameTime; sessionStartTime = 0; // Reset session start time } // Save high score if current score is higher if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.getSound('miss').play(); var screenEffectsEnabled = storage.screenEffectsEnabled !== undefined ? storage.screenEffectsEnabled : true; if (screenEffectsEnabled) { LK.effects.flashScreen(0xff0000, 500); } LK.showGameOver(); return; } // Check collision with baskets var caught = false; for (var j = 0; j < baskets.length; j++) { var basket = baskets[j]; if (shape.intersects(basket)) { if (shape.color === basket.color) { // Correct match consecutiveMatches++; var points = 10 + consecutiveMatches * 2; // Apply double points if active if (doublePointsActive) { points *= 2; } LK.setScore(LK.getScore() + points); scoreTxt.setText(LK.getScore()); // Update ball collection count ballsCollected[shape.color]++; storage[shape.color + 'BallsCollected'] = ballsCollected[shape.color]; updateBallDisplay(); // Check if all requirements are met if (ballsCollected.red >= ballRequirements.red && ballsCollected.blue >= ballRequirements.blue && ballsCollected.yellow >= ballRequirements.yellow) { // If this is level 2 (final level), show you win if (currentLevel === 2) { // Save final game time if (sessionStartTime > 0) { var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000); totalGameTime = (storage.totalGameTime || 0) + sessionTime; storage.totalGameTime = totalGameTime; sessionStartTime = 0; } // Save high score if current score is higher if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.showYouWin(); } else { showLevelComplete(); } return; } LK.getSound('catch').play(); LK.getSound('basketball').play(); // Visual feedback tween(basket, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, onFinish: function onFinish() { tween(basket, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); } else { // Wrong color - game over consecutiveMatches = 0; // Save final game time if (sessionStartTime > 0) { var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000); totalGameTime = (storage.totalGameTime || 0) + sessionTime; storage.totalGameTime = totalGameTime; sessionStartTime = 0; // Reset session start time } // Save high score if current score is higher if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.getSound('miss').play(); var screenEffectsEnabled = storage.screenEffectsEnabled !== undefined ? storage.screenEffectsEnabled : true; if (screenEffectsEnabled) { LK.effects.flashScreen(0xff0000, 500); } LK.showGameOver(); return; } shape.destroy(); fallingShapes.splice(i, 1); caught = true; break; } } // Remove shapes that went too far down without being caught if (!caught && shape.y > 2800) { shape.destroy(); fallingShapes.splice(i, 1); } } }; function showLevelComplete() { gameState = 'levelcomplete'; // Save final game time if (sessionStartTime > 0) { var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000); totalGameTime = (storage.totalGameTime || 0) + sessionTime; storage.totalGameTime = totalGameTime; sessionStartTime = 0; } // Save high score if current score is higher if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } // Save current level progress currentLevel++; storage.currentLevel = currentLevel; levelCompleted = true; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Level complete title with animation var completeTitle = new Text2('BÖLÜM ' + (currentLevel - 1) + ' TAMAMLANDI!', { size: 90, fill: 0x27ae60 }); completeTitle.anchor.set(0.5, 0.5); completeTitle.x = 2048 / 2; completeTitle.y = 600; currentMenu.addChild(completeTitle); // Animate title with celebration effect tween(completeTitle, { scaleX: 1.2, scaleY: 1.2, tint: 0xf1c40f }, { duration: 500, easing: tween.bounceOut, onFinish: function onFinish() { tween(completeTitle, { scaleX: 1, scaleY: 1, tint: 0x27ae60 }, { duration: 300, easing: tween.easeOut }); } }); // Score section var scoreTitle = new Text2('KAZANDIĞINIZ PUAN', { size: 60, fill: 0xf1c40f }); scoreTitle.anchor.set(0.5, 0.5); scoreTitle.x = 2048 / 2; scoreTitle.y = 900; currentMenu.addChild(scoreTitle); var scoreValue = new Text2(LK.getScore().toString(), { size: 100, fill: 0xFFFFFF }); scoreValue.anchor.set(0.5, 0.5); scoreValue.x = 2048 / 2; scoreValue.y = 1020; currentMenu.addChild(scoreValue); // Next level preview var nextLevelTitle = new Text2('BÖLÜM ' + currentLevel + ' HAZIR!', { size: 70, fill: 0x3498db }); nextLevelTitle.anchor.set(0.5, 0.5); nextLevelTitle.x = 2048 / 2; nextLevelTitle.y = 1250; currentMenu.addChild(nextLevelTitle); var nextLevelDesc = new Text2('Yeni bölümde daha hızlı şekiller\nve daha zorlu hedefler sizi bekliyor!', { size: 50, fill: 0xecf0f1 }); nextLevelDesc.anchor.set(0.5, 0.5); nextLevelDesc.x = 2048 / 2; nextLevelDesc.y = 1400; currentMenu.addChild(nextLevelDesc); // Progress celebration var progressText = new Text2('🎉 TEBRİKLER! 🎉\nYeni seviyeye ulaştınız!', { size: 55, fill: 0xff6b6b }); progressText.anchor.set(0.5, 0.5); progressText.x = 2048 / 2; progressText.y = 1600; currentMenu.addChild(progressText); // Buttons var nextLevelButton = new MenuButton('BÖLÜM ' + currentLevel + '\'E GEÇE', 0x27ae60); nextLevelButton.x = 2048 / 2; nextLevelButton.y = 1850; nextLevelButton.onClick = function () { LK.getSound('Click').play(); startNextLevel(); }; currentMenu.addChild(nextLevelButton); var menuButton = new MenuButton('ANA MENÜYE DÖN', 0x34495e); menuButton.x = 2048 / 2; menuButton.y = 2050; menuButton.onClick = function () { LK.getSound('Click').play(); createMainMenu(); }; currentMenu.addChild(menuButton); // Play celebration sound LK.getSound('Applause').play(); } function startNextLevel() { // Reset ball collection for new level ballsCollected.red = 0; ballsCollected.blue = 0; ballsCollected.yellow = 0; storage.redBallsCollected = 0; storage.blueBallsCollected = 0; storage.yellowBallsCollected = 0; // Set requirements based on level - level 2 is final level with 10 balls each if (currentLevel === 2) { ballRequirements.red = 10; ballRequirements.blue = 10; ballRequirements.yellow = 10; } else { ballRequirements.red = 5 + currentLevel; ballRequirements.blue = 5 + currentLevel; ballRequirements.yellow = 5 + currentLevel; } levelCompleted = false; startGame(); } function showPremiumStore() { gameState = 'premiumstore'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Store title with luxury styling var storeTitle = new Text2('🛍️ PREMİUM MAĞAZA', { size: 90, fill: 0xd63384 }); storeTitle.anchor.set(0.5, 0.5); storeTitle.x = 2048 / 2; storeTitle.y = 400; currentMenu.addChild(storeTitle); // Animate title with store colors var titleColors = [0xd63384, 0xf39c12, 0x3498db, 0x27ae60]; var currentColorIndex = 0; function animateStoreTitle() { currentColorIndex = (currentColorIndex + 1) % titleColors.length; tween(storeTitle, { tint: titleColors[currentColorIndex], scaleX: 1.1, scaleY: 1.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(storeTitle, { scaleX: 1, scaleY: 1 }, { duration: 400, onFinish: animateStoreTitle }); } }); } animateStoreTitle(); // Currency display var coinsOwned = storage.premiumCoins || 0; var currencyDisplay = new Text2('💰 Premium Coin: ' + coinsOwned, { size: 50, fill: 0xf1c40f }); currencyDisplay.anchor.set(0.5, 0.5); currencyDisplay.x = 2048 / 2; currencyDisplay.y = 550; currentMenu.addChild(currencyDisplay); // Store categories var categoriesTitle = new Text2('🏪 MAĞAZA KATEGORİLERİ', { size: 60, fill: 0x3498db }); categoriesTitle.anchor.set(0.5, 0.5); categoriesTitle.x = 2048 / 2; categoriesTitle.y = 700; currentMenu.addChild(categoriesTitle); // Item 1: Extra Lives var item1Button = new MenuButton('❤️ Ekstra Can (x5) - 50 Coin', storage.extraLives ? 0x27ae60 : 0xe74c3c); item1Button.x = 2048 / 2; item1Button.y = 900; item1Button.onClick = function () { LK.getSound('Click').play(); if (!storage.extraLives && coinsOwned >= 50) { storage.premiumCoins = coinsOwned - 50; storage.extraLives = true; LK.effects.flashScreen(0x27ae60, 500); showPremiumStore(); // Refresh store } }; currentMenu.addChild(item1Button); // Item 2: Double XP Boost var item2Button = new MenuButton('⚡ Çift XP Artırıcı - 75 Coin', storage.doubleXP ? 0x27ae60 : 0xf39c12); item2Button.x = 2048 / 2; item2Button.y = 1050; item2Button.onClick = function () { LK.getSound('Click').play(); if (!storage.doubleXP && coinsOwned >= 75) { storage.premiumCoins = coinsOwned - 75; storage.doubleXP = true; LK.effects.flashScreen(0xf39c12, 500); showPremiumStore(); // Refresh store } }; currentMenu.addChild(item2Button); // Item 3: Premium Themes var item3Button = new MenuButton('🎨 Premium Temalar - 100 Coin', storage.premiumThemes ? 0x27ae60 : 0x9b59b6); item3Button.x = 2048 / 2; item3Button.y = 1200; item3Button.onClick = function () { LK.getSound('Click').play(); if (!storage.premiumThemes && coinsOwned >= 100) { storage.premiumCoins = coinsOwned - 100; storage.premiumThemes = true; LK.effects.flashScreen(0x9b59b6, 500); showPremiumStore(); // Refresh store } }; currentMenu.addChild(item3Button); // Item 4: Exclusive Shapes var item4Button = new MenuButton('💎 Özel Şekiller - 125 Coin', storage.exclusiveShapes ? 0x27ae60 : 0x1abc9c); item4Button.x = 2048 / 2; item4Button.y = 1350; item4Button.onClick = function () { LK.getSound('Click').play(); if (!storage.exclusiveShapes && coinsOwned >= 125) { storage.premiumCoins = coinsOwned - 125; storage.exclusiveShapes = true; LK.effects.flashScreen(0x1abc9c, 500); showPremiumStore(); // Refresh store } }; currentMenu.addChild(item4Button); // Coin purchase section var coinPurchaseTitle = new Text2('💰 COİN SATIN AL', { size: 60, fill: 0xf1c40f }); coinPurchaseTitle.anchor.set(0.5, 0.5); coinPurchaseTitle.x = 2048 / 2; coinPurchaseTitle.y = 1550; currentMenu.addChild(coinPurchaseTitle); // Coin pack 1 var coinPack1 = new MenuButton('💰 100 Coin - ₺9.99', 0xf39c12); coinPack1.x = 2048 / 2; coinPack1.y = 1700; coinPack1.onClick = function () { LK.getSound('Click').play(); // Simulate purchase storage.premiumCoins = (storage.premiumCoins || 0) + 100; LK.effects.flashScreen(0xf1c40f, 500); showPremiumStore(); // Refresh store }; currentMenu.addChild(coinPack1); // Coin pack 2 var coinPack2 = new MenuButton('💰 250 Coin - ₺19.99 (En Popüler)', 0xe67e22); coinPack2.x = 2048 / 2; coinPack2.y = 1850; coinPack2.onClick = function () { LK.getSound('Click').play(); // Simulate purchase storage.premiumCoins = (storage.premiumCoins || 0) + 250; LK.effects.flashScreen(0xf1c40f, 500); showPremiumStore(); // Refresh store }; currentMenu.addChild(coinPack2); // Special offers section var offersTitle = new Text2('🎁 ÖZEL TEKLIFLER', { size: 60, fill: 0xe74c3c }); offersTitle.anchor.set(0.5, 0.5); offersTitle.x = 2048 / 2; offersTitle.y = 2050; currentMenu.addChild(offersTitle); var dailyOffer = new Text2('🌟 Günlük Teklif: %50 İndirim!\n💰 500 Coin - ₺29.99 (Normal: ₺59.98)', { size: 45, fill: 0xFFFFFF }); dailyOffer.anchor.set(0.5, 0.5); dailyOffer.x = 2048 / 2; dailyOffer.y = 2200; currentMenu.addChild(dailyOffer); // Daily offer button var dailyOfferButton = new MenuButton('🎁 Günlük Teklifi Al', 0xe74c3c); dailyOfferButton.x = 2048 / 2; dailyOfferButton.y = 2350; dailyOfferButton.onClick = function () { LK.getSound('Click').play(); // Simulate purchase storage.premiumCoins = (storage.premiumCoins || 0) + 500; LK.effects.flashScreen(0xe74c3c, 500); showPremiumStore(); // Refresh store }; currentMenu.addChild(dailyOfferButton); // Back button var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2500; backButton.onClick = function () { LK.getSound('Click').play(); createMainMenu(); }; currentMenu.addChild(backButton); } function showPremium() { gameState = 'premium'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Premium title with luxury styling var premiumTitle = new Text2('💎 PREMİUM GEÇİŞ', { size: 90, fill: 0xf1c40f }); premiumTitle.anchor.set(0.5, 0.5); premiumTitle.x = 2048 / 2; premiumTitle.y = 400; currentMenu.addChild(premiumTitle); // Animate title with gold effect var titleColors = [0xf1c40f, 0xfeca57, 0xff9500, 0xe67e22]; var currentColorIndex = 0; function animatePremiumTitle() { currentColorIndex = (currentColorIndex + 1) % titleColors.length; tween(premiumTitle, { tint: titleColors[currentColorIndex], scaleX: 1.1, scaleY: 1.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(premiumTitle, { scaleX: 1, scaleY: 1 }, { duration: 400, onFinish: animatePremiumTitle }); } }); } animatePremiumTitle(); // Premium benefits section var benefitsTitle = new Text2('🌟 PREMİUM AVANTAJLARI', { size: 60, fill: 0x27ae60 }); benefitsTitle.anchor.set(0.5, 0.5); benefitsTitle.x = 2048 / 2; benefitsTitle.y = 600; currentMenu.addChild(benefitsTitle); var benefitsList = new Text2('• ✨ Reklamsız oyun deneyimi\n• 🎵 Premium müzik koleksiyonu\n• 🎨 Özel sepet tasarımları\n• ⚡ Ekstra güç artırıcılar\n• 🏆 Premium liderlik tablosu\n• 🎁 Günlük bonus ödüller\n• 🎪 Özel oyun modları\n• ☁️ Bulut kayıt sistemi', { size: 45, fill: 0xFFFFFF }); benefitsList.anchor.set(0.5, 0.5); benefitsList.x = 2048 / 2; benefitsList.y = 850; currentMenu.addChild(benefitsList); // Pricing section var pricingTitle = new Text2('💰 FİYATLANDIRMA', { size: 60, fill: 0x3498db }); pricingTitle.anchor.set(0.5, 0.5); pricingTitle.x = 2048 / 2; pricingTitle.y = 1150; currentMenu.addChild(pricingTitle); // Check if user has premium status var hasPremium = storage.hasPremium || false; if (hasPremium) { var premiumStatus = new Text2('✅ Premium üyeliğiniz aktif!\nTüm özelliklerden faydalanabilirsiniz.', { size: 50, fill: 0x27ae60 }); premiumStatus.anchor.set(0.5, 0.5); premiumStatus.x = 2048 / 2; premiumStatus.y = 1300; currentMenu.addChild(premiumStatus); } else { var pricingOptions = new Text2('📅 Aylık: ₺9.99 - İlk ay ücretsiz!\n📊 3 Aylık: ₺24.99 - %17 indirim\n🎯 Yıllık: ₺79.99 - %33 indirim\n💎 Yaşam Boyu: ₺199.99 - Tek ödeme', { size: 45, fill: 0xecf0f1 }); pricingOptions.anchor.set(0.5, 0.5); pricingOptions.x = 2048 / 2; pricingOptions.y = 1350; currentMenu.addChild(pricingOptions); // Promotional banner var promoText = new Text2('🎉 ÖZEL KAMPANYA: İlk ay tamamen ücretsiz!', { size: 50, fill: 0xff6b6b }); promoText.anchor.set(0.5, 0.5); promoText.x = 2048 / 2; promoText.y = 1550; currentMenu.addChild(promoText); // Animate promo text tween(promoText, { scaleX: 1.1, scaleY: 1.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(promoText, { scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { if (gameState === 'premium') { tween(promoText, { scaleX: 1.1, scaleY: 1.1 }, { duration: 1000, easing: tween.easeInOut }); } } }); } }); // Purchase button var purchaseButton = new MenuButton('🛒 PREMİUM SATIN AL', 0x27ae60); purchaseButton.x = 2048 / 2; purchaseButton.y = 1750; purchaseButton.onClick = function () { LK.getSound('Click').play(); // Simulate purchase process storage.hasPremium = true; LK.effects.flashScreen(0xf1c40f, 1000); // Refresh premium screen to show activated status showPremium(); }; currentMenu.addChild(purchaseButton); } // Testimonials section var testimonialsTitle = new Text2('💬 KULLANICI YORUMLARI', { size: 60, fill: 0x9b59b6 }); testimonialsTitle.anchor.set(0.5, 0.5); testimonialsTitle.x = 2048 / 2; testimonialsTitle.y = hasPremium ? 1500 : 1950; currentMenu.addChild(testimonialsTitle); var testimonials = new Text2('⭐⭐⭐⭐⭐ "Premium ile oyun çok daha eğlenceli!" - Ayşe\n⭐⭐⭐⭐⭐ "Reklamsız deneyim harika!" - Mehmet\n⭐⭐⭐⭐⭐ "Özel tasarımlar çok güzel!" - Fatma', { size: 40, fill: 0xbdc3c7 }); testimonials.anchor.set(0.5, 0.5); testimonials.x = 2048 / 2; testimonials.y = hasPremium ? 1650 : 2100; currentMenu.addChild(testimonials); // Back button var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = hasPremium ? 1850 : 2300; backButton.onClick = function () { LK.getSound('Click').play(); createMainMenu(); }; currentMenu.addChild(backButton); } function showRecentUpdates() { gameState = 'recentupdates'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Title var updatesTitle = new Text2('🆕 OYUNA SON EKLENENLER', { size: 80, fill: 0x1abc9c }); updatesTitle.anchor.set(0.5, 0.5); updatesTitle.x = 2048 / 2; updatesTitle.y = 400; currentMenu.addChild(updatesTitle); // Version section var versionTitle = new Text2('📋 GÜNCEL VERSİYON: v1.2', { size: 60, fill: 0xf1c40f }); versionTitle.anchor.set(0.5, 0.5); versionTitle.x = 2048 / 2; versionTitle.y = 600; currentMenu.addChild(versionTitle); // Recent updates section var recentTitle = new Text2('⭐ YENİ ÖZELLİKLER', { size: 60, fill: 0x3498db }); recentTitle.anchor.set(0.5, 0.5); recentTitle.x = 2048 / 2; recentTitle.y = 800; currentMenu.addChild(recentTitle); var recentText = new Text2('• Bölüm sistemi eklendi (2 bölüm)\n• İstatistiklerim menüsü eklendi\n• Toplam oyun süresi takibi\n• Başarım sistemi geliştirildi\n• Ayarlar menüsü genişletildi\n• Ses efektleri iyileştirildi', { size: 45, fill: 0xFFFFFF }); recentText.anchor.set(0.5, 0.5); recentText.x = 2048 / 2; recentText.y = 980; currentMenu.addChild(recentText); // Improvements section var improvementsTitle = new Text2('🔧 İYİLEŞTİRMELER', { size: 60, fill: 0x27ae60 }); improvementsTitle.anchor.set(0.5, 0.5); improvementsTitle.x = 2048 / 2; improvementsTitle.y = 1200; currentMenu.addChild(improvementsTitle); var improvementsText = new Text2('• Oyun performansı optimize edildi\n• Menü geçişleri daha akıcı hale getirildi\n• Renk körü modu için hazırlık yapıldı\n• Dokunmatik kontroller iyileştirildi\n• Arka plan animasyonları güncellendi', { size: 45, fill: 0xecf0f1 }); improvementsText.anchor.set(0.5, 0.5); improvementsText.x = 2048 / 2; improvementsText.y = 1380; currentMenu.addChild(improvementsText); // Coming soon section var comingSoonTitle = new Text2('🚀 YAKINDA GELECEKLER', { size: 60, fill: 0xe67e22 }); comingSoonTitle.anchor.set(0.5, 0.5); comingSoonTitle.x = 2048 / 2; comingSoonTitle.y = 1600; currentMenu.addChild(comingSoonTitle); var comingSoonText = new Text2('• Günlük meydan okumalar\n• Farklı oyun modları\n• Liderlik tablosu\n• Sosyal paylaşım özellikleri\n• Yeni şekil türleri', { size: 45, fill: 0xbdc3c7 }); comingSoonText.anchor.set(0.5, 0.5); comingSoonText.x = 2048 / 2; comingSoonText.y = 1780; currentMenu.addChild(comingSoonText); // Bug fixes section var bugFixesTitle = new Text2('🐛 HATA DÜZELTMELERİ', { size: 60, fill: 0x9b59b6 }); bugFixesTitle.anchor.set(0.5, 0.5); bugFixesTitle.x = 2048 / 2; bugFixesTitle.y = 2000; currentMenu.addChild(bugFixesTitle); var bugFixesText = new Text2('• Oyun süresi hesaplama hatası düzeltildi\n• Sepet sürükleme hassasiyeti artırıldı\n• Menü butonları daha responsive\n• Müzik ayarları kaydetme sorunu çözüldü', { size: 45, fill: 0x95a5a6 }); bugFixesText.anchor.set(0.5, 0.5); bugFixesText.x = 2048 / 2; bugFixesText.y = 2140; currentMenu.addChild(bugFixesText); // Feature requests section var requestTitle = new Text2('💡 OYUNA GELMESİNİ İSTEDİKLERİNİZ', { size: 60, fill: 0xff6b6b }); requestTitle.anchor.set(0.5, 0.5); requestTitle.x = 2048 / 2; requestTitle.y = 2320; currentMenu.addChild(requestTitle); var requestText = new Text2('• Power-up özellikler (Slow Motion, Extra Points)\n• Farklı şekil türleri (Yıldız, Kalp, Üçgen)\n• Sezonluk temalar (Kış, Yaz, Bahar)\n• Çok oyunculu mod\n• Günlük görevler ve ödüller\n• Özelleştirilebilir sepet tasarımları', { size: 45, fill: 0xFFFFFF }); requestText.anchor.set(0.5, 0.5); requestText.x = 2048 / 2; requestText.y = 2500; currentMenu.addChild(requestText); // Add request submission info var submitInfo = new Text2('Sizin de eklemek istediğiniz özellikler var mı?\nFRVR platform üzerinden bize yazabilirsiniz!', { size: 40, fill: 0xbdc3c7 }); submitInfo.anchor.set(0.5, 0.5); submitInfo.x = 2048 / 2; submitInfo.y = 2730; currentMenu.addChild(submitInfo); // Back button var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e); backButton.x = 350; // Position on left side instead of center backButton.y = 1366; // Middle of screen height (2732/2) // Add subtle animation to the back button tween(backButton, { alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(backButton, { alpha: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { // Repeat animation if (gameState === 'recentupdates') { tween(backButton, { alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut }); } } }); } }); backButton.onClick = function () { LK.getSound('Click').play(); // Add visual feedback on click tween(backButton.bg, { tint: 0x2c3e50 }, { duration: 100, onFinish: function onFinish() { tween(backButton.bg, { tint: 0x34495e }, { duration: 100 }); } }); createMainMenu(); }; currentMenu.addChild(backButton); } function showPrivacyPolicy() { gameState = 'privacypolicy'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Title var titleText = new Text2('📄 GİZLİLİK POLİTİKASI', { size: 70, fill: 0x3498db }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; currentMenu.addChild(titleText); // Privacy policy content var privacyContent = new Text2('VERİ TOPLAMA VE KULLANIMI\n\n' + '• Oyun deneyiminizi geliştirmek için minimum veri toplarız\n' + '• Kişisel bilgileriniz üçüncü taraflarla paylaşılmaz\n' + '• Oyun ilerlemesi cihazınızda yerel olarak saklanır\n' + '• İstatistikler anonim olarak işlenir\n\n' + 'VERİ GÜVENLİĞİ\n\n' + '• Tüm veriler şifreleme ile korunur\n' + '• Güvenli bağlantı protokolleri kullanılır\n' + '• Düzenli güvenlik güncellemeleri yapılır\n\n' + 'HAKLARINIZ\n\n' + '• Verilerinizi silme hakkınız vardır\n' + '• Veri kullanımı hakkında bilgi alma hakkınız vardır\n' + '• Bu politika değişikliklerinden haberdar edileceksiniz', { size: 40, fill: 0xFFFFFF }); privacyContent.anchor.set(0.5, 0.5); privacyContent.x = 2048 / 2; privacyContent.y = 1200; currentMenu.addChild(privacyContent); // Last updated var lastUpdated = new Text2('Son Güncelleme: 2024', { size: 35, fill: 0x95a5a6 }); lastUpdated.anchor.set(0.5, 0.5); lastUpdated.x = 2048 / 2; lastUpdated.y = 2000; currentMenu.addChild(lastUpdated); // Back button var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2200; backButton.onClick = function () { LK.getSound('Click').play(); createLoginScreen(); }; currentMenu.addChild(backButton); } function showTermsOfService() { gameState = 'termsofservice'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Title var titleText = new Text2('📋 KULLANIM ŞARTLARI', { size: 70, fill: 0x9b59b6 }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; currentMenu.addChild(titleText); // Terms content var termsContent = new Text2('GENEL ŞARTLAR\n\n' + '• Bu oyunu kullanarak şartları kabul etmiş sayılırsınız\n' + '• Oyun 13 yaş ve üzeri kullanıcılar içindir\n' + '• Haksız kazanç elde etmeye yönelik eylemler yasaktır\n' + '• Oyun içi satın almalar iade edilemez\n\n' + 'KULLANICI SORUMLULUKLARI\n\n' + '• Oyunu adil bir şekilde oynamak\n' + '• Diğer oyunculara saygılı davranmak\n' + '• Oyun kurallarına uymak\n' + '• Teknik sorunları bildirmek\n\n' + 'HİZMET KOŞULLARI\n\n' + '• Oyun hizmeti "olduğu gibi" sunulmaktadır\n' + '• Teknik bakım dönemlerinde kesinti olabilir\n' + '• Bu şartlar önceden haber verilmeksizin değişebilir', { size: 40, fill: 0xFFFFFF }); termsContent.anchor.set(0.5, 0.5); termsContent.x = 2048 / 2; termsContent.y = 1200; currentMenu.addChild(termsContent); // Acceptance notice var acceptanceNotice = new Text2('Bu oyunu oynayarak yukarıdaki şartları kabul etmiş sayılırsınız.', { size: 35, fill: 0xf39c12 }); acceptanceNotice.anchor.set(0.5, 0.5); acceptanceNotice.x = 2048 / 2; acceptanceNotice.y = 2000; currentMenu.addChild(acceptanceNotice); // Back button var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2200; backButton.onClick = function () { LK.getSound('Click').play(); createLoginScreen(); }; currentMenu.addChild(backButton); } // Function to show friend invitation screen function showFriendInvitation() { gameState = 'friendinvitation'; // Clear existing menu if (currentMenu) { currentMenu.destroy(); } currentMenu = new Container(); game.addChild(currentMenu); // Title var titleText = new Text2('👥 ARKADAŞLARI DAVET ET', { size: 80, fill: 0x27ae60 }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 500; currentMenu.addChild(titleText); // Invitation benefits var benefitsTitle = new Text2('🎁 DAVET AVANTAJLARI', { size: 60, fill: 0xf1c40f }); benefitsTitle.anchor.set(0.5, 0.5); benefitsTitle.x = 2048 / 2; benefitsTitle.y = 700; currentMenu.addChild(benefitsTitle); var benefitsList = new Text2('• Her arkadaş daveti için 50 bonus puan!\n• Arkadaşınız da 50 bonus puan kazanır\n• Beraber oynadığınızda çift XP\n• Özel arkadaş liderlik tablosu\n• Arkadaş meydan okumaları', { size: 45, fill: 0xFFFFFF }); benefitsList.anchor.set(0.5, 0.5); benefitsList.x = 2048 / 2; benefitsList.y = 850; currentMenu.addChild(benefitsList); // Your invitation code section var codeTitle = new Text2('📋 SİZİN DAVET KODUNUZ', { size: 60, fill: 0x3498db }); codeTitle.anchor.set(0.5, 0.5); codeTitle.x = 2048 / 2; codeTitle.y = 1100; currentMenu.addChild(codeTitle); // Generate or get stored invitation code var invitationCode = storage.invitationCode || 'CATCH' + Math.floor(Math.random() * 10000); storage.invitationCode = invitationCode; var codeDisplay = new Text2(invitationCode, { size: 100, fill: 0xf1c40f }); codeDisplay.anchor.set(0.5, 0.5); codeDisplay.x = 2048 / 2; codeDisplay.y = 1200; currentMenu.addChild(codeDisplay); // Copy code button var copyButton = new MenuButton('📋 KODU KOPYALA', 0x27ae60); copyButton.x = 2048 / 2; copyButton.y = 1350; copyButton.onClick = function () { LK.getSound('Click').play(); // Simulate copying to clipboard LK.effects.flashScreen(0x27ae60, 300); // Show feedback var copyFeedback = new Text2('✅ Kod kopyalandı!', { size: 50, fill: 0x27ae60 }); copyFeedback.anchor.set(0.5, 0.5); copyFeedback.x = 2048 / 2; copyFeedback.y = 1450; currentMenu.addChild(copyFeedback); // Auto remove feedback after 2 seconds LK.setTimeout(function () { if (copyFeedback.parent) { copyFeedback.destroy(); } }, 2000); }; currentMenu.addChild(copyButton); // Share buttons section var shareTitle = new Text2('📤 ARKADAŞLARINIZLA PAYLAŞIN', { size: 60, fill: 0x9b59b6 }); shareTitle.anchor.set(0.5, 0.5); shareTitle.x = 2048 / 2; shareTitle.y = 1550; currentMenu.addChild(shareTitle); // WhatsApp share button var whatsappButton = new MenuButton('📱 WhatsApp ile Paylaş', 0x25D366); whatsappButton.x = 2048 / 3; whatsappButton.y = 1700; whatsappButton.onClick = function () { LK.getSound('Click').play(); LK.effects.flashScreen(0x25D366, 300); }; currentMenu.addChild(whatsappButton); // SMS share button var smsButton = new MenuButton('💬 SMS ile Paylaş', 0x34495e); smsButton.x = 2048 * 2 / 3; smsButton.y = 1700; smsButton.onClick = function () { LK.getSound('Click').play(); LK.effects.flashScreen(0x34495e, 300); }; currentMenu.addChild(smsButton); // Enter friend code section var enterCodeTitle = new Text2('🔑 ARKADAŞ KODU GİRİN', { size: 60, fill: 0xe67e22 }); enterCodeTitle.anchor.set(0.5, 0.5); enterCodeTitle.x = 2048 / 2; enterCodeTitle.y = 1900; currentMenu.addChild(enterCodeTitle); var enterCodeInfo = new Text2('Arkadaşınızın davet kodunu girerek\nikiniz de bonus puan kazanabilirsiniz!', { size: 45, fill: 0xbdc3c7 }); enterCodeInfo.anchor.set(0.5, 0.5); enterCodeInfo.x = 2048 / 2; enterCodeInfo.y = 2020; currentMenu.addChild(enterCodeInfo); var enterCodeButton = new MenuButton('⌨️ KOD GİR', 0xe67e22); enterCodeButton.x = 2048 / 2; enterCodeButton.y = 2150; enterCodeButton.onClick = function () { LK.getSound('Click').play(); // Simulate code entry process var enteredCode = 'CATCH' + Math.floor(Math.random() * 10000); if (enteredCode !== invitationCode) { // Simulate successful code entry storage.friendCodesUsed = (storage.friendCodesUsed || 0) + 1; LK.setScore(LK.getScore() + 50); LK.effects.flashScreen(0x27ae60, 500); // Show success message var successMsg = new Text2('🎉 Kod kabul edildi! +50 puan kazandınız!', { size: 50, fill: 0x27ae60 }); successMsg.anchor.set(0.5, 0.5); successMsg.x = 2048 / 2; successMsg.y = 2300; currentMenu.addChild(successMsg); } }; currentMenu.addChild(enterCodeButton); // Statistics var statsTitle = new Text2('📊 DAVET İSTATİSTİKLERİNİZ', { size: 50, fill: 0x6c5ce7 }); statsTitle.anchor.set(0.5, 0.5); statsTitle.x = 2048 / 2; statsTitle.y = 2400; currentMenu.addChild(statsTitle); var friendStats = storage.friendsInvited || 0; var codeStats = storage.friendCodesUsed || 0; var statsDisplay = new Text2('Davet ettiğiniz arkadaş: ' + friendStats + '\nKullandığınız kod: ' + codeStats, { size: 45, fill: 0xFFFFFF }); statsDisplay.anchor.set(0.5, 0.5); statsDisplay.x = 2048 / 2; statsDisplay.y = 2500; currentMenu.addChild(statsDisplay); // Back button var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e); backButton.x = 2048 / 2; backButton.y = 2650; backButton.onClick = function () { LK.getSound('Click').play(); createLoginScreen(); }; currentMenu.addChild(backButton); }
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
musicEnabled: true,
difficultyLevel: "Normal",
gameSpeedSetting: "Normal",
colorMode: "Normal",
shapeSize: "Normal",
redBallsCollected: 0,
blueBallsCollected: 0,
yellowBallsCollected: 0,
particleEffectsEnabled: true,
screenEffectsEnabled: true,
animationQuality: "High"
});
/****
* Classes
****/
var BackgroundParticle = Container.expand(function () {
var self = Container.call(this);
var colors = [0xfeca57, 0xff9500, 0xff69b4, 0x4da6ff, 0xffffff]; // Yellow, Orange, Pink, Blue, White
var randomColor = colors[Math.floor(Math.random() * colors.length)];
var particleGraphics = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
particleGraphics.tint = randomColor;
particleGraphics.alpha = 0.3 + Math.random() * 0.4; // Random transparency
self.speedX = (Math.random() - 0.5) * 0.5;
self.speedY = -0.3 - Math.random() * 0.7;
self.life = 0;
self.maxLife = 300 + Math.random() * 200;
var initialScale = 0.3 + Math.random() * 0.7;
particleGraphics.scaleX = initialScale;
particleGraphics.scaleY = initialScale;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.life++;
// Fade out as particle ages
var lifeRatio = self.life / self.maxLife;
particleGraphics.alpha = (1 - lifeRatio) * (0.3 + Math.random() * 0.4);
// Gentle floating motion
self.x += Math.sin(self.life * 0.01) * 0.1;
// Remove particle when it's old or off screen
if (self.life >= self.maxLife || self.y < -50 || self.x < -50 || self.x > 2100) {
self.shouldRemove = true;
}
};
return self;
});
var Basket = Container.expand(function (color) {
var self = Container.call(this);
self.color = color;
var basketGraphics = self.attachAsset(color + 'Basket', {
anchorX: 0.5,
anchorY: 0.5
});
// Apply shape size setting to baskets
var sizeMultiplier = shapeSize === 'Small' ? 0.7 : shapeSize === 'Large' ? 1.3 : 1.0;
basketGraphics.scaleX = sizeMultiplier;
basketGraphics.scaleY = sizeMultiplier;
return self;
});
var FallingShape = Container.expand(function (color) {
var self = Container.call(this);
self.color = color;
self.speed = 3;
self.lastY = 0;
var shapeGraphics = self.attachAsset(color + 'Shape', {
anchorX: 0.5,
anchorY: 0.5
});
// Apply shape size setting
var sizeMultiplier = shapeSize === 'Small' ? 0.7 : shapeSize === 'Large' ? 1.3 : 1.0;
shapeGraphics.scaleX = sizeMultiplier;
shapeGraphics.scaleY = sizeMultiplier;
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
return self;
});
var MenuButton = Container.expand(function (text, color) {
var self = Container.call(this);
// Create button background
self.bg = LK.getAsset('shape', {
width: 600,
height: 120,
color: color || 0x3498db,
shape: 'ellipse',
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(self.bg);
// Create button text
self.text = new Text2(text, {
size: 60,
fill: 0xFFFFFF
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.isPressed = false;
self.down = function (x, y, obj) {
self.isPressed = true;
tween(self, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100
});
};
self.up = function (x, y, obj) {
if (self.isPressed) {
self.isPressed = false;
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (self.onClick) {
self.onClick();
}
}
};
return self;
});
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
self.type = type; // 'slowMotion' or 'doublePoints'
self.speed = 2;
self.lastY = 0;
var powerUpGraphics = self.attachAsset(type + 'PowerUp', {
anchorX: 0.5,
anchorY: 0.5
});
// Add glowing effect
powerUpGraphics.alpha = 0.8;
var glowPhase = 0;
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
// Glow animation
glowPhase += 0.1;
powerUpGraphics.alpha = 0.6 + Math.sin(glowPhase) * 0.3;
// Gentle rotation
powerUpGraphics.rotation += 0.05;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
// Function to format game time from seconds to readable format
function formatGameTime(seconds) {
var hours = Math.floor(seconds / 3600);
var minutes = Math.floor(seconds % 3600 / 60);
var remainingSeconds = seconds % 60;
if (hours > 0) {
return hours + ' saat ' + minutes + ' dakika ' + remainingSeconds + ' saniye';
} else if (minutes > 0) {
return minutes + ' dakika ' + remainingSeconds + ' saniye';
} else {
return remainingSeconds + ' saniye';
}
function showSpinWheel() {
gameState = 'spinwheel';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Spin wheel title
var wheelTitle = new Text2('🎰 ŞANS ÇARKI', {
size: 90,
fill: 0xe67e22
});
wheelTitle.anchor.set(0.5, 0.5);
wheelTitle.x = 2048 / 2;
wheelTitle.y = 400;
currentMenu.addChild(wheelTitle);
// Animate title with casino colors
var titleColors = [0xe67e22, 0xf39c12, 0xe74c3c, 0x9b59b6];
var currentColorIndex = 0;
function animateWheelTitle() {
currentColorIndex = (currentColorIndex + 1) % titleColors.length;
tween(wheelTitle, {
tint: titleColors[currentColorIndex],
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(wheelTitle, {
scaleX: 1,
scaleY: 1
}, {
duration: 400,
onFinish: animateWheelTitle
});
}
});
}
animateWheelTitle();
// Wheel description
var wheelDesc = new Text2('Günde bir kez ücretsiz çevirebilirsiniz!\nHarika ödüller kazanma şansı.', {
size: 50,
fill: 0xFFFFFF
});
wheelDesc.anchor.set(0.5, 0.5);
wheelDesc.x = 2048 / 2;
wheelDesc.y = 600;
currentMenu.addChild(wheelDesc);
// Wheel prizes section
var prizesTitle = new Text2('🏆 ÖDÜLLER', {
size: 60,
fill: 0xf1c40f
});
prizesTitle.anchor.set(0.5, 0.5);
prizesTitle.x = 2048 / 2;
prizesTitle.y = 800;
currentMenu.addChild(prizesTitle);
var prizesList = new Text2('• 🪙 50 Premium Coin\n• 🪙 100 Premium Coin\n• 🪙 200 Premium Coin\n• ⚡ Çift XP Boost (1 gün)\n• 🛡️ Ekstra Can x3\n• 🎁 Sürpriz Ödül\n• 💎 Nadir Şekil Kilidi\n• 🌟 Mega Bonus (500 Coin)', {
size: 45,
fill: 0xecf0f1
});
prizesList.anchor.set(0.5, 0.5);
prizesList.x = 2048 / 2;
prizesList.y = 1050;
currentMenu.addChild(prizesList);
// Check if user can spin today
var lastSpinDate = storage.lastSpinDate || '';
var today = new Date().toDateString();
var canSpin = lastSpinDate !== today;
// Spin button
var spinButton = new MenuButton(canSpin ? '🎰 ÇARKI ÇEVİR!' : '⏰ Yarın Tekrar Dene', canSpin ? 0x27ae60 : 0x95a5a6);
spinButton.x = 2048 / 2;
spinButton.y = 1400;
if (canSpin) {
// Animate spin button when available
var _pulseSpinButton = function pulseSpinButton() {
tween(spinButton, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(spinButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: _pulseSpinButton
});
}
});
};
_pulseSpinButton();
}
spinButton.onClick = function () {
LK.getSound('Click').play();
if (canSpin) {
// Perform spin
performSpin();
}
};
currentMenu.addChild(spinButton);
// Premium spin section
var premiumSpinTitle = new Text2('💎 PREMİUM ÇEVİRME', {
size: 60,
fill: 0x9b59b6
});
premiumSpinTitle.anchor.set(0.5, 0.5);
premiumSpinTitle.x = 2048 / 2;
premiumSpinTitle.y = 1600;
currentMenu.addChild(premiumSpinTitle);
var premiumSpinDesc = new Text2('10 Premium Coin ile istediğiniz zaman çevirebilirsiniz!\nDaha yüksek ödül şansı.', {
size: 45,
fill: 0xbdc3c7
});
premiumSpinDesc.anchor.set(0.5, 0.5);
premiumSpinDesc.x = 2048 / 2;
premiumSpinDesc.y = 1720;
currentMenu.addChild(premiumSpinDesc);
// Premium spin button
var premiumCoins = storage.premiumCoins || 0;
var premiumSpinButton = new MenuButton('💎 Premium Çevirme (10 Coin)', premiumCoins >= 10 ? 0xe67e22 : 0x95a5a6);
premiumSpinButton.x = 2048 / 2;
premiumSpinButton.y = 1850;
premiumSpinButton.onClick = function () {
LK.getSound('Click').play();
if (premiumCoins >= 10) {
storage.premiumCoins = premiumCoins - 10;
performSpin(true); // Premium spin
}
};
currentMenu.addChild(premiumSpinButton);
// Current coins display
var coinsDisplay = new Text2('💰 Mevcut Coin: ' + premiumCoins, {
size: 50,
fill: 0xf1c40f
});
coinsDisplay.anchor.set(0.5, 0.5);
coinsDisplay.x = 2048 / 2;
coinsDisplay.y = 2000;
currentMenu.addChild(coinsDisplay);
// Back button
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2200;
backButton.onClick = function () {
LK.getSound('Click').play();
createMainMenu();
};
currentMenu.addChild(backButton);
}
function performSpin(isPremium) {
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Spinning animation screen
var spinTitle = new Text2('🎰 ÇARK DÖNÜYOR...', {
size: 90,
fill: 0xe67e22
});
spinTitle.anchor.set(0.5, 0.5);
spinTitle.x = 2048 / 2;
spinTitle.y = 800;
currentMenu.addChild(spinTitle);
// Animate spinning title
tween(spinTitle, {
rotation: Math.PI * 4 // 2 full rotations
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
// Show result
showSpinResult(isPremium);
}
});
// Add excitement text
var excitementText = new Text2('🌟 Hangi ödülü kazanacaksınız? 🌟', {
size: 60,
fill: 0xf1c40f
});
excitementText.anchor.set(0.5, 0.5);
excitementText.x = 2048 / 2;
excitementText.y = 1200;
currentMenu.addChild(excitementText);
// Animate excitement text
tween(excitementText, {
alpha: 0.5
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(excitementText, {
alpha: 1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (excitementText.parent) {
tween(excitementText, {
alpha: 0.5
}, {
duration: 500,
easing: tween.easeInOut
});
}
}
});
}
});
}
function showSpinResult(isPremium) {
// Define prizes (premium has better odds)
var prizes = [{
name: '50 Premium Coin',
value: 50,
type: 'coin',
rarity: 'common'
}, {
name: '100 Premium Coin',
value: 100,
type: 'coin',
rarity: 'common'
}, {
name: '200 Premium Coin',
value: 200,
type: 'coin',
rarity: 'rare'
}, {
name: 'Çift XP Boost (1 gün)',
value: 1,
type: 'boost',
rarity: 'rare'
}, {
name: 'Ekstra Can x3',
value: 3,
type: 'lives',
rarity: 'common'
}, {
name: 'Sürpriz Ödül',
value: 0,
type: 'surprise',
rarity: 'epic'
}, {
name: 'Nadir Şekil Kilidi',
value: 1,
type: 'unlock',
rarity: 'epic'
}, {
name: 'Mega Bonus (500 Coin)',
value: 500,
type: 'coin',
rarity: 'legendary'
}];
// Select random prize (premium has better chances for rare items)
var randomValue = Math.random();
var selectedPrize;
if (isPremium) {
// Premium spin has better odds
if (randomValue < 0.05) {
selectedPrize = prizes[7]; // Legendary
} else if (randomValue < 0.20) {
selectedPrize = prizes[5 + Math.floor(Math.random() * 2)]; // Epic
} else if (randomValue < 0.50) {
selectedPrize = prizes[2 + Math.floor(Math.random() * 2)]; // Rare
} else {
selectedPrize = prizes[Math.floor(Math.random() * 2)]; // Common
}
} else {
// Normal spin
if (randomValue < 0.01) {
selectedPrize = prizes[7]; // Legendary
} else if (randomValue < 0.10) {
selectedPrize = prizes[5 + Math.floor(Math.random() * 2)]; // Epic
} else if (randomValue < 0.30) {
selectedPrize = prizes[2 + Math.floor(Math.random() * 2)]; // Rare
} else {
selectedPrize = prizes[Math.floor(Math.random() * 5)]; // Common
}
}
// Update last spin date for free spins
if (!isPremium) {
storage.lastSpinDate = new Date().toDateString();
}
// Apply prize
switch (selectedPrize.type) {
case 'coin':
storage.premiumCoins = (storage.premiumCoins || 0) + selectedPrize.value;
break;
case 'boost':
storage.doubleXPBoost = true;
storage.boostExpiry = Date.now() + 24 * 60 * 60 * 1000; // 24 hours
break;
case 'lives':
storage.extraLives = (storage.extraLives || 0) + selectedPrize.value;
break;
case 'unlock':
storage.rareShapesUnlocked = true;
break;
case 'surprise':
// Random bonus
storage.premiumCoins = (storage.premiumCoins || 0) + (150 + Math.floor(Math.random() * 100));
break;
}
// Clear menu and show result
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Result title
var resultTitle = new Text2('🎉 TEBRİKLER! 🎉', {
size: 100,
fill: 0x27ae60
});
resultTitle.anchor.set(0.5, 0.5);
resultTitle.x = 2048 / 2;
resultTitle.y = 600;
currentMenu.addChild(resultTitle);
// Prize announcement
var prizeText = new Text2('Kazandığınız ödül:', {
size: 60,
fill: 0xf1c40f
});
prizeText.anchor.set(0.5, 0.5);
prizeText.x = 2048 / 2;
prizeText.y = 800;
currentMenu.addChild(prizeText);
// Prize name with rarity color
var rarityColors = {
common: 0xFFFFFF,
rare: 0x3498db,
epic: 0x9b59b6,
legendary: 0xf1c40f
};
var prizeNameText = new Text2(selectedPrize.name, {
size: 80,
fill: rarityColors[selectedPrize.rarity]
});
prizeNameText.anchor.set(0.5, 0.5);
prizeNameText.x = 2048 / 2;
prizeNameText.y = 1000;
currentMenu.addChild(prizeNameText);
// Animate prize text
tween(prizeNameText, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 500,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(prizeNameText, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeOut
});
}
});
// Show current coins
var newCoins = storage.premiumCoins || 0;
var coinsText = new Text2('💰 Toplam Coin: ' + newCoins, {
size: 50,
fill: 0xf39c12
});
coinsText.anchor.set(0.5, 0.5);
coinsText.x = 2048 / 2;
coinsText.y = 1200;
currentMenu.addChild(coinsText);
// Continue button
var continueButton = new MenuButton('✨ DEVAM ET', 0x27ae60);
continueButton.x = 2048 / 2;
continueButton.y = 1500;
continueButton.onClick = function () {
LK.getSound('Click').play();
createMainMenu();
};
currentMenu.addChild(continueButton);
// Spin again button (if premium)
if (isPremium || storage.premiumCoins >= 10) {
var spinAgainButton = new MenuButton('🎰 Tekrar Çevir', 0xe67e22);
spinAgainButton.x = 2048 / 2;
spinAgainButton.y = 1650;
spinAgainButton.onClick = function () {
LK.getSound('Click').play();
showSpinWheel();
};
currentMenu.addChild(spinAgainButton);
}
// Flash screen with rarity color
LK.effects.flashScreen(rarityColors[selectedPrize.rarity], 1000);
// Play celebration sound
LK.getSound('Applause').play();
}
;
}
var baskets = [];
var fallingShapes = [];
var powerUps = [];
var slowMotionActive = false;
var doublePointsActive = false;
var slowMotionTimer = 0;
var doublePointsTimer = 0;
var powerUpSpawnTimer = 0;
// Update colors based on color mode
var colors = colorMode === 'ColorBlind' ? ['red', 'blue', 'yellow'] : ['red', 'blue', 'yellow'];
// Note: In real implementation, colorblind mode would use different color combinations
var gameSpeed = 1;
var consecutiveMatches = 0;
var draggedBasket = null;
var gameState = 'menu'; // 'menu', 'playing', 'howtoplay', 'settings'
var menuButtons = [];
var currentMenu = null;
var musicEnabled = storage.musicEnabled !== undefined ? storage.musicEnabled : true; // Track music state
var highScore = storage.highScore || 0; // Load saved high score
// Game time tracking
var totalGameTime = storage.totalGameTime || 0; // Total time played in seconds
var currentSessionStartTime = 0; // When current game session started
var gameTimeTimer = null; // Timer for tracking game time
var sessionStartTime = 0; // Track when current session actually started
// Ball collection requirements and tracking
var ballRequirements = {
red: 5,
blue: 5,
yellow: 5
};
var ballsCollected = {
red: storage.redBallsCollected || 0,
blue: storage.blueBallsCollected || 0,
yellow: storage.yellowBallsCollected || 0
};
// Level system
var currentLevel = 1;
var levelCompleted = false;
storage.currentLevel = 1;
// Game settings from storage
var difficultyLevel = storage.difficultyLevel || 'Normal'; // Easy, Normal, Hard
var gameSpeedSetting = storage.gameSpeedSetting || 'Normal'; // Slow, Normal, Fast
var colorMode = storage.colorMode || 'Normal'; // Normal, ColorBlind
var shapeSize = storage.shapeSize || 'Normal'; // Small, Normal, Large
// Create animated background
var backgroundContainer = new Container();
game.addChild(backgroundContainer);
// Create menu background
var menuBg = LK.getAsset('menuBackground', {
anchorX: 0,
anchorY: 0
});
menuBg.x = 0;
menuBg.y = 0;
menuBg.alpha = 0.9;
backgroundContainer.addChild(menuBg);
// Create gradient layers
var gradientLayer1 = LK.getAsset('gradientLayer1', {
anchorX: 0,
anchorY: 0
});
gradientLayer1.x = 0;
gradientLayer1.y = 0;
gradientLayer1.alpha = 0.3;
backgroundContainer.addChild(gradientLayer1);
var gradientLayer2 = LK.getAsset('gradientLayer2', {
anchorX: 0,
anchorY: 0
});
gradientLayer2.x = 0;
gradientLayer2.y = 0;
gradientLayer2.alpha = 0.2;
backgroundContainer.addChild(gradientLayer2);
// Animate gradient layers
function animateGradientLayers() {
// Animate menu background
tween(menuBg, {
alpha: 0.7
}, {
duration: 4000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(menuBg, {
alpha: 0.9
}, {
duration: 4000,
easing: tween.easeInOut
});
}
});
tween(gradientLayer1, {
alpha: 0.1
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(gradientLayer1, {
alpha: 0.3
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: animateGradientLayers
});
}
});
tween(gradientLayer2, {
alpha: 0.1
}, {
duration: 2500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(gradientLayer2, {
alpha: 0.2
}, {
duration: 2500,
easing: tween.easeInOut
});
}
});
}
animateGradientLayers();
// Particle system
var backgroundParticles = [];
var particleSpawnTimer = 0;
// Create score display (initially hidden)
var scoreTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
scoreTxt.visible = false;
LK.gui.top.addChild(scoreTxt);
// Create ball collection display (initially hidden)
var ballCountTxt = new Text2('', {
size: 50,
fill: 0xFFFFFF
});
ballCountTxt.anchor.set(1, 0);
ballCountTxt.visible = false;
LK.gui.topRight.addChild(ballCountTxt);
// Create pause button (initially hidden)
var pauseButton = new MenuButton('⏸️ DURAKLAT', 0x34495e);
pauseButton.x = 150;
pauseButton.y = 80;
pauseButton.visible = false;
pauseButton.onClick = function () {
LK.getSound('Click').play();
togglePause();
};
LK.gui.topLeft.addChild(pauseButton);
// Game pause state
var gamePaused = false;
var pauseMenu = null;
// Function to update ball collection display
function updateBallDisplay() {
// Clear existing text and recreate with colored sections
if (ballCountTxt.parent) {
ballCountTxt.parent.removeChild(ballCountTxt);
}
// Create container for colored text elements
var ballDisplayContainer = new Container();
ballDisplayContainer.x = ballCountTxt.x;
ballDisplayContainer.y = ballCountTxt.y;
LK.gui.topRight.addChild(ballDisplayContainer);
// Title text with enhanced styling
var titleText = new Text2('🎯 BÖLÜM ' + currentLevel + ' HEDEFLERİ', {
size: 55,
fill: 0xf1c40f
});
titleText.anchor.set(1, 0);
titleText.x = 0;
titleText.y = 0;
ballDisplayContainer.addChild(titleText);
// Add animated glow effect to title
tween(titleText, {
alpha: 0.7
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
alpha: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Continue glow animation if still in game
if (gameState === 'playing') {
tween(titleText, {
alpha: 0.7
}, {
duration: 1000,
easing: tween.easeInOut
});
}
}
});
}
});
// Red ball text with red color
var redText = new Text2('Kırmızı: ' + ballsCollected.red + '/' + ballRequirements.red, {
size: 50,
fill: 0xff0000
});
redText.anchor.set(1, 0);
redText.x = 0;
redText.y = 60;
ballDisplayContainer.addChild(redText);
// Blue ball text with blue color
var blueText = new Text2('Mavi: ' + ballsCollected.blue + '/' + ballRequirements.blue, {
size: 50,
fill: 0x0066ff
});
blueText.anchor.set(1, 0);
blueText.x = 0;
blueText.y = 120;
ballDisplayContainer.addChild(blueText);
// Yellow ball text with yellow color
var yellowText = new Text2('Sarı: ' + ballsCollected.yellow + '/' + ballRequirements.yellow, {
size: 50,
fill: 0xffff00
});
yellowText.anchor.set(1, 0);
yellowText.x = 0;
yellowText.y = 180;
ballDisplayContainer.addChild(yellowText);
// Add power-up status display
if (slowMotionActive || doublePointsActive) {
var powerUpStatus = new Text2('', {
size: 40,
fill: 0xffffff
});
powerUpStatus.anchor.set(1, 0);
powerUpStatus.x = 0;
powerUpStatus.y = 250;
var statusText = '';
if (slowMotionActive) {
statusText += '🕐 Yavaş Hareket: ' + Math.ceil(slowMotionTimer / 60) + 's\n';
}
if (doublePointsActive) {
statusText += '⭐ Çift Puan: ' + Math.ceil(doublePointsTimer / 60) + 's\n';
}
powerUpStatus.setText(statusText);
ballDisplayContainer.addChild(powerUpStatus);
}
// Update the global reference to the new container
ballCountTxt = ballDisplayContainer;
}
// Internet connection status indicator in top right
var connectionIndicator = new Text2('🌐 Bağlı', {
size: 40,
fill: 0x27ae60
});
connectionIndicator.anchor.set(1, 0); // Anchor to top right
connectionIndicator.x = -20; // Position relative to topRight anchor
connectionIndicator.y = 20; // Position from top
LK.gui.topRight.addChild(connectionIndicator);
// Premium activity indicator in top right (moved down)
var premiumIndicator = new Text2('Premium ✅', {
size: 40,
fill: 0x27ae60
});
premiumIndicator.anchor.set(1, 0); // Anchor to top right
premiumIndicator.x = -20; // Position relative to topRight anchor
premiumIndicator.y = 70; // Position below connection indicator
LK.gui.topRight.addChild(premiumIndicator);
// Initialize menu system
function createMainMenu() {
gameState = 'menu';
gamePaused = false;
// Hide game UI elements
scoreTxt.visible = false;
ballCountTxt.visible = false;
pauseButton.visible = false;
// Show connection and premium indicators in main menu
connectionIndicator.visible = true;
premiumIndicator.visible = true;
// Clean up pause menu if it exists
if (pauseMenu) {
pauseMenu.destroy();
pauseMenu = null;
}
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Play main menu background music
if (musicEnabled) {
LK.playMusic('Mainmenubackground');
}
// Game title
var titleText = new Text2('TOPLARI YAKALA', {
size: 120,
fill: 0xffff00
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 600;
currentMenu.addChild(titleText);
// Enhanced title animations with multiple effects
var titleColors = [0xfeca57, 0xff9500, 0xff69b4, 0x4da6ff, 0x27ae60, 0xe74c3c]; // Yellow, Orange, Pink, Blue, Green, Red
var currentColorIndex = 0;
function animateTitle() {
// Color cycling animation with faster transitions
currentColorIndex = (currentColorIndex + 1) % titleColors.length;
tween(titleText, {
tint: titleColors[currentColorIndex]
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
animateTitle();
}
});
}
// Fast yellow blinking animation
function yellowBlinkTitle() {
tween(titleText, {
tint: 0xffff00
}, {
duration: 200,
easing: tween.linear,
onFinish: function onFinish() {
tween(titleText, {
tint: 0xfeca57
}, {
duration: 200,
easing: tween.linear,
onFinish: yellowBlinkTitle
});
}
});
}
// Pulse effect - continuous scale animation
function pulseTitle() {
tween(titleText, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
scaleX: 1,
scaleY: 1
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: pulseTitle
});
}
});
}
// Gentle floating movement with enhanced motion
function floatTitle() {
var randomY = 600 + (Math.random() - 0.5) * 40;
tween(titleText, {
y: randomY
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: floatTitle
});
}
// Rotation effect
function rotateTitle() {
tween(titleText, {
rotation: Math.PI * 0.05
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
rotation: -Math.PI * 0.05
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
rotation: 0
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: rotateTitle
});
}
});
}
});
}
// Glow effect simulation with alpha changes
function glowTitle() {
tween(titleText, {
alpha: 0.7
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
alpha: 1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: glowTitle
});
}
});
}
// Start all animations
animateTitle();
yellowBlinkTitle();
pulseTitle();
floatTitle();
rotateTitle();
glowTitle();
// Menu buttons - Main game controls group
var startButton = new MenuButton('OYUNU BAŞLAT', 0x27ae60);
startButton.x = 2048 / 2;
startButton.y = 1000;
// Enhanced start button animations
// Gradient color animation with multiple colors
var startButtonColors = [0x27ae60, 0x2ecc71, 0x1abc9c, 0x16a085, 0x27ae60];
var currentStartColorIndex = 0;
function animateStartButton() {
currentStartColorIndex = (currentStartColorIndex + 1) % startButtonColors.length;
tween(startButton.bg, {
tint: startButtonColors[currentStartColorIndex]
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: animateStartButton
});
}
// Pulsing scale animation
function pulseStartButton() {
tween(startButton, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(startButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: pulseStartButton
});
}
});
}
// Glow effect with alpha changes
function glowStartButton() {
tween(startButton, {
alpha: 0.7
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(startButton, {
alpha: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: glowStartButton
});
}
});
}
// Gentle floating movement
function floatStartButton() {
var randomY = 1000 + (Math.random() - 0.5) * 20;
tween(startButton, {
y: randomY
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: floatStartButton
});
}
// Start all animations
animateStartButton();
pulseStartButton();
glowStartButton();
floatStartButton();
startButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation
tween(startButton, {
scaleX: 1.2,
scaleY: 1.2,
rotation: Math.PI * 0.05
}, {
duration: 150,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(startButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
startGame();
}
});
}
});
};
currentMenu.addChild(startButton);
// Information and help group
var howToPlayButton = new MenuButton('❓ NASIL OYNANIR?', 0x3498db);
howToPlayButton.x = 2048 / 2;
howToPlayButton.y = 1150;
// Enhanced how to play button animations
// Question mark pulse animation - makes the button more noticeable
function pulseHowToPlayButton() {
tween(howToPlayButton, {
scaleX: 1.08,
scaleY: 1.08
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(howToPlayButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: pulseHowToPlayButton
});
}
});
}
// Color cycling animation with educational colors
var howToPlayColors = [0x3498db, 0x9b59b6, 0x1abc9c, 0xf39c12]; // Blue, Purple, Teal, Orange
var currentHowToPlayColorIndex = 0;
function animateHowToPlayButton() {
currentHowToPlayColorIndex = (currentHowToPlayColorIndex + 1) % howToPlayColors.length;
tween(howToPlayButton.bg, {
tint: howToPlayColors[currentHowToPlayColorIndex]
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: animateHowToPlayButton
});
}
// Gentle shake animation to draw attention
function shakeHowToPlayButton() {
tween(howToPlayButton, {
x: 2048 / 2 + 8
}, {
duration: 150,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(howToPlayButton, {
x: 2048 / 2 - 8
}, {
duration: 150,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(howToPlayButton, {
x: 2048 / 2
}, {
duration: 150,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat shake after delay
LK.setTimeout(shakeHowToPlayButton, 5000);
}
});
}
});
}
});
}
// Glow effect for help button
function glowHowToPlayButton() {
tween(howToPlayButton, {
alpha: 0.6
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(howToPlayButton, {
alpha: 1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: glowHowToPlayButton
});
}
});
}
// Start all animations
pulseHowToPlayButton();
animateHowToPlayButton();
glowHowToPlayButton();
// Start shake animation after a delay
LK.setTimeout(shakeHowToPlayButton, 3000);
howToPlayButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with question mark theme
tween(howToPlayButton, {
scaleX: 1.3,
scaleY: 1.3,
rotation: Math.PI * 0.1
}, {
duration: 200,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(howToPlayButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
showHowToPlay();
}
});
}
});
};
currentMenu.addChild(howToPlayButton);
var statisticsButton = new MenuButton('📊 İSTATİSTİKLERİM', 0x6c5ce7);
statisticsButton.x = 2048 / 2;
statisticsButton.y = 1300;
// Enhanced statistics button animations
// Data visualization effect with color cycling
var statisticsColors = [0x6c5ce7, 0x9b59b6, 0x3498db, 0x1abc9c]; // Purple, Violet, Blue, Teal
var currentStatsColorIndex = 0;
function animateStatisticsButton() {
currentStatsColorIndex = (currentStatsColorIndex + 1) % statisticsColors.length;
tween(statisticsButton.bg, {
tint: statisticsColors[currentStatsColorIndex]
}, {
duration: 1800,
easing: tween.easeInOut,
onFinish: animateStatisticsButton
});
}
// Chart-like pulse animation
function pulseStatisticsButton() {
tween(statisticsButton, {
scaleX: 1.06,
scaleY: 1.06
}, {
duration: 1400,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(statisticsButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1400,
easing: tween.easeInOut,
onFinish: pulseStatisticsButton
});
}
});
}
// Data bar effect simulation with gentle shake
function shakeStatisticsButton() {
tween(statisticsButton, {
x: 2048 / 2 + 6
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(statisticsButton, {
x: 2048 / 2 - 6
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(statisticsButton, {
x: 2048 / 2
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat shake after delay
LK.setTimeout(shakeStatisticsButton, 4000);
}
});
}
});
}
});
}
// Glow effect for data visualization theme
function glowStatisticsButton() {
tween(statisticsButton, {
alpha: 0.75
}, {
duration: 700,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(statisticsButton, {
alpha: 1
}, {
duration: 700,
easing: tween.easeInOut,
onFinish: glowStatisticsButton
});
}
});
}
// Start all animations
animateStatisticsButton();
pulseStatisticsButton();
glowStatisticsButton();
// Start shake animation after a delay
LK.setTimeout(shakeStatisticsButton, 2000);
statisticsButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with chart theme
tween(statisticsButton, {
scaleX: 1.25,
scaleY: 1.25,
rotation: Math.PI * 0.08
}, {
duration: 180,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(statisticsButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
showStatistics();
}
});
}
});
};
currentMenu.addChild(statisticsButton);
// Game settings group
var settingsButton = new MenuButton('⚙️ AYARLAR', 0xf39c12);
settingsButton.x = 2048 / 2;
settingsButton.y = 1450;
// Enhanced settings button animations
// Gear rotation effect
function rotateSettingsButton() {
tween(settingsButton, {
rotation: Math.PI * 0.05
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(settingsButton, {
rotation: -Math.PI * 0.05
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(settingsButton, {
rotation: 0
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: rotateSettingsButton
});
}
});
}
});
}
// Mechanical color cycling
var settingsColors = [0xf39c12, 0xe67e22, 0xd35400, 0x95a5a6]; // Orange, Dark Orange, Darker Orange, Gray
var currentSettingsColorIndex = 0;
function animateSettingsButton() {
currentSettingsColorIndex = (currentSettingsColorIndex + 1) % settingsColors.length;
tween(settingsButton.bg, {
tint: settingsColors[currentSettingsColorIndex]
}, {
duration: 1600,
easing: tween.easeInOut,
onFinish: animateSettingsButton
});
}
// Mechanical pulse animation
function pulseSettingsButton() {
tween(settingsButton, {
scaleX: 1.08,
scaleY: 1.08
}, {
duration: 1300,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(settingsButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1300,
easing: tween.easeInOut,
onFinish: pulseSettingsButton
});
}
});
}
// Gear-like glow effect
function glowSettingsButton() {
tween(settingsButton, {
alpha: 0.7
}, {
duration: 900,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(settingsButton, {
alpha: 1
}, {
duration: 900,
easing: tween.easeInOut,
onFinish: glowSettingsButton
});
}
});
}
// Start all animations
rotateSettingsButton();
animateSettingsButton();
pulseSettingsButton();
glowSettingsButton();
settingsButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with gear theme
tween(settingsButton, {
scaleX: 1.3,
scaleY: 1.3,
rotation: Math.PI * 0.5
}, {
duration: 200,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(settingsButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
showSettings();
}
});
}
});
};
currentMenu.addChild(settingsButton);
// Development and creator group
var creatorsButton = new MenuButton('🎬 YAPIMCILAR', 0x9b59b6);
creatorsButton.x = 2048 / 2;
creatorsButton.y = 1600;
// Enhanced creators button animations
// Film reel color cycling
var creatorsColors = [0x9b59b6, 0x8e44ad, 0x3498db, 0xe74c3c]; // Purple, Dark Purple, Blue, Red
var currentCreatorsColorIndex = 0;
function animateCreatorsButton() {
currentCreatorsColorIndex = (currentCreatorsColorIndex + 1) % creatorsColors.length;
tween(creatorsButton.bg, {
tint: creatorsColors[currentCreatorsColorIndex]
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: animateCreatorsButton
});
}
// Movie credits roll effect
function rollCreatorsButton() {
tween(creatorsButton, {
y: 1650 - 15
}, {
duration: 1800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(creatorsButton, {
y: 1650 + 15
}, {
duration: 1800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(creatorsButton, {
y: 1650
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: rollCreatorsButton
});
}
});
}
});
}
// Film camera pulse effect
function pulseCreatorsButton() {
tween(creatorsButton, {
scaleX: 1.07,
scaleY: 1.07
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(creatorsButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: pulseCreatorsButton
});
}
});
}
// Spotlight glow effect
function glowCreatorsButton() {
tween(creatorsButton, {
alpha: 0.6
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(creatorsButton, {
alpha: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: glowCreatorsButton
});
}
});
}
// Start all animations
animateCreatorsButton();
rollCreatorsButton();
pulseCreatorsButton();
glowCreatorsButton();
creatorsButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with film theme
tween(creatorsButton, {
scaleX: 1.4,
scaleY: 1.4,
rotation: Math.PI * 0.15
}, {
duration: 250,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(creatorsButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
showCreators();
}
});
}
});
};
currentMenu.addChild(creatorsButton);
var recentUpdatesButton = new MenuButton('🆕 OYUNA SON EKLENENLER', 0x1abc9c);
recentUpdatesButton.x = 2048 / 2;
recentUpdatesButton.y = 1780;
// Enhanced recent updates button animations
// Notification badge flash effect
var updatesColors = [0x1abc9c, 0x16a085, 0xe74c3c, 0xf1c40f]; // Teal, Dark Teal, Red, Yellow
var currentUpdatesColorIndex = 0;
function animateUpdatesButton() {
currentUpdatesColorIndex = (currentUpdatesColorIndex + 1) % updatesColors.length;
tween(recentUpdatesButton.bg, {
tint: updatesColors[currentUpdatesColorIndex]
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: animateUpdatesButton
});
}
// New content notification pulse
function pulseUpdatesButton() {
tween(recentUpdatesButton, {
scaleX: 1.12,
scaleY: 1.12
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(recentUpdatesButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: pulseUpdatesButton
});
}
});
}
// Notification glow effect with stronger intensity
function glowUpdatesButton() {
tween(recentUpdatesButton, {
alpha: 0.5
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(recentUpdatesButton, {
alpha: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: glowUpdatesButton
});
}
});
}
// New badge shake animation
function shakeUpdatesButton() {
tween(recentUpdatesButton, {
x: 2048 / 2 + 10
}, {
duration: 120,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(recentUpdatesButton, {
x: 2048 / 2 - 10
}, {
duration: 120,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(recentUpdatesButton, {
x: 2048 / 2
}, {
duration: 120,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat shake after delay
LK.setTimeout(shakeUpdatesButton, 6000);
}
});
}
});
}
});
}
// Start all animations
animateUpdatesButton();
pulseUpdatesButton();
glowUpdatesButton();
// Start shake animation after a delay
LK.setTimeout(shakeUpdatesButton, 3500);
recentUpdatesButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with notification theme
tween(recentUpdatesButton, {
scaleX: 1.35,
scaleY: 1.35,
rotation: Math.PI * 0.12
}, {
duration: 220,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(recentUpdatesButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 180,
easing: tween.easeOut,
onFinish: function onFinish() {
showRecentUpdates();
}
});
}
});
};
currentMenu.addChild(recentUpdatesButton);
// Premium section - moved to bottom
var premiumButton = new MenuButton('💎 PREMİUM GEÇİŞ', 0xf1c40f);
premiumButton.x = 2048 / 2; // Center horizontally
premiumButton.y = 2350; // Position at bottom of page
// Enhanced premium button animations
// Gold color cycling
var premiumColors = [0xf1c40f, 0xf39c12, 0xe67e22, 0xd35400]; // Gold, Orange, Dark Orange, Darker Orange
var currentPremiumColorIndex = 0;
function animatePremiumButton() {
currentPremiumColorIndex = (currentPremiumColorIndex + 1) % premiumColors.length;
tween(premiumButton.bg, {
tint: premiumColors[currentPremiumColorIndex]
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: animatePremiumButton
});
}
// Luxury pulse animation
function pulsePremiumButton() {
tween(premiumButton, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(premiumButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: pulsePremiumButton
});
}
});
}
// Premium glow effect with stronger intensity
function glowPremiumButton() {
tween(premiumButton, {
alpha: 0.6
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(premiumButton, {
alpha: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: glowPremiumButton
});
}
});
}
// Floating luxury effect
function floatPremiumButton() {
var randomY = 2350 + (Math.random() - 0.5) * 15;
tween(premiumButton, {
y: randomY
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: floatPremiumButton
});
}
// Start all animations
animatePremiumButton();
pulsePremiumButton();
glowPremiumButton();
floatPremiumButton();
premiumButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with luxury theme
tween(premiumButton, {
scaleX: 1.4,
scaleY: 1.4,
rotation: Math.PI * 0.1
}, {
duration: 200,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(premiumButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
showPremium();
}
});
}
});
};
currentMenu.addChild(premiumButton);
var premiumStoreButton = new MenuButton('🛍️ PREMİUM MAĞAZA', 0xd63384);
premiumStoreButton.x = 2048 / 2;
premiumStoreButton.y = 2500; // Position at bottom of page
// Enhanced premium store button animations
// Shopping color cycling
var storeColors = [0xd63384, 0xb83d6e, 0x9c2755, 0x7f1d42]; // Pink, Dark Pink, Purple Pink, Dark Purple Pink
var currentStoreColorIndex = 0;
function animateStoreButton() {
currentStoreColorIndex = (currentStoreColorIndex + 1) % storeColors.length;
tween(premiumStoreButton.bg, {
tint: storeColors[currentStoreColorIndex]
}, {
duration: 900,
easing: tween.easeInOut,
onFinish: animateStoreButton
});
}
// Shopping cart pulse animation
function pulseStoreButton() {
tween(premiumStoreButton, {
scaleX: 1.12,
scaleY: 1.12
}, {
duration: 850,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(premiumStoreButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 850,
easing: tween.easeInOut,
onFinish: pulseStoreButton
});
}
});
}
// Store glow effect
function glowStoreButton() {
tween(premiumStoreButton, {
alpha: 0.65
}, {
duration: 650,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(premiumStoreButton, {
alpha: 1
}, {
duration: 650,
easing: tween.easeInOut,
onFinish: glowStoreButton
});
}
});
}
// Shopping bag sway effect
function swayStoreButton() {
var randomX = 2048 / 2 + (Math.random() - 0.5) * 20;
tween(premiumStoreButton, {
x: randomX
}, {
duration: 1800,
easing: tween.easeInOut,
onFinish: swayStoreButton
});
}
// Start all animations
animateStoreButton();
pulseStoreButton();
glowStoreButton();
swayStoreButton();
premiumStoreButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with shopping theme
tween(premiumStoreButton, {
scaleX: 1.35,
scaleY: 1.35,
rotation: Math.PI * 0.08
}, {
duration: 180,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(premiumStoreButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 130,
easing: tween.easeOut,
onFinish: function onFinish() {
showPremiumStore();
}
});
}
});
};
currentMenu.addChild(premiumStoreButton);
// Exit section
var exitButton = new MenuButton('🚪 ÇIKIŞ', 0xe74c3c);
exitButton.x = 2048 / 2;
exitButton.y = 1950;
// Enhanced exit button animations
// Warning color cycling
var exitColors = [0xe74c3c, 0xc0392b, 0x95a5a6, 0x34495e]; // Red, Dark Red, Gray, Dark Gray
var currentExitColorIndex = 0;
function animateExitButton() {
currentExitColorIndex = (currentExitColorIndex + 1) % exitColors.length;
tween(exitButton.bg, {
tint: exitColors[currentExitColorIndex]
}, {
duration: 2200,
easing: tween.easeInOut,
onFinish: animateExitButton
});
}
// Warning pulse with stronger effect
function pulseExitButton() {
tween(exitButton, {
scaleX: 1.05,
scaleY: 1.05
}, {
duration: 1600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(exitButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1600,
easing: tween.easeInOut,
onFinish: pulseExitButton
});
}
});
}
// Danger glow effect
function glowExitButton() {
tween(exitButton, {
alpha: 0.8
}, {
duration: 1100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(exitButton, {
alpha: 1
}, {
duration: 1100,
easing: tween.easeInOut,
onFinish: glowExitButton
});
}
});
}
// Warning door close effect
function doorExitButton() {
tween(exitButton, {
y: 2050 - 8
}, {
duration: 2500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(exitButton, {
y: 2050 + 8
}, {
duration: 2500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(exitButton, {
y: 2050
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: doorExitButton
});
}
});
}
});
}
// Start all animations
animateExitButton();
pulseExitButton();
glowExitButton();
doorExitButton();
exitButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation with door/warning theme
tween(exitButton, {
scaleX: 1.2,
scaleY: 1.2,
rotation: Math.PI * 0.06
}, {
duration: 160,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(exitButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 140,
easing: tween.easeOut,
onFinish: function onFinish() {
// On mobile, we can't actually exit, so show a message
LK.effects.flashScreen(0x000000, 1000);
}
});
}
});
};
currentMenu.addChild(exitButton);
// Add glow animation to connection indicator
tween(connectionIndicator, {
alpha: 0.7
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(connectionIndicator, {
alpha: 1
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat animation if still in main menu
if (gameState === 'menu') {
tween(connectionIndicator, {
alpha: 0.7
}, {
duration: 2000,
easing: tween.easeInOut
});
}
}
});
}
});
// Add glow animation to premium indicator
tween(premiumIndicator, {
alpha: 0.7
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(premiumIndicator, {
alpha: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat animation if still in main menu
if (gameState === 'menu') {
tween(premiumIndicator, {
alpha: 0.7
}, {
duration: 1500,
easing: tween.easeInOut
});
}
}
});
}
});
// FPS indicator in top right
var fpsIndicator = new Text2('FPS: 60', {
size: 35,
fill: 0xFFFFFF
});
fpsIndicator.anchor.set(1, 0); // Anchor to top right
fpsIndicator.x = -20; // Position relative to topRight anchor
fpsIndicator.y = 120; // Position below premium indicator
LK.gui.topRight.addChild(fpsIndicator);
// Update FPS counter
var frameCount = 0;
var lastTime = Date.now();
function updateFPS() {
frameCount++;
var currentTime = Date.now();
if (currentTime - lastTime >= 1000) {
// Update every second
var fps = Math.round(frameCount * 1000 / (currentTime - lastTime));
fpsIndicator.setText('FPS: ' + fps);
frameCount = 0;
lastTime = currentTime;
}
// Only update FPS when in main menu
if (gameState === 'menu') {
LK.setTimeout(updateFPS, 16); // ~60 FPS update rate
}
}
updateFPS();
// Add glow animation to FPS indicator
tween(fpsIndicator, {
alpha: 0.8
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(fpsIndicator, {
alpha: 1
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat animation if still in main menu
if (gameState === 'menu') {
tween(fpsIndicator, {
alpha: 0.8
}, {
duration: 2000,
easing: tween.easeInOut
});
}
}
});
}
});
// Special events notification at top of page
var specialEventsNotification = new Text2('🎉 ÖZEL ETKİNLİK: Yılbaşı Bonusu Aktif! 🎉', {
size: 50,
fill: 0xff6b6b
});
specialEventsNotification.anchor.set(0.5, 0.5);
specialEventsNotification.x = 2048 / 2;
specialEventsNotification.y = 100; // Position at very top of main menu
currentMenu.addChild(specialEventsNotification);
// Red blinking effect for New Year bonus
function blinkSpecialEvents() {
tween(specialEventsNotification, {
tint: 0xff0000,
alpha: 0.3
}, {
duration: 400,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(specialEventsNotification, {
tint: 0xff6b6b,
alpha: 1
}, {
duration: 400,
easing: tween.easeInOut,
onFinish: blinkSpecialEvents
});
}
});
}
// Start red blinking animation
blinkSpecialEvents();
// Copyright text
var copyrightText = new Text2('© 2024 FRVR - Tüm hakları saklıdır', {
size: 35,
fill: 0x95a5a6
});
copyrightText.anchor.set(0.5, 0.5);
copyrightText.x = 2048 / 2;
copyrightText.y = 2650; // Position after premium buttons with proper spacing
currentMenu.addChild(copyrightText);
// Add subtle fade animation to copyright
tween(copyrightText, {
alpha: 0.6
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(copyrightText, {
alpha: 1
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat fade animation if still in main menu
if (gameState === 'menu') {
tween(copyrightText, {
alpha: 0.6
}, {
duration: 2000,
easing: tween.easeInOut
});
}
}
});
}
});
}
function togglePause() {
if (gameState !== 'playing') return;
gamePaused = !gamePaused;
pauseButton.text.setText(gamePaused ? '▶️ DEVAM' : '⏸️ DURAKLAT');
pauseButton.bg.tint = gamePaused ? 0x27ae60 : 0x34495e;
if (gamePaused) {
// Show pause menu
pauseMenu = new Container();
game.addChild(pauseMenu);
// Semi-transparent overlay
var overlay = LK.getAsset('shape', {
width: 2048,
height: 2732,
color: 0x000000,
shape: 'box',
anchorX: 0,
anchorY: 0
});
overlay.alpha = 0.7;
pauseMenu.addChild(overlay);
// Pause title
var pauseTitle = new Text2('OYUN DURAKLATILDI', {
size: 80,
fill: 0xFFFFFF
});
pauseTitle.anchor.set(0.5, 0.5);
pauseTitle.x = 2048 / 2;
pauseTitle.y = 800;
pauseMenu.addChild(pauseTitle);
// Resume button
var resumeButton = new MenuButton('▶️ DEVAM ET', 0x27ae60);
resumeButton.x = 2048 / 2;
resumeButton.y = 1200;
resumeButton.onClick = function () {
LK.getSound('Click').play();
togglePause();
};
pauseMenu.addChild(resumeButton);
// Main menu button
var mainMenuButton = new MenuButton('🏠 ANA MENÜ', 0xe74c3c);
mainMenuButton.x = 2048 / 2;
mainMenuButton.y = 1400;
mainMenuButton.onClick = function () {
LK.getSound('Click').play();
// Save game time before going to menu
if (sessionStartTime > 0) {
var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000);
totalGameTime = (storage.totalGameTime || 0) + sessionTime;
storage.totalGameTime = totalGameTime;
sessionStartTime = 0;
}
// Save high score if current score is higher
if (LK.getScore() > highScore) {
highScore = LK.getScore();
storage.highScore = highScore;
}
gamePaused = false;
pauseMenu.destroy();
pauseMenu = null;
pauseButton.visible = false;
createMainMenu();
};
pauseMenu.addChild(mainMenuButton);
// Settings button
var settingsInGameButton = new MenuButton('⚙️ AYARLAR', 0xf39c12);
settingsInGameButton.x = 2048 / 2;
settingsInGameButton.y = 1600;
settingsInGameButton.onClick = function () {
LK.getSound('Click').play();
showSettings();
};
pauseMenu.addChild(settingsInGameButton);
} else {
// Hide pause menu
if (pauseMenu) {
pauseMenu.destroy();
pauseMenu = null;
}
}
}
function startGame() {
gameState = 'countdown';
gamePaused = false;
// Clear menu
if (currentMenu) {
currentMenu.destroy();
currentMenu = null;
}
// Start countdown sequence
startCountdown();
}
function startCountdown() {
// Create countdown container
var countdownContainer = new Container();
game.addChild(countdownContainer);
// Create semi-transparent overlay
var overlay = LK.getAsset('shape', {
width: 2048,
height: 2732,
color: 0x000000,
shape: 'box',
anchorX: 0,
anchorY: 0
});
overlay.alpha = 0.7;
countdownContainer.addChild(overlay);
// Countdown numbers
var countdownNumbers = ['3', '2', '1', 'BAŞLA!'];
var currentIndex = 0;
function showNextNumber() {
if (currentIndex >= countdownNumbers.length) {
// Countdown finished, start actual game
countdownContainer.destroy();
actuallyStartGame();
return;
}
// Create countdown text
var countdownText = new Text2(countdownNumbers[currentIndex], {
size: currentIndex === 3 ? 100 : 200,
fill: currentIndex === 3 ? 0x27ae60 : 0xf1c40f
});
countdownText.anchor.set(0.5, 0.5);
countdownText.x = 2048 / 2;
countdownText.y = 2732 / 2;
countdownContainer.addChild(countdownText);
// Initial animation - start big and fade in
countdownText.scaleX = 3;
countdownText.scaleY = 3;
countdownText.alpha = 0;
// Play countdown sound
LK.getSound('Click').play();
// Animate the number
tween(countdownText, {
scaleX: 1,
scaleY: 1,
alpha: 1
}, {
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
// Hold for a moment then shrink and fade out
LK.setTimeout(function () {
tween(countdownText, {
scaleX: 0.5,
scaleY: 0.5,
alpha: 0,
rotation: Math.PI * 0.1
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
countdownText.destroy();
currentIndex++;
showNextNumber();
}
});
}, currentIndex === 3 ? 500 : 700); // Hold "BAŞLA!" longer
}
});
// Add pulsing glow effect
function pulseGlow() {
if (countdownText.parent) {
tween(countdownText, {
tint: 0xffffff
}, {
duration: 200,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (countdownText.parent) {
tween(countdownText, {
tint: currentIndex === 3 ? 0x27ae60 : 0xf1c40f
}, {
duration: 200,
easing: tween.easeInOut
});
}
}
});
}
}
// Start glow effect after initial animation
LK.setTimeout(pulseGlow, 350);
}
// Start the countdown
showNextNumber();
}
function actuallyStartGame() {
gameState = 'playing';
// Show score and ball collection display
scoreTxt.visible = true;
ballCountTxt.visible = true;
pauseButton.visible = true;
// Hide connection and premium indicators during gameplay
connectionIndicator.visible = false;
premiumIndicator.visible = false;
pauseButton.text.setText('⏸️ DURAKLAT');
pauseButton.bg.tint = 0x34495e;
updateBallDisplay();
// Clear existing baskets before creating new ones
for (var i = baskets.length - 1; i >= 0; i--) {
baskets[i].destroy();
}
baskets = [];
// Create baskets
for (var i = 0; i < 3; i++) {
var basket = new Basket(colors[i]);
basket.x = 2048 / 4 * (i + 1);
basket.y = 2732 - 200;
baskets.push(basket);
game.addChild(basket);
}
// Start background music only if enabled
if (musicEnabled) {
LK.playMusic('Background');
}
// Start tracking game time for this session
sessionStartTime = Date.now();
currentSessionStartTime = sessionStartTime;
// Reset game variables and apply settings
// Apply difficulty level
var baseSpeed = difficultyLevel === 'Easy' ? 0.5 : difficultyLevel === 'Hard' ? 1.5 : 1.0;
// Apply game speed setting
var speedMultiplier = gameSpeedSetting === 'Slow' ? 0.7 : gameSpeedSetting === 'Fast' ? 1.3 : 1.0;
gameSpeed = baseSpeed * speedMultiplier;
consecutiveMatches = 0;
LK.setScore(0);
scoreTxt.setText('0');
// Reset power-ups
slowMotionActive = false;
doublePointsActive = false;
slowMotionTimer = 0;
doublePointsTimer = 0;
powerUpSpawnTimer = 0;
// Clear existing power-ups
for (var p = powerUps.length - 1; p >= 0; p--) {
powerUps[p].destroy();
}
powerUps = [];
// Reset ball collection for new game
ballsCollected.red = 0;
ballsCollected.blue = 0;
ballsCollected.yellow = 0;
storage.redBallsCollected = 0;
storage.blueBallsCollected = 0;
storage.yellowBallsCollected = 0;
// Reset level completion status
levelCompleted = false;
// Reset level to 1
currentLevel = 1;
storage.currentLevel = 1;
}
function showHowToPlay() {
gameState = 'howtoplay';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Title
var titleText = new Text2('NASIL OYNANIR', {
size: 80,
fill: 0xff6b6b
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 400;
currentMenu.addChild(titleText);
// Game objective section
var objectiveText = new Text2('🎯 OYUNUN AMACI', {
size: 60,
fill: 0xf1c40f
});
objectiveText.anchor.set(0.5, 0.5);
objectiveText.x = 2048 / 2;
objectiveText.y = 580;
currentMenu.addChild(objectiveText);
var objectiveDesc = new Text2('Yukarıdan düşen renkli şekilleri aynı renkteki sepetlerle yakalayın!\nDoğru renk eşleştirmeleri yaparak puan kazanın.', {
size: 45,
fill: 0xFFFFFF
});
objectiveDesc.anchor.set(0.5, 0.5);
objectiveDesc.x = 2048 / 2;
objectiveDesc.y = 700;
currentMenu.addChild(objectiveDesc);
// Level system section
var levelText = new Text2('🎮 BÖLÜM SİSTEMİ', {
size: 60,
fill: 0x3498db
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 2048 / 2;
levelText.y = 850;
currentMenu.addChild(levelText);
var levelDesc = new Text2('• BÖLÜM 1: Her renkten 5 top toplayın\n• BÖLÜM 2: Her renkten 10 top toplayın (SON BÖLÜM)\n• Her bölümde oyun daha da hızlanır!', {
size: 40,
fill: 0xFFFFFF
});
levelDesc.anchor.set(0.5, 0.5);
levelDesc.x = 2048 / 2;
levelDesc.y = 970;
currentMenu.addChild(levelDesc);
// Controls section
var controlsText = new Text2('📱 KONTROLLER', {
size: 60,
fill: 0x27ae60
});
controlsText.anchor.set(0.5, 0.5);
controlsText.x = 2048 / 2;
controlsText.y = 1120;
currentMenu.addChild(controlsText);
var controlsDesc = new Text2('• Sepetleri parmağınızla dokunup sürükleyin\n• Sepetler sadece sağa-sola hareket eder\n• Sepeti dokunduğunuz yere getirin', {
size: 40,
fill: 0xFFFFFF
});
controlsDesc.anchor.set(0.5, 0.5);
controlsDesc.x = 2048 / 2;
controlsDesc.y = 1240;
currentMenu.addChild(controlsDesc);
// Scoring section
var scoringText = new Text2('🏆 PUANLAMA SİSTEMİ', {
size: 60,
fill: 0xe67e22
});
scoringText.anchor.set(0.5, 0.5);
scoringText.x = 2048 / 2;
scoringText.y = 1390;
currentMenu.addChild(scoringText);
var scoringDesc = new Text2('• Doğru renk eşleştirme: +10 puan\n• Ardışık başarılı yakalamalar BONUS puan verir\n• Ne kadar çok yakalarsanız o kadar fazla puan!', {
size: 40,
fill: 0xFFFFFF
});
scoringDesc.anchor.set(0.5, 0.5);
scoringDesc.x = 2048 / 2;
scoringDesc.y = 1510;
currentMenu.addChild(scoringDesc);
// Game over conditions
var gameOverText = new Text2('❌ OYUN NASIL BİTER?', {
size: 60,
fill: 0xe74c3c
});
gameOverText.anchor.set(0.5, 0.5);
gameOverText.x = 2048 / 2;
gameOverText.y = 1660;
currentMenu.addChild(gameOverText);
var gameOverDesc = new Text2('• Yanlış renkli sepete şekil düşürürseniz GAME OVER!\n• Herhangi bir şekli kaçırırsanız (yere düşerse) GAME OVER!\n• DİKKAT: Oyun sürekli hızlanır!', {
size: 40,
fill: 0xFFFFFF
});
gameOverDesc.anchor.set(0.5, 0.5);
gameOverDesc.x = 2048 / 2;
gameOverDesc.y = 1780;
currentMenu.addChild(gameOverDesc);
// Tips section
var tipsText = new Text2('💡 PRO İPUÇLARI', {
size: 60,
fill: 0x9b59b6
});
tipsText.anchor.set(0.5, 0.5);
tipsText.x = 2048 / 2;
tipsText.y = 1930;
currentMenu.addChild(tipsText);
var tipsDesc = new Text2('• Sepetleri şekil gelmeden ÖNCE konumlandırın\n• Hızlanan oyuna hazırlıklı olun\n• AYARLAR menüsünden zorluk seviyesini ayarlayın\n• Konsantre olun ve sakin kalın!', {
size: 40,
fill: 0xFFFFFF
});
tipsDesc.anchor.set(0.5, 0.5);
tipsDesc.x = 2048 / 2;
tipsDesc.y = 2070;
currentMenu.addChild(tipsDesc);
// Enhanced back button with improved styling
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2300;
// Add subtle animation to the back button
tween(backButton, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(backButton, {
alpha: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat animation
if (gameState === 'howtoplay') {
tween(backButton, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut
});
}
}
});
}
});
backButton.onClick = function () {
LK.getSound('Click').play();
// Add visual feedback on click
tween(backButton.bg, {
tint: 0x2c3e50
}, {
duration: 100,
onFinish: function onFinish() {
tween(backButton.bg, {
tint: 0x34495e
}, {
duration: 100
});
}
});
createMainMenu();
};
currentMenu.addChild(backButton);
}
function showSettings() {
gameState = 'settings';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Settings title
var settingsText = new Text2('AYARLAR', {
size: 80,
fill: 0xFFFFFF
});
settingsText.anchor.set(0.5, 0.5);
settingsText.x = 2048 / 2;
settingsText.y = 500;
currentMenu.addChild(settingsText);
// Music toggle button
var musicButton = new MenuButton(musicEnabled ? 'Oyun başlayınca arka plan müziği: açık' : 'Oyun başlayınca arka plan müziği: kapalı', musicEnabled ? 0x27ae60 : 0xe74c3c);
musicButton.x = 2048 / 2;
musicButton.y = 700;
musicButton.onClick = function () {
LK.getSound('Click').play();
musicEnabled = !musicEnabled;
storage.musicEnabled = musicEnabled; // Save music preference
if (musicEnabled) {
LK.playMusic('Background');
musicButton.text.setText('Oyun başlayınca arka plan müziği: açık');
musicButton.bg.tint = 0x27ae60;
} else {
LK.stopMusic();
musicButton.text.setText('Oyun başlayınca arka plan müziği: kapalı');
musicButton.bg.tint = 0xe74c3c;
}
};
currentMenu.addChild(musicButton);
// Difficulty Level button
var difficultyButton = new MenuButton('Zorluk: ' + difficultyLevel, 0x8e44ad);
difficultyButton.x = 2048 / 2;
difficultyButton.y = 900;
difficultyButton.onClick = function () {
LK.getSound('Click').play();
var levels = ['Easy', 'Normal', 'Hard'];
var currentIndex = levels.indexOf(difficultyLevel);
difficultyLevel = levels[(currentIndex + 1) % levels.length];
storage.difficultyLevel = difficultyLevel;
difficultyButton.text.setText('Zorluk: ' + difficultyLevel);
var colors = [0x27ae60, 0xf39c12, 0xe74c3c];
difficultyButton.bg.tint = colors[levels.indexOf(difficultyLevel)];
};
currentMenu.addChild(difficultyButton);
// Game Speed button
var speedButton = new MenuButton('Hız: ' + gameSpeedSetting, 0x3498db);
speedButton.x = 2048 / 2;
speedButton.y = 1100;
speedButton.onClick = function () {
LK.getSound('Click').play();
var speeds = ['Slow', 'Normal', 'Fast'];
var currentIndex = speeds.indexOf(gameSpeedSetting);
gameSpeedSetting = speeds[(currentIndex + 1) % speeds.length];
storage.gameSpeedSetting = gameSpeedSetting;
speedButton.text.setText('Hız: ' + gameSpeedSetting);
var colors = [0x95a5a6, 0x3498db, 0xe67e22];
speedButton.bg.tint = colors[speeds.indexOf(gameSpeedSetting)];
};
currentMenu.addChild(speedButton);
// Color Mode button
var colorButton = new MenuButton('Renk: ' + colorMode, 0x16a085);
colorButton.x = 2048 / 2;
colorButton.y = 1300;
colorButton.onClick = function () {
LK.getSound('Click').play();
var modes = ['Normal', 'ColorBlind'];
var currentIndex = modes.indexOf(colorMode);
colorMode = modes[(currentIndex + 1) % modes.length];
storage.colorMode = colorMode;
colorButton.text.setText('Renk: ' + colorMode);
colorButton.bg.tint = colorMode === 'Normal' ? 0x16a085 : 0x34495e;
};
currentMenu.addChild(colorButton);
// Shape Size button
var sizeButton = new MenuButton('Boyut: ' + shapeSize, 0xd35400);
sizeButton.x = 2048 / 2;
sizeButton.y = 1500;
sizeButton.onClick = function () {
LK.getSound('Click').play();
var sizes = ['Small', 'Normal', 'Large'];
var currentIndex = sizes.indexOf(shapeSize);
shapeSize = sizes[(currentIndex + 1) % sizes.length];
storage.shapeSize = shapeSize;
sizeButton.text.setText('Boyut: ' + shapeSize);
var colors = [0x95a5a6, 0xd35400, 0x8e44ad];
sizeButton.bg.tint = colors[sizes.indexOf(shapeSize)];
};
currentMenu.addChild(sizeButton);
// Graphics settings section title
var graphicsTitle = new Text2('🎨 GRAFİK AYARLARI', {
size: 60,
fill: 0xff6b6b
});
graphicsTitle.anchor.set(0.5, 0.5);
graphicsTitle.x = 2048 / 2;
graphicsTitle.y = 1650;
currentMenu.addChild(graphicsTitle);
// Particle effects button
var particleEffectsEnabled = storage.particleEffectsEnabled !== undefined ? storage.particleEffectsEnabled : true;
var particleButton = new MenuButton(particleEffectsEnabled ? '✨ Partikül Efektleri: Açık' : '✨ Partikül Efektleri: Kapalı', particleEffectsEnabled ? 0x27ae60 : 0xe74c3c);
particleButton.x = 2048 / 2;
particleButton.y = 1800;
particleButton.onClick = function () {
LK.getSound('Click').play();
particleEffectsEnabled = !particleEffectsEnabled;
storage.particleEffectsEnabled = particleEffectsEnabled;
if (particleEffectsEnabled) {
particleButton.text.setText('✨ Partikül Efektleri: Açık');
particleButton.bg.tint = 0x27ae60;
} else {
particleButton.text.setText('✨ Partikül Efektleri: Kapalı');
particleButton.bg.tint = 0xe74c3c;
}
};
currentMenu.addChild(particleButton);
// Screen effects button
var screenEffectsEnabled = storage.screenEffectsEnabled !== undefined ? storage.screenEffectsEnabled : true;
var screenButton = new MenuButton(screenEffectsEnabled ? '💥 Ekran Efektleri: Açık' : '💥 Ekran Efektleri: Kapalı', screenEffectsEnabled ? 0x27ae60 : 0xe74c3c);
screenButton.x = 2048 / 2;
screenButton.y = 1950;
screenButton.onClick = function () {
LK.getSound('Click').play();
screenEffectsEnabled = !screenEffectsEnabled;
storage.screenEffectsEnabled = screenEffectsEnabled;
if (screenEffectsEnabled) {
screenButton.text.setText('💥 Ekran Efektleri: Açık');
screenButton.bg.tint = 0x27ae60;
} else {
screenButton.text.setText('💥 Ekran Efektleri: Kapalı');
screenButton.bg.tint = 0xe74c3c;
}
};
currentMenu.addChild(screenButton);
// Animation quality button
var animationQuality = storage.animationQuality || 'High';
var animationButton = new MenuButton('🎭 Animasyon Kalitesi: ' + animationQuality, 0x9b59b6);
animationButton.x = 2048 / 2;
animationButton.y = 2100;
animationButton.onClick = function () {
LK.getSound('Click').play();
var qualities = ['Low', 'Medium', 'High'];
var currentIndex = qualities.indexOf(animationQuality);
animationQuality = qualities[(currentIndex + 1) % qualities.length];
storage.animationQuality = animationQuality;
animationButton.text.setText('🎭 Animasyon Kalitesi: ' + animationQuality);
var colors = [0x95a5a6, 0xf39c12, 0x9b59b6];
animationButton.bg.tint = colors[qualities.indexOf(animationQuality)];
};
currentMenu.addChild(animationButton);
// Enhanced back button with improved styling
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2250;
// Add subtle animation to the back button
tween(backButton, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(backButton, {
alpha: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat animation
if (gameState === 'settings') {
tween(backButton, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut
});
}
}
});
}
});
backButton.onClick = function () {
LK.getSound('Click').play();
// Add visual feedback on click
tween(backButton.bg, {
tint: 0x2c3e50
}, {
duration: 100,
onFinish: function onFinish() {
tween(backButton.bg, {
tint: 0x34495e
}, {
duration: 100
});
}
});
createMainMenu();
};
currentMenu.addChild(backButton);
}
function showStatistics() {
gameState = 'statistics';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Statistics title
var statisticsTitle = new Text2('İSTATİSTİKLERİM', {
size: 80,
fill: 0x6c5ce7
});
statisticsTitle.anchor.set(0.5, 0.5);
statisticsTitle.x = 2048 / 2;
statisticsTitle.y = 500;
currentMenu.addChild(statisticsTitle);
// High score section
var highScoreTitle = new Text2('🏆 EN YÜKSEK SKOR', {
size: 60,
fill: 0xf1c40f
});
highScoreTitle.anchor.set(0.5, 0.5);
highScoreTitle.x = 2048 / 2;
highScoreTitle.y = 700;
currentMenu.addChild(highScoreTitle);
var highScoreValue = new Text2(highScore.toString(), {
size: 80,
fill: 0xFFFFFF
});
highScoreValue.anchor.set(0.5, 0.5);
highScoreValue.x = 2048 / 2;
highScoreValue.y = 800;
currentMenu.addChild(highScoreValue);
// Total game time section
var gameTimeTitle = new Text2('⏰ TOPLAM OYUN SÜRESİ', {
size: 60,
fill: 0x9b59b6
});
gameTimeTitle.anchor.set(0.5, 0.5);
gameTimeTitle.x = 2048 / 2;
gameTimeTitle.y = 1000;
currentMenu.addChild(gameTimeTitle);
// Get the most current total time from storage
var currentTotalTime = storage.totalGameTime || 0;
var gameTimeValue = new Text2(formatGameTime(currentTotalTime), {
size: 70,
fill: 0xFFFFFF
});
gameTimeValue.anchor.set(0.5, 0.5);
gameTimeValue.x = 2048 / 2;
gameTimeValue.y = 1120;
currentMenu.addChild(gameTimeValue);
// Achievement section
var achievementsTitle = new Text2('🎯 BAŞARILARINIZ', {
size: 60,
fill: 0x27ae60
});
achievementsTitle.anchor.set(0.5, 0.5);
achievementsTitle.x = 2048 / 2;
achievementsTitle.y = 1320;
currentMenu.addChild(achievementsTitle);
// Show achievements based on high score
var achievementText = '';
if (highScore >= 1000) {
achievementText = '• Efsane Oyuncu: 1000+ puan\n• Usta Oyuncu: 500+ puan\n• Deneyimli Oyuncu: 100+ puan\n• Başlangıç: İlk oyun';
} else if (highScore >= 500) {
achievementText = '• Usta Oyuncu: 500+ puan\n• Deneyimli Oyuncu: 100+ puan\n• Başlangıç: İlk oyun';
} else if (highScore >= 100) {
achievementText = '• Deneyimli Oyuncu: 100+ puan\n• Başlangıç: İlk oyun';
} else if (highScore > 0) {
achievementText = '• Başlangıç: İlk oyun';
} else {
achievementText = 'Henüz hiç oynamadınız!\nOyuna başlayarak ilk başarımınızı kazanın.';
}
var achievementsList = new Text2(achievementText, {
size: 45,
fill: 0xecf0f1
});
achievementsList.anchor.set(0.5, 0.5);
achievementsList.x = 2048 / 2;
achievementsList.y = 1480;
currentMenu.addChild(achievementsList);
// Progress section
var progressTitle = new Text2('📊 SONRAKI BAŞARIM', {
size: 60,
fill: 0x3498db
});
progressTitle.anchor.set(0.5, 0.5);
progressTitle.x = 2048 / 2;
progressTitle.y = 1680;
currentMenu.addChild(progressTitle);
var nextGoal = '';
if (highScore < 100) {
nextGoal = 'Deneyimli Oyuncu için ' + (100 - highScore) + ' puan daha';
} else if (highScore < 500) {
nextGoal = 'Usta Oyuncu için ' + (500 - highScore) + ' puan daha';
} else if (highScore < 1000) {
nextGoal = 'Efsane Oyuncu için ' + (1000 - highScore) + ' puan daha';
} else {
nextGoal = 'Tüm başarımları tamamladınız!';
}
var nextGoalText = new Text2(nextGoal, {
size: 50,
fill: 0xbdc3c7
});
nextGoalText.anchor.set(0.5, 0.5);
nextGoalText.x = 2048 / 2;
nextGoalText.y = 1780;
currentMenu.addChild(nextGoalText);
// Back button
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2000;
backButton.onClick = function () {
LK.getSound('Click').play();
createMainMenu();
};
currentMenu.addChild(backButton);
}
function showCreators() {
gameState = 'creators';
// Stop background music and play Creators music
LK.stopMusic();
LK.playMusic('Creators');
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Creators title with animated styling
var creatorsTitle = new Text2('🎮 YAPIMCILAR 🎮', {
size: 90,
fill: 0xff6b6b
});
creatorsTitle.anchor.set(0.5, 0.5);
creatorsTitle.x = 2048 / 2;
creatorsTitle.y = 500;
currentMenu.addChild(creatorsTitle);
// Animate title with color cycling
var titleColors = [0xff6b6b, 0xfeca57, 0x4da6ff, 0x9b59b6]; // Red, Yellow, Blue, Purple
var currentColorIndex = 0;
function animateCreatorsTitle() {
currentColorIndex = (currentColorIndex + 1) % titleColors.length;
tween(creatorsTitle, {
tint: titleColors[currentColorIndex],
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(creatorsTitle, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
onFinish: animateCreatorsTitle
});
}
});
}
animateCreatorsTitle();
// Game development section
var gameDevTitle = new Text2('🎯 OYUN GELİŞTİRME EKİBİ', {
size: 65,
fill: 0xf1c40f
});
gameDevTitle.anchor.set(0.5, 0.5);
gameDevTitle.x = 2048 / 2;
gameDevTitle.y = 700;
currentMenu.addChild(gameDevTitle);
// Lead developer
var leadDeveloperText = new Text2('👨💻 Ana Geliştirici: Şafak\n\n🔧 Oyun Motoru: FRVR LK Engine\n💻 Programlama: JavaScript\n🎨 Grafik Tasarım: Dijital Sanat', {
size: 50,
fill: 0xFFFFFF
});
leadDeveloperText.anchor.set(0.5, 0.5);
leadDeveloperText.x = 2048 / 2;
leadDeveloperText.y = 950;
currentMenu.addChild(leadDeveloperText);
// Special thanks section
var thanksTitle = new Text2('🙏 TEŞEKKÜRLER', {
size: 60,
fill: 0x27ae60
});
thanksTitle.anchor.set(0.5, 0.5);
thanksTitle.x = 2048 / 2;
thanksTitle.y = 1200;
currentMenu.addChild(thanksTitle);
var thanksText = new Text2('• FRVR oyun platformu ve geliştirme araçları\n• Oyuncularımızın değerli geri bildirimleri\n• Beta test sürecindeki katkıları\n• Müzik ve ses efektleri için açık kaynak topluluk', {
size: 45,
fill: 0xecf0f1
});
thanksText.anchor.set(0.5, 0.5);
thanksText.x = 2048 / 2;
thanksText.y = 1400;
currentMenu.addChild(thanksText);
// Game info section
var gameInfoTitle = new Text2('ℹ️ OYUN BİLGİLERİ', {
size: 60,
fill: 0x3498db
});
gameInfoTitle.anchor.set(0.5, 0.5);
gameInfoTitle.x = 2048 / 2;
gameInfoTitle.y = 1600;
currentMenu.addChild(gameInfoTitle);
var gameInfoText = new Text2('📅 Geliştirme Başlangıcı: 2024\n🎮 Platform: FRVR\n📱 Desteklenen Cihazlar: Mobil & Masaüstü\n🌍 Dil Desteği: Türkçe', {
size: 45,
fill: 0xbdc3c7
});
gameInfoText.anchor.set(0.5, 0.5);
gameInfoText.x = 2048 / 2;
gameInfoText.y = 1780;
currentMenu.addChild(gameInfoText);
// Contact section
var contactTitle = new Text2('📞 İLETİŞİM', {
size: 60,
fill: 0xe67e22
});
contactTitle.anchor.set(0.5, 0.5);
contactTitle.x = 2048 / 2;
contactTitle.y = 1980;
currentMenu.addChild(contactTitle);
var contactText = new Text2('Geri bildirimleriniz ve önerileriniz için:\n🎮 FRVR platform üzerinden mesaj gönderebilirsiniz', {
size: 45,
fill: 0x95a5a6
});
contactText.anchor.set(0.5, 0.5);
contactText.x = 2048 / 2;
contactText.y = 2100;
currentMenu.addChild(contactText);
// Back button
var backButton = new MenuButton('🔙 ANA MENÜYE DÖN', 0x95a5a6);
backButton.x = 2048 / 2;
backButton.y = 2300;
backButton.onClick = function () {
LK.getSound('Click').play();
// Stop Creators music and restore background music if enabled
LK.stopMusic();
if (musicEnabled) {
LK.playMusic('Background');
}
createMainMenu();
};
currentMenu.addChild(backButton);
}
// Check if user is already logged in
var userLoggedIn = storage.userLoggedIn || false;
// Create login screen function
function createLoginScreen() {
gameState = 'login';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Play main menu background music
if (musicEnabled) {
LK.playMusic('Mainmenubackground');
}
// Login screen title
var titleText = new Text2('TOPLARI YAKALA', {
size: 100,
fill: 0xffff00
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 600;
currentMenu.addChild(titleText);
// Welcome text
var welcomeText = new Text2('OYUNA HOŞGELDİNİZ', {
size: 60,
fill: 0xFFFFFF
});
welcomeText.anchor.set(0.5, 0.5);
welcomeText.x = 2048 / 2;
welcomeText.y = 800;
currentMenu.addChild(welcomeText);
// Guest login button
var guestButton = new MenuButton('👤 MİSAFİR OLARAK GİRİŞ YAP', 0x27ae60);
guestButton.x = 2048 / 2;
guestButton.y = 1200;
// Enhanced guest button animations
function pulseGuestButton() {
tween(guestButton, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(guestButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: pulseGuestButton
});
}
});
}
// Color cycling animation
var guestColors = [0x27ae60, 0x2ecc71, 0x1abc9c, 0x16a085];
var currentGuestColorIndex = 0;
function animateGuestButton() {
currentGuestColorIndex = (currentGuestColorIndex + 1) % guestColors.length;
tween(guestButton.bg, {
tint: guestColors[currentGuestColorIndex]
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: animateGuestButton
});
}
// Start animations
pulseGuestButton();
animateGuestButton();
guestButton.onClick = function () {
LK.getSound('Click').play();
// Save guest login status
storage.userLoggedIn = true;
storage.loginType = 'guest';
userLoggedIn = true;
// Enhanced click animation
tween(guestButton, {
scaleX: 1.2,
scaleY: 1.2,
rotation: Math.PI * 0.05
}, {
duration: 150,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(guestButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
createMainMenu();
}
});
}
});
};
currentMenu.addChild(guestButton);
// Register button
var registerButton = new MenuButton('📝 KAYIT OL', 0x3498db);
registerButton.x = 2048 / 2;
registerButton.y = 1400;
// Enhanced register button animations
function pulseRegisterButton() {
tween(registerButton, {
scaleX: 1.08,
scaleY: 1.08
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(registerButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: pulseRegisterButton
});
}
});
}
// Color cycling for register button
var registerColors = [0x3498db, 0x2980b9, 0x9b59b6, 0x8e44ad];
var currentRegisterColorIndex = 0;
function animateRegisterButton() {
currentRegisterColorIndex = (currentRegisterColorIndex + 1) % registerColors.length;
tween(registerButton.bg, {
tint: registerColors[currentRegisterColorIndex]
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: animateRegisterButton
});
}
// Start animations
pulseRegisterButton();
animateRegisterButton();
registerButton.onClick = function () {
LK.getSound('Click').play();
// Enhanced click animation
tween(registerButton, {
scaleX: 1.3,
scaleY: 1.3,
rotation: Math.PI * 0.1
}, {
duration: 200,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(registerButton, {
scaleX: 1,
scaleY: 1,
rotation: 0
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
// Show register screen or message
showRegisterInfo();
}
});
}
});
};
currentMenu.addChild(registerButton);
// Privacy and Security Section
var privacyTitle = new Text2('🔒 GÜVENLİK VE GİZLİLİK', {
size: 50,
fill: 0x27ae60
});
privacyTitle.anchor.set(0.5, 0.5);
privacyTitle.x = 2048 / 2;
privacyTitle.y = 1600;
currentMenu.addChild(privacyTitle);
// Secure connection indicator
var secureConnectionText = new Text2('🔐 Güvenli Bağlantı Aktif', {
size: 35,
fill: 0x27ae60
});
secureConnectionText.anchor.set(0.5, 0.5);
secureConnectionText.x = 2048 / 2;
secureConnectionText.y = 1680;
currentMenu.addChild(secureConnectionText);
// Privacy policy link
var privacyPolicyButton = new MenuButton('📄 Gizlilik Politikası', 0x3498db);
privacyPolicyButton.x = 2048 / 4;
privacyPolicyButton.y = 1780;
privacyPolicyButton.onClick = function () {
LK.getSound('Click').play();
showPrivacyPolicy();
};
currentMenu.addChild(privacyPolicyButton);
// Terms of service link
var termsButton = new MenuButton('📋 Kullanım Şartları', 0x9b59b6);
termsButton.x = 2048 * 3 / 4;
termsButton.y = 1780;
termsButton.onClick = function () {
LK.getSound('Click').play();
showTermsOfService();
};
currentMenu.addChild(termsButton);
// Social proof and trust section
var socialProofTitle = new Text2('🏆 OYUNCU İSTATİSTİKLERİ', {
size: 50,
fill: 0x27ae60
});
socialProofTitle.anchor.set(0.5, 0.5);
socialProofTitle.x = 2048 / 2;
socialProofTitle.y = 1880;
currentMenu.addChild(socialProofTitle);
// User statistics with animated counters
var userStatsText = new Text2('📊 50.000+ Kayıtlı Oyuncu\n🎯 En Yüksek Skor: 15.000 Puan\n🎮 Bu Hafta: 2.500+ Aktif Oyuncu', {
size: 42,
fill: 0xFFFFFF
});
userStatsText.anchor.set(0.5, 0.5);
userStatsText.x = 2048 / 2;
userStatsText.y = 1980;
currentMenu.addChild(userStatsText);
// Add pulsing animation to statistics
tween(userStatsText, {
alpha: 0.7
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(userStatsText, {
alpha: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (gameState === 'login') {
tween(userStatsText, {
alpha: 0.7
}, {
duration: 1500,
easing: tween.easeInOut
});
}
}
});
}
});
// Rating system display
var ratingText = new Text2('⭐⭐⭐⭐⭐ (4.8/5) - 2.500 Değerlendirme', {
size: 45,
fill: 0xf1c40f
});
ratingText.anchor.set(0.5, 0.5);
ratingText.x = 2048 / 2;
ratingText.y = 2120;
currentMenu.addChild(ratingText);
// Animate rating with golden glow effect
tween(ratingText, {
tint: 0xfeca57,
scaleX: 1.05,
scaleY: 1.05
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(ratingText, {
tint: 0xf1c40f,
scaleX: 1,
scaleY: 1
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (gameState === 'login') {
tween(ratingText, {
tint: 0xfeca57,
scaleX: 1.05,
scaleY: 1.05
}, {
duration: 1200,
easing: tween.easeInOut
});
}
}
});
}
});
// Security certificates display
var securityText = new Text2('🔒 SSL Güvenli • 🛡️ Veri Koruması Sertifikası • ✅ GDPR Uyumlu', {
size: 38,
fill: 0x27ae60
});
securityText.anchor.set(0.5, 0.5);
securityText.x = 2048 / 2;
securityText.y = 2220;
currentMenu.addChild(securityText);
// Social Media and Community Section
var socialTitle = new Text2('🌐 SOSYAL MEDYA VE TOPLULUK', {
size: 50,
fill: 0x3498db
});
socialTitle.anchor.set(0.5, 0.5);
socialTitle.x = 2048 / 2;
socialTitle.y = 2340;
currentMenu.addChild(socialTitle);
// Social media buttons row
var facebookButton = new MenuButton('📘 Facebook', 0x4267B2);
facebookButton.x = 2048 / 4;
facebookButton.y = 2450;
// Scale down social buttons
facebookButton.scaleX = 0.8;
facebookButton.scaleY = 0.8;
facebookButton.onClick = function () {
LK.getSound('Click').play();
// Simulate opening Facebook page
LK.effects.flashScreen(0x4267B2, 300);
};
currentMenu.addChild(facebookButton);
var twitterButton = new MenuButton('🐦 Twitter', 0x1DA1F2);
twitterButton.x = 2048 * 3 / 4;
twitterButton.y = 2450;
// Scale down social buttons
twitterButton.scaleX = 0.8;
twitterButton.scaleY = 0.8;
twitterButton.onClick = function () {
LK.getSound('Click').play();
// Simulate opening Twitter page
LK.effects.flashScreen(0x1DA1F2, 300);
};
currentMenu.addChild(twitterButton);
// Friend invitation feature
var inviteFriendsButton = new MenuButton('👥 ARKADAŞLARI DAVET ET', 0x27ae60);
inviteFriendsButton.x = 2048 / 2;
inviteFriendsButton.y = 2570;
// Enhanced invite button animations
function pulseInviteButton() {
tween(inviteFriendsButton, {
scaleX: 1.05,
scaleY: 1.05
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(inviteFriendsButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: pulseInviteButton
});
}
});
}
pulseInviteButton();
inviteFriendsButton.onClick = function () {
LK.getSound('Click').play();
// Show friend invitation screen
showFriendInvitation();
};
currentMenu.addChild(inviteFriendsButton);
// Community links
var communityButton = new MenuButton('💬 TOPLULUK - Discord', 0x7289DA);
communityButton.x = 2048 / 2;
communityButton.y = 2690;
communityButton.onClick = function () {
LK.getSound('Click').play();
// Simulate opening Discord community
LK.effects.flashScreen(0x7289DA, 300);
};
currentMenu.addChild(communityButton);
// Info text
var infoText = new Text2('Misafir girişi ile tüm özelliklere erişebilirsiniz.\nKayıt olarak ilerlemenizi kaybetmeden oynayabilirsiniz.', {
size: 40,
fill: 0xbdc3c7
});
infoText.anchor.set(0.5, 0.5);
infoText.x = 2048 / 2;
infoText.y = 2800;
currentMenu.addChild(infoText);
}
// Function to show register information
function showRegisterInfo() {
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Title
var titleText = new Text2('KAYIT OL', {
size: 80,
fill: 0x3498db
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 600;
currentMenu.addChild(titleText);
// Info message
var infoText = new Text2('Kayıt özelliği yakında gelecek!\n\nŞu an için misafir girişi ile\ntüm oyun özelliklerini kullanabilirsiniz.', {
size: 50,
fill: 0xFFFFFF
});
infoText.anchor.set(0.5, 0.5);
infoText.x = 2048 / 2;
infoText.y = 1000;
currentMenu.addChild(infoText);
// Social proof section for registration
var socialProofTitle = new Text2('🌟 NEDEN BİZE GÜVENİYORLAR?', {
size: 55,
fill: 0x3498db
});
socialProofTitle.anchor.set(0.5, 0.5);
socialProofTitle.x = 2048 / 2;
socialProofTitle.y = 1200;
currentMenu.addChild(socialProofTitle);
// Trust indicators with animated effects
var trustText = new Text2('👥 50.000+ Güvenli Kullanıcı\n⭐ 4.8/5 Kullanıcı Memnuniyeti\n🏆 "En İyi Mobil Oyun" Ödülü\n🔒 %100 Güvenli Veri Saklama', {
size: 45,
fill: 0x27ae60
});
trustText.anchor.set(0.5, 0.5);
trustText.x = 2048 / 2;
trustText.y = 1350;
currentMenu.addChild(trustText);
// Add trust badge glow animation
tween(trustText, {
alpha: 0.8,
scaleX: 1.02,
scaleY: 1.02
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(trustText, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (gameState === 'register') {
tween(trustText, {
alpha: 0.8,
scaleX: 1.02,
scaleY: 1.02
}, {
duration: 1000,
easing: tween.easeInOut
});
}
}
});
}
});
// Registration benefits
var benefitsText = new Text2('KAYIT AVANTAJLARI:\n• ☁️ İlerlemeniz bulutta saklanacak\n• 🏆 Başarımlarınız kalıcı olacak\n• 📊 Liderlik tablosunda yer alacaksınız\n• 🎁 Özel kayıt bonusu alacaksınız', {
size: 42,
fill: 0xFFFFFF
});
benefitsText.anchor.set(0.5, 0.5);
benefitsText.x = 2048 / 2;
benefitsText.y = 1550;
currentMenu.addChild(benefitsText);
// Temporary guest login button
var tempGuestButton = new MenuButton('👤 MİSAFİR GİRİŞİ YAP', 0x27ae60);
tempGuestButton.x = 2048 / 2;
tempGuestButton.y = 1700;
tempGuestButton.onClick = function () {
LK.getSound('Click').play();
storage.userLoggedIn = true;
storage.loginType = 'guest';
userLoggedIn = true;
createMainMenu();
};
currentMenu.addChild(tempGuestButton);
// Privacy and Security Links
var privacyLinksTitle = new Text2('📋 YASAL BELGELER', {
size: 50,
fill: 0x3498db
});
privacyLinksTitle.anchor.set(0.5, 0.5);
privacyLinksTitle.x = 2048 / 2;
privacyLinksTitle.y = 1800;
currentMenu.addChild(privacyLinksTitle);
// Privacy policy link
var privacyPolicyButton = new MenuButton('📄 Gizlilik Politikası', 0x3498db);
privacyPolicyButton.x = 2048 / 4;
privacyPolicyButton.y = 1900;
privacyPolicyButton.onClick = function () {
LK.getSound('Click').play();
showPrivacyPolicy();
};
currentMenu.addChild(privacyPolicyButton);
// Terms of service link
var termsButton = new MenuButton('📋 Kullanım Şartları', 0x9b59b6);
termsButton.x = 2048 * 3 / 4;
termsButton.y = 1900;
termsButton.onClick = function () {
LK.getSound('Click').play();
showTermsOfService();
};
currentMenu.addChild(termsButton);
// Back button
var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2150;
backButton.onClick = function () {
LK.getSound('Click').play();
createLoginScreen();
};
currentMenu.addChild(backButton);
}
// Always show login screen every time the game starts
createLoginScreen();
// Spawn falling shapes
function spawnShape() {
var randomColor = colors[Math.floor(Math.random() * colors.length)];
var shape = new FallingShape(randomColor);
shape.x = Math.random() * (2048 - 160) + 80;
shape.y = -80;
// Apply difficulty and speed settings to shape speed
var baseFallSpeed = difficultyLevel === 'Easy' ? 2 : difficultyLevel === 'Hard' ? 4 : 3;
var speedMultiplier = gameSpeedSetting === 'Slow' ? 0.7 : gameSpeedSetting === 'Fast' ? 1.3 : 1.0;
shape.speed = baseFallSpeed * speedMultiplier + gameSpeed * 0.5;
// Apply slow motion effect if active
if (slowMotionActive) {
shape.speed *= 0.5;
}
// Add beautiful entrance animation based on quality settings
var animationQuality = storage.animationQuality || 'High';
if (animationQuality !== 'Low') {
// Start with small scale and fade in
shape.scaleX = 0.1;
shape.scaleY = 0.1;
shape.alpha = 0;
// Animate scale with bounce effect
var animDuration = animationQuality === 'Medium' ? 200 : 300;
tween(shape, {
scaleX: 1.2,
scaleY: 1.2,
alpha: 1
}, {
duration: animDuration,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(shape, {
scaleX: 1,
scaleY: 1
}, {
duration: animDuration * 0.67,
easing: tween.easeOut
});
}
});
// Add subtle rotation animation only on high quality
if (animationQuality === 'High') {
tween(shape, {
rotation: Math.PI * 0.1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(shape, {
rotation: -Math.PI * 0.1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Continue subtle rotation loop
if (shape.parent) {
tween(shape, {
rotation: 0
}, {
duration: 400,
easing: tween.easeInOut
});
}
}
});
}
});
}
}
fallingShapes.push(shape);
game.addChild(shape);
}
// Handle touch/mouse events
function handleMove(x, y, obj) {
if (gameState === 'playing' && draggedBasket) {
draggedBasket.x = Math.max(100, Math.min(1948, x));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Only handle basket dragging during gameplay
if (gameState !== 'playing') {
return;
}
// Check if touch is on any basket
for (var i = 0; i < baskets.length; i++) {
var basket = baskets[i];
var dx = x - basket.x;
var dy = y - basket.y;
if (Math.abs(dx) < 100 && Math.abs(dy) < 60) {
draggedBasket = basket;
break;
}
}
};
game.up = function (x, y, obj) {
draggedBasket = null;
};
// Main game loop
var shapeSpawnTimer = 0;
var difficultyTimer = 0;
game.update = function () {
// Update background particles (always running)
var particleEffectsEnabled = storage.particleEffectsEnabled !== undefined ? storage.particleEffectsEnabled : true;
if (particleEffectsEnabled) {
particleSpawnTimer++;
var spawnRate = storage.animationQuality === 'Low' ? 40 : storage.animationQuality === 'Medium' ? 30 : 20;
if (particleSpawnTimer >= spawnRate) {
// Spawn particle every spawnRate frames
var particle = new BackgroundParticle();
particle.x = Math.random() * 2048;
particle.y = 2732 + 50; // Start below screen
backgroundParticles.push(particle);
backgroundContainer.addChild(particle);
particleSpawnTimer = 0;
}
}
// Update and clean up particles
for (var p = backgroundParticles.length - 1; p >= 0; p--) {
var particle = backgroundParticles[p];
if (particle.shouldRemove) {
particle.destroy();
backgroundParticles.splice(p, 1);
}
}
// Only run game logic when actually playing and not paused
if (gameState !== 'playing' || gamePaused) {
return;
}
// Update power-up timers
if (slowMotionActive) {
slowMotionTimer--;
if (slowMotionTimer <= 0) {
slowMotionActive = false;
updateBallDisplay();
}
}
if (doublePointsActive) {
doublePointsTimer--;
if (doublePointsTimer <= 0) {
doublePointsActive = false;
updateBallDisplay();
}
}
// Spawn power-ups occasionally
powerUpSpawnTimer++;
if (powerUpSpawnTimer >= 900) {
// Every 15 seconds
if (Math.random() < 0.7) {
// 70% chance to spawn
var powerUpType = Math.random() < 0.5 ? 'slowMotion' : 'doublePoints';
var powerUp = new PowerUp(powerUpType);
powerUp.x = Math.random() * (2048 - 120) + 60;
powerUp.y = -60;
powerUps.push(powerUp);
game.addChild(powerUp);
}
powerUpSpawnTimer = 0;
}
// Update power-ups
for (var p = powerUps.length - 1; p >= 0; p--) {
var powerUp = powerUps[p];
// Check if power-up went off screen
if (powerUp.lastY < 2732 && powerUp.y >= 2732) {
powerUp.destroy();
powerUps.splice(p, 1);
continue;
}
// Check collision with baskets
for (var j = 0; j < baskets.length; j++) {
var basket = baskets[j];
if (powerUp.intersects(basket)) {
// Activate power-up
LK.getSound('powerup').play();
if (powerUp.type === 'slowMotion') {
slowMotionActive = true;
slowMotionTimer = 600; // 10 seconds
} else if (powerUp.type === 'doublePoints') {
doublePointsActive = true;
doublePointsTimer = 600; // 10 seconds
}
updateBallDisplay();
// Visual effect
LK.effects.flashScreen(powerUp.type === 'slowMotion' ? 0x3498db : 0xf1c40f, 300);
powerUp.destroy();
powerUps.splice(p, 1);
break;
}
}
}
// Spawn shapes
shapeSpawnTimer++;
// Calculate spawn interval based on difficulty and slow motion
var baseInterval = difficultyLevel === 'Easy' ? 150 : difficultyLevel === 'Hard' ? 90 : 120;
var spawnInterval = Math.max(30, baseInterval - gameSpeed * 10);
if (slowMotionActive) {
spawnInterval *= 1.5; // Slow down spawning during slow motion
}
if (shapeSpawnTimer >= spawnInterval) {
spawnShape();
shapeSpawnTimer = 0;
}
// Update difficulty
difficultyTimer++;
if (difficultyTimer >= 600) {
// Every 10 seconds
gameSpeed += 0.2;
difficultyTimer = 0;
}
// Update falling shapes
for (var i = fallingShapes.length - 1; i >= 0; i--) {
var shape = fallingShapes[i];
// Check if shape went off screen
if (shape.lastY < 2732 && shape.y >= 2732) {
// Shape missed - game over
// Save final game time
if (sessionStartTime > 0) {
var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000);
totalGameTime = (storage.totalGameTime || 0) + sessionTime;
storage.totalGameTime = totalGameTime;
sessionStartTime = 0; // Reset session start time
}
// Save high score if current score is higher
if (LK.getScore() > highScore) {
highScore = LK.getScore();
storage.highScore = highScore;
}
LK.getSound('miss').play();
var screenEffectsEnabled = storage.screenEffectsEnabled !== undefined ? storage.screenEffectsEnabled : true;
if (screenEffectsEnabled) {
LK.effects.flashScreen(0xff0000, 500);
}
LK.showGameOver();
return;
}
// Check collision with baskets
var caught = false;
for (var j = 0; j < baskets.length; j++) {
var basket = baskets[j];
if (shape.intersects(basket)) {
if (shape.color === basket.color) {
// Correct match
consecutiveMatches++;
var points = 10 + consecutiveMatches * 2;
// Apply double points if active
if (doublePointsActive) {
points *= 2;
}
LK.setScore(LK.getScore() + points);
scoreTxt.setText(LK.getScore());
// Update ball collection count
ballsCollected[shape.color]++;
storage[shape.color + 'BallsCollected'] = ballsCollected[shape.color];
updateBallDisplay();
// Check if all requirements are met
if (ballsCollected.red >= ballRequirements.red && ballsCollected.blue >= ballRequirements.blue && ballsCollected.yellow >= ballRequirements.yellow) {
// If this is level 2 (final level), show you win
if (currentLevel === 2) {
// Save final game time
if (sessionStartTime > 0) {
var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000);
totalGameTime = (storage.totalGameTime || 0) + sessionTime;
storage.totalGameTime = totalGameTime;
sessionStartTime = 0;
}
// Save high score if current score is higher
if (LK.getScore() > highScore) {
highScore = LK.getScore();
storage.highScore = highScore;
}
LK.showYouWin();
} else {
showLevelComplete();
}
return;
}
LK.getSound('catch').play();
LK.getSound('basketball').play();
// Visual feedback
tween(basket, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(basket, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
}
});
} else {
// Wrong color - game over
consecutiveMatches = 0;
// Save final game time
if (sessionStartTime > 0) {
var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000);
totalGameTime = (storage.totalGameTime || 0) + sessionTime;
storage.totalGameTime = totalGameTime;
sessionStartTime = 0; // Reset session start time
}
// Save high score if current score is higher
if (LK.getScore() > highScore) {
highScore = LK.getScore();
storage.highScore = highScore;
}
LK.getSound('miss').play();
var screenEffectsEnabled = storage.screenEffectsEnabled !== undefined ? storage.screenEffectsEnabled : true;
if (screenEffectsEnabled) {
LK.effects.flashScreen(0xff0000, 500);
}
LK.showGameOver();
return;
}
shape.destroy();
fallingShapes.splice(i, 1);
caught = true;
break;
}
}
// Remove shapes that went too far down without being caught
if (!caught && shape.y > 2800) {
shape.destroy();
fallingShapes.splice(i, 1);
}
}
};
function showLevelComplete() {
gameState = 'levelcomplete';
// Save final game time
if (sessionStartTime > 0) {
var sessionTime = Math.floor((Date.now() - sessionStartTime) / 1000);
totalGameTime = (storage.totalGameTime || 0) + sessionTime;
storage.totalGameTime = totalGameTime;
sessionStartTime = 0;
}
// Save high score if current score is higher
if (LK.getScore() > highScore) {
highScore = LK.getScore();
storage.highScore = highScore;
}
// Save current level progress
currentLevel++;
storage.currentLevel = currentLevel;
levelCompleted = true;
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Level complete title with animation
var completeTitle = new Text2('BÖLÜM ' + (currentLevel - 1) + ' TAMAMLANDI!', {
size: 90,
fill: 0x27ae60
});
completeTitle.anchor.set(0.5, 0.5);
completeTitle.x = 2048 / 2;
completeTitle.y = 600;
currentMenu.addChild(completeTitle);
// Animate title with celebration effect
tween(completeTitle, {
scaleX: 1.2,
scaleY: 1.2,
tint: 0xf1c40f
}, {
duration: 500,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(completeTitle, {
scaleX: 1,
scaleY: 1,
tint: 0x27ae60
}, {
duration: 300,
easing: tween.easeOut
});
}
});
// Score section
var scoreTitle = new Text2('KAZANDIĞINIZ PUAN', {
size: 60,
fill: 0xf1c40f
});
scoreTitle.anchor.set(0.5, 0.5);
scoreTitle.x = 2048 / 2;
scoreTitle.y = 900;
currentMenu.addChild(scoreTitle);
var scoreValue = new Text2(LK.getScore().toString(), {
size: 100,
fill: 0xFFFFFF
});
scoreValue.anchor.set(0.5, 0.5);
scoreValue.x = 2048 / 2;
scoreValue.y = 1020;
currentMenu.addChild(scoreValue);
// Next level preview
var nextLevelTitle = new Text2('BÖLÜM ' + currentLevel + ' HAZIR!', {
size: 70,
fill: 0x3498db
});
nextLevelTitle.anchor.set(0.5, 0.5);
nextLevelTitle.x = 2048 / 2;
nextLevelTitle.y = 1250;
currentMenu.addChild(nextLevelTitle);
var nextLevelDesc = new Text2('Yeni bölümde daha hızlı şekiller\nve daha zorlu hedefler sizi bekliyor!', {
size: 50,
fill: 0xecf0f1
});
nextLevelDesc.anchor.set(0.5, 0.5);
nextLevelDesc.x = 2048 / 2;
nextLevelDesc.y = 1400;
currentMenu.addChild(nextLevelDesc);
// Progress celebration
var progressText = new Text2('🎉 TEBRİKLER! 🎉\nYeni seviyeye ulaştınız!', {
size: 55,
fill: 0xff6b6b
});
progressText.anchor.set(0.5, 0.5);
progressText.x = 2048 / 2;
progressText.y = 1600;
currentMenu.addChild(progressText);
// Buttons
var nextLevelButton = new MenuButton('BÖLÜM ' + currentLevel + '\'E GEÇE', 0x27ae60);
nextLevelButton.x = 2048 / 2;
nextLevelButton.y = 1850;
nextLevelButton.onClick = function () {
LK.getSound('Click').play();
startNextLevel();
};
currentMenu.addChild(nextLevelButton);
var menuButton = new MenuButton('ANA MENÜYE DÖN', 0x34495e);
menuButton.x = 2048 / 2;
menuButton.y = 2050;
menuButton.onClick = function () {
LK.getSound('Click').play();
createMainMenu();
};
currentMenu.addChild(menuButton);
// Play celebration sound
LK.getSound('Applause').play();
}
function startNextLevel() {
// Reset ball collection for new level
ballsCollected.red = 0;
ballsCollected.blue = 0;
ballsCollected.yellow = 0;
storage.redBallsCollected = 0;
storage.blueBallsCollected = 0;
storage.yellowBallsCollected = 0;
// Set requirements based on level - level 2 is final level with 10 balls each
if (currentLevel === 2) {
ballRequirements.red = 10;
ballRequirements.blue = 10;
ballRequirements.yellow = 10;
} else {
ballRequirements.red = 5 + currentLevel;
ballRequirements.blue = 5 + currentLevel;
ballRequirements.yellow = 5 + currentLevel;
}
levelCompleted = false;
startGame();
}
function showPremiumStore() {
gameState = 'premiumstore';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Store title with luxury styling
var storeTitle = new Text2('🛍️ PREMİUM MAĞAZA', {
size: 90,
fill: 0xd63384
});
storeTitle.anchor.set(0.5, 0.5);
storeTitle.x = 2048 / 2;
storeTitle.y = 400;
currentMenu.addChild(storeTitle);
// Animate title with store colors
var titleColors = [0xd63384, 0xf39c12, 0x3498db, 0x27ae60];
var currentColorIndex = 0;
function animateStoreTitle() {
currentColorIndex = (currentColorIndex + 1) % titleColors.length;
tween(storeTitle, {
tint: titleColors[currentColorIndex],
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(storeTitle, {
scaleX: 1,
scaleY: 1
}, {
duration: 400,
onFinish: animateStoreTitle
});
}
});
}
animateStoreTitle();
// Currency display
var coinsOwned = storage.premiumCoins || 0;
var currencyDisplay = new Text2('💰 Premium Coin: ' + coinsOwned, {
size: 50,
fill: 0xf1c40f
});
currencyDisplay.anchor.set(0.5, 0.5);
currencyDisplay.x = 2048 / 2;
currencyDisplay.y = 550;
currentMenu.addChild(currencyDisplay);
// Store categories
var categoriesTitle = new Text2('🏪 MAĞAZA KATEGORİLERİ', {
size: 60,
fill: 0x3498db
});
categoriesTitle.anchor.set(0.5, 0.5);
categoriesTitle.x = 2048 / 2;
categoriesTitle.y = 700;
currentMenu.addChild(categoriesTitle);
// Item 1: Extra Lives
var item1Button = new MenuButton('❤️ Ekstra Can (x5) - 50 Coin', storage.extraLives ? 0x27ae60 : 0xe74c3c);
item1Button.x = 2048 / 2;
item1Button.y = 900;
item1Button.onClick = function () {
LK.getSound('Click').play();
if (!storage.extraLives && coinsOwned >= 50) {
storage.premiumCoins = coinsOwned - 50;
storage.extraLives = true;
LK.effects.flashScreen(0x27ae60, 500);
showPremiumStore(); // Refresh store
}
};
currentMenu.addChild(item1Button);
// Item 2: Double XP Boost
var item2Button = new MenuButton('⚡ Çift XP Artırıcı - 75 Coin', storage.doubleXP ? 0x27ae60 : 0xf39c12);
item2Button.x = 2048 / 2;
item2Button.y = 1050;
item2Button.onClick = function () {
LK.getSound('Click').play();
if (!storage.doubleXP && coinsOwned >= 75) {
storage.premiumCoins = coinsOwned - 75;
storage.doubleXP = true;
LK.effects.flashScreen(0xf39c12, 500);
showPremiumStore(); // Refresh store
}
};
currentMenu.addChild(item2Button);
// Item 3: Premium Themes
var item3Button = new MenuButton('🎨 Premium Temalar - 100 Coin', storage.premiumThemes ? 0x27ae60 : 0x9b59b6);
item3Button.x = 2048 / 2;
item3Button.y = 1200;
item3Button.onClick = function () {
LK.getSound('Click').play();
if (!storage.premiumThemes && coinsOwned >= 100) {
storage.premiumCoins = coinsOwned - 100;
storage.premiumThemes = true;
LK.effects.flashScreen(0x9b59b6, 500);
showPremiumStore(); // Refresh store
}
};
currentMenu.addChild(item3Button);
// Item 4: Exclusive Shapes
var item4Button = new MenuButton('💎 Özel Şekiller - 125 Coin', storage.exclusiveShapes ? 0x27ae60 : 0x1abc9c);
item4Button.x = 2048 / 2;
item4Button.y = 1350;
item4Button.onClick = function () {
LK.getSound('Click').play();
if (!storage.exclusiveShapes && coinsOwned >= 125) {
storage.premiumCoins = coinsOwned - 125;
storage.exclusiveShapes = true;
LK.effects.flashScreen(0x1abc9c, 500);
showPremiumStore(); // Refresh store
}
};
currentMenu.addChild(item4Button);
// Coin purchase section
var coinPurchaseTitle = new Text2('💰 COİN SATIN AL', {
size: 60,
fill: 0xf1c40f
});
coinPurchaseTitle.anchor.set(0.5, 0.5);
coinPurchaseTitle.x = 2048 / 2;
coinPurchaseTitle.y = 1550;
currentMenu.addChild(coinPurchaseTitle);
// Coin pack 1
var coinPack1 = new MenuButton('💰 100 Coin - ₺9.99', 0xf39c12);
coinPack1.x = 2048 / 2;
coinPack1.y = 1700;
coinPack1.onClick = function () {
LK.getSound('Click').play();
// Simulate purchase
storage.premiumCoins = (storage.premiumCoins || 0) + 100;
LK.effects.flashScreen(0xf1c40f, 500);
showPremiumStore(); // Refresh store
};
currentMenu.addChild(coinPack1);
// Coin pack 2
var coinPack2 = new MenuButton('💰 250 Coin - ₺19.99 (En Popüler)', 0xe67e22);
coinPack2.x = 2048 / 2;
coinPack2.y = 1850;
coinPack2.onClick = function () {
LK.getSound('Click').play();
// Simulate purchase
storage.premiumCoins = (storage.premiumCoins || 0) + 250;
LK.effects.flashScreen(0xf1c40f, 500);
showPremiumStore(); // Refresh store
};
currentMenu.addChild(coinPack2);
// Special offers section
var offersTitle = new Text2('🎁 ÖZEL TEKLIFLER', {
size: 60,
fill: 0xe74c3c
});
offersTitle.anchor.set(0.5, 0.5);
offersTitle.x = 2048 / 2;
offersTitle.y = 2050;
currentMenu.addChild(offersTitle);
var dailyOffer = new Text2('🌟 Günlük Teklif: %50 İndirim!\n💰 500 Coin - ₺29.99 (Normal: ₺59.98)', {
size: 45,
fill: 0xFFFFFF
});
dailyOffer.anchor.set(0.5, 0.5);
dailyOffer.x = 2048 / 2;
dailyOffer.y = 2200;
currentMenu.addChild(dailyOffer);
// Daily offer button
var dailyOfferButton = new MenuButton('🎁 Günlük Teklifi Al', 0xe74c3c);
dailyOfferButton.x = 2048 / 2;
dailyOfferButton.y = 2350;
dailyOfferButton.onClick = function () {
LK.getSound('Click').play();
// Simulate purchase
storage.premiumCoins = (storage.premiumCoins || 0) + 500;
LK.effects.flashScreen(0xe74c3c, 500);
showPremiumStore(); // Refresh store
};
currentMenu.addChild(dailyOfferButton);
// Back button
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2500;
backButton.onClick = function () {
LK.getSound('Click').play();
createMainMenu();
};
currentMenu.addChild(backButton);
}
function showPremium() {
gameState = 'premium';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Premium title with luxury styling
var premiumTitle = new Text2('💎 PREMİUM GEÇİŞ', {
size: 90,
fill: 0xf1c40f
});
premiumTitle.anchor.set(0.5, 0.5);
premiumTitle.x = 2048 / 2;
premiumTitle.y = 400;
currentMenu.addChild(premiumTitle);
// Animate title with gold effect
var titleColors = [0xf1c40f, 0xfeca57, 0xff9500, 0xe67e22];
var currentColorIndex = 0;
function animatePremiumTitle() {
currentColorIndex = (currentColorIndex + 1) % titleColors.length;
tween(premiumTitle, {
tint: titleColors[currentColorIndex],
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(premiumTitle, {
scaleX: 1,
scaleY: 1
}, {
duration: 400,
onFinish: animatePremiumTitle
});
}
});
}
animatePremiumTitle();
// Premium benefits section
var benefitsTitle = new Text2('🌟 PREMİUM AVANTAJLARI', {
size: 60,
fill: 0x27ae60
});
benefitsTitle.anchor.set(0.5, 0.5);
benefitsTitle.x = 2048 / 2;
benefitsTitle.y = 600;
currentMenu.addChild(benefitsTitle);
var benefitsList = new Text2('• ✨ Reklamsız oyun deneyimi\n• 🎵 Premium müzik koleksiyonu\n• 🎨 Özel sepet tasarımları\n• ⚡ Ekstra güç artırıcılar\n• 🏆 Premium liderlik tablosu\n• 🎁 Günlük bonus ödüller\n• 🎪 Özel oyun modları\n• ☁️ Bulut kayıt sistemi', {
size: 45,
fill: 0xFFFFFF
});
benefitsList.anchor.set(0.5, 0.5);
benefitsList.x = 2048 / 2;
benefitsList.y = 850;
currentMenu.addChild(benefitsList);
// Pricing section
var pricingTitle = new Text2('💰 FİYATLANDIRMA', {
size: 60,
fill: 0x3498db
});
pricingTitle.anchor.set(0.5, 0.5);
pricingTitle.x = 2048 / 2;
pricingTitle.y = 1150;
currentMenu.addChild(pricingTitle);
// Check if user has premium status
var hasPremium = storage.hasPremium || false;
if (hasPremium) {
var premiumStatus = new Text2('✅ Premium üyeliğiniz aktif!\nTüm özelliklerden faydalanabilirsiniz.', {
size: 50,
fill: 0x27ae60
});
premiumStatus.anchor.set(0.5, 0.5);
premiumStatus.x = 2048 / 2;
premiumStatus.y = 1300;
currentMenu.addChild(premiumStatus);
} else {
var pricingOptions = new Text2('📅 Aylık: ₺9.99 - İlk ay ücretsiz!\n📊 3 Aylık: ₺24.99 - %17 indirim\n🎯 Yıllık: ₺79.99 - %33 indirim\n💎 Yaşam Boyu: ₺199.99 - Tek ödeme', {
size: 45,
fill: 0xecf0f1
});
pricingOptions.anchor.set(0.5, 0.5);
pricingOptions.x = 2048 / 2;
pricingOptions.y = 1350;
currentMenu.addChild(pricingOptions);
// Promotional banner
var promoText = new Text2('🎉 ÖZEL KAMPANYA: İlk ay tamamen ücretsiz!', {
size: 50,
fill: 0xff6b6b
});
promoText.anchor.set(0.5, 0.5);
promoText.x = 2048 / 2;
promoText.y = 1550;
currentMenu.addChild(promoText);
// Animate promo text
tween(promoText, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(promoText, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (gameState === 'premium') {
tween(promoText, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut
});
}
}
});
}
});
// Purchase button
var purchaseButton = new MenuButton('🛒 PREMİUM SATIN AL', 0x27ae60);
purchaseButton.x = 2048 / 2;
purchaseButton.y = 1750;
purchaseButton.onClick = function () {
LK.getSound('Click').play();
// Simulate purchase process
storage.hasPremium = true;
LK.effects.flashScreen(0xf1c40f, 1000);
// Refresh premium screen to show activated status
showPremium();
};
currentMenu.addChild(purchaseButton);
}
// Testimonials section
var testimonialsTitle = new Text2('💬 KULLANICI YORUMLARI', {
size: 60,
fill: 0x9b59b6
});
testimonialsTitle.anchor.set(0.5, 0.5);
testimonialsTitle.x = 2048 / 2;
testimonialsTitle.y = hasPremium ? 1500 : 1950;
currentMenu.addChild(testimonialsTitle);
var testimonials = new Text2('⭐⭐⭐⭐⭐ "Premium ile oyun çok daha eğlenceli!" - Ayşe\n⭐⭐⭐⭐⭐ "Reklamsız deneyim harika!" - Mehmet\n⭐⭐⭐⭐⭐ "Özel tasarımlar çok güzel!" - Fatma', {
size: 40,
fill: 0xbdc3c7
});
testimonials.anchor.set(0.5, 0.5);
testimonials.x = 2048 / 2;
testimonials.y = hasPremium ? 1650 : 2100;
currentMenu.addChild(testimonials);
// Back button
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = hasPremium ? 1850 : 2300;
backButton.onClick = function () {
LK.getSound('Click').play();
createMainMenu();
};
currentMenu.addChild(backButton);
}
function showRecentUpdates() {
gameState = 'recentupdates';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Title
var updatesTitle = new Text2('🆕 OYUNA SON EKLENENLER', {
size: 80,
fill: 0x1abc9c
});
updatesTitle.anchor.set(0.5, 0.5);
updatesTitle.x = 2048 / 2;
updatesTitle.y = 400;
currentMenu.addChild(updatesTitle);
// Version section
var versionTitle = new Text2('📋 GÜNCEL VERSİYON: v1.2', {
size: 60,
fill: 0xf1c40f
});
versionTitle.anchor.set(0.5, 0.5);
versionTitle.x = 2048 / 2;
versionTitle.y = 600;
currentMenu.addChild(versionTitle);
// Recent updates section
var recentTitle = new Text2('⭐ YENİ ÖZELLİKLER', {
size: 60,
fill: 0x3498db
});
recentTitle.anchor.set(0.5, 0.5);
recentTitle.x = 2048 / 2;
recentTitle.y = 800;
currentMenu.addChild(recentTitle);
var recentText = new Text2('• Bölüm sistemi eklendi (2 bölüm)\n• İstatistiklerim menüsü eklendi\n• Toplam oyun süresi takibi\n• Başarım sistemi geliştirildi\n• Ayarlar menüsü genişletildi\n• Ses efektleri iyileştirildi', {
size: 45,
fill: 0xFFFFFF
});
recentText.anchor.set(0.5, 0.5);
recentText.x = 2048 / 2;
recentText.y = 980;
currentMenu.addChild(recentText);
// Improvements section
var improvementsTitle = new Text2('🔧 İYİLEŞTİRMELER', {
size: 60,
fill: 0x27ae60
});
improvementsTitle.anchor.set(0.5, 0.5);
improvementsTitle.x = 2048 / 2;
improvementsTitle.y = 1200;
currentMenu.addChild(improvementsTitle);
var improvementsText = new Text2('• Oyun performansı optimize edildi\n• Menü geçişleri daha akıcı hale getirildi\n• Renk körü modu için hazırlık yapıldı\n• Dokunmatik kontroller iyileştirildi\n• Arka plan animasyonları güncellendi', {
size: 45,
fill: 0xecf0f1
});
improvementsText.anchor.set(0.5, 0.5);
improvementsText.x = 2048 / 2;
improvementsText.y = 1380;
currentMenu.addChild(improvementsText);
// Coming soon section
var comingSoonTitle = new Text2('🚀 YAKINDA GELECEKLER', {
size: 60,
fill: 0xe67e22
});
comingSoonTitle.anchor.set(0.5, 0.5);
comingSoonTitle.x = 2048 / 2;
comingSoonTitle.y = 1600;
currentMenu.addChild(comingSoonTitle);
var comingSoonText = new Text2('• Günlük meydan okumalar\n• Farklı oyun modları\n• Liderlik tablosu\n• Sosyal paylaşım özellikleri\n• Yeni şekil türleri', {
size: 45,
fill: 0xbdc3c7
});
comingSoonText.anchor.set(0.5, 0.5);
comingSoonText.x = 2048 / 2;
comingSoonText.y = 1780;
currentMenu.addChild(comingSoonText);
// Bug fixes section
var bugFixesTitle = new Text2('🐛 HATA DÜZELTMELERİ', {
size: 60,
fill: 0x9b59b6
});
bugFixesTitle.anchor.set(0.5, 0.5);
bugFixesTitle.x = 2048 / 2;
bugFixesTitle.y = 2000;
currentMenu.addChild(bugFixesTitle);
var bugFixesText = new Text2('• Oyun süresi hesaplama hatası düzeltildi\n• Sepet sürükleme hassasiyeti artırıldı\n• Menü butonları daha responsive\n• Müzik ayarları kaydetme sorunu çözüldü', {
size: 45,
fill: 0x95a5a6
});
bugFixesText.anchor.set(0.5, 0.5);
bugFixesText.x = 2048 / 2;
bugFixesText.y = 2140;
currentMenu.addChild(bugFixesText);
// Feature requests section
var requestTitle = new Text2('💡 OYUNA GELMESİNİ İSTEDİKLERİNİZ', {
size: 60,
fill: 0xff6b6b
});
requestTitle.anchor.set(0.5, 0.5);
requestTitle.x = 2048 / 2;
requestTitle.y = 2320;
currentMenu.addChild(requestTitle);
var requestText = new Text2('• Power-up özellikler (Slow Motion, Extra Points)\n• Farklı şekil türleri (Yıldız, Kalp, Üçgen)\n• Sezonluk temalar (Kış, Yaz, Bahar)\n• Çok oyunculu mod\n• Günlük görevler ve ödüller\n• Özelleştirilebilir sepet tasarımları', {
size: 45,
fill: 0xFFFFFF
});
requestText.anchor.set(0.5, 0.5);
requestText.x = 2048 / 2;
requestText.y = 2500;
currentMenu.addChild(requestText);
// Add request submission info
var submitInfo = new Text2('Sizin de eklemek istediğiniz özellikler var mı?\nFRVR platform üzerinden bize yazabilirsiniz!', {
size: 40,
fill: 0xbdc3c7
});
submitInfo.anchor.set(0.5, 0.5);
submitInfo.x = 2048 / 2;
submitInfo.y = 2730;
currentMenu.addChild(submitInfo);
// Back button
var backButton = new MenuButton('⬅ ANA MENÜYE DÖN', 0x34495e);
backButton.x = 350; // Position on left side instead of center
backButton.y = 1366; // Middle of screen height (2732/2)
// Add subtle animation to the back button
tween(backButton, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(backButton, {
alpha: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Repeat animation
if (gameState === 'recentupdates') {
tween(backButton, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut
});
}
}
});
}
});
backButton.onClick = function () {
LK.getSound('Click').play();
// Add visual feedback on click
tween(backButton.bg, {
tint: 0x2c3e50
}, {
duration: 100,
onFinish: function onFinish() {
tween(backButton.bg, {
tint: 0x34495e
}, {
duration: 100
});
}
});
createMainMenu();
};
currentMenu.addChild(backButton);
}
function showPrivacyPolicy() {
gameState = 'privacypolicy';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Title
var titleText = new Text2('📄 GİZLİLİK POLİTİKASI', {
size: 70,
fill: 0x3498db
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 400;
currentMenu.addChild(titleText);
// Privacy policy content
var privacyContent = new Text2('VERİ TOPLAMA VE KULLANIMI\n\n' + '• Oyun deneyiminizi geliştirmek için minimum veri toplarız\n' + '• Kişisel bilgileriniz üçüncü taraflarla paylaşılmaz\n' + '• Oyun ilerlemesi cihazınızda yerel olarak saklanır\n' + '• İstatistikler anonim olarak işlenir\n\n' + 'VERİ GÜVENLİĞİ\n\n' + '• Tüm veriler şifreleme ile korunur\n' + '• Güvenli bağlantı protokolleri kullanılır\n' + '• Düzenli güvenlik güncellemeleri yapılır\n\n' + 'HAKLARINIZ\n\n' + '• Verilerinizi silme hakkınız vardır\n' + '• Veri kullanımı hakkında bilgi alma hakkınız vardır\n' + '• Bu politika değişikliklerinden haberdar edileceksiniz', {
size: 40,
fill: 0xFFFFFF
});
privacyContent.anchor.set(0.5, 0.5);
privacyContent.x = 2048 / 2;
privacyContent.y = 1200;
currentMenu.addChild(privacyContent);
// Last updated
var lastUpdated = new Text2('Son Güncelleme: 2024', {
size: 35,
fill: 0x95a5a6
});
lastUpdated.anchor.set(0.5, 0.5);
lastUpdated.x = 2048 / 2;
lastUpdated.y = 2000;
currentMenu.addChild(lastUpdated);
// Back button
var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2200;
backButton.onClick = function () {
LK.getSound('Click').play();
createLoginScreen();
};
currentMenu.addChild(backButton);
}
function showTermsOfService() {
gameState = 'termsofservice';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Title
var titleText = new Text2('📋 KULLANIM ŞARTLARI', {
size: 70,
fill: 0x9b59b6
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 400;
currentMenu.addChild(titleText);
// Terms content
var termsContent = new Text2('GENEL ŞARTLAR\n\n' + '• Bu oyunu kullanarak şartları kabul etmiş sayılırsınız\n' + '• Oyun 13 yaş ve üzeri kullanıcılar içindir\n' + '• Haksız kazanç elde etmeye yönelik eylemler yasaktır\n' + '• Oyun içi satın almalar iade edilemez\n\n' + 'KULLANICI SORUMLULUKLARI\n\n' + '• Oyunu adil bir şekilde oynamak\n' + '• Diğer oyunculara saygılı davranmak\n' + '• Oyun kurallarına uymak\n' + '• Teknik sorunları bildirmek\n\n' + 'HİZMET KOŞULLARI\n\n' + '• Oyun hizmeti "olduğu gibi" sunulmaktadır\n' + '• Teknik bakım dönemlerinde kesinti olabilir\n' + '• Bu şartlar önceden haber verilmeksizin değişebilir', {
size: 40,
fill: 0xFFFFFF
});
termsContent.anchor.set(0.5, 0.5);
termsContent.x = 2048 / 2;
termsContent.y = 1200;
currentMenu.addChild(termsContent);
// Acceptance notice
var acceptanceNotice = new Text2('Bu oyunu oynayarak yukarıdaki şartları kabul etmiş sayılırsınız.', {
size: 35,
fill: 0xf39c12
});
acceptanceNotice.anchor.set(0.5, 0.5);
acceptanceNotice.x = 2048 / 2;
acceptanceNotice.y = 2000;
currentMenu.addChild(acceptanceNotice);
// Back button
var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2200;
backButton.onClick = function () {
LK.getSound('Click').play();
createLoginScreen();
};
currentMenu.addChild(backButton);
}
// Function to show friend invitation screen
function showFriendInvitation() {
gameState = 'friendinvitation';
// Clear existing menu
if (currentMenu) {
currentMenu.destroy();
}
currentMenu = new Container();
game.addChild(currentMenu);
// Title
var titleText = new Text2('👥 ARKADAŞLARI DAVET ET', {
size: 80,
fill: 0x27ae60
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 500;
currentMenu.addChild(titleText);
// Invitation benefits
var benefitsTitle = new Text2('🎁 DAVET AVANTAJLARI', {
size: 60,
fill: 0xf1c40f
});
benefitsTitle.anchor.set(0.5, 0.5);
benefitsTitle.x = 2048 / 2;
benefitsTitle.y = 700;
currentMenu.addChild(benefitsTitle);
var benefitsList = new Text2('• Her arkadaş daveti için 50 bonus puan!\n• Arkadaşınız da 50 bonus puan kazanır\n• Beraber oynadığınızda çift XP\n• Özel arkadaş liderlik tablosu\n• Arkadaş meydan okumaları', {
size: 45,
fill: 0xFFFFFF
});
benefitsList.anchor.set(0.5, 0.5);
benefitsList.x = 2048 / 2;
benefitsList.y = 850;
currentMenu.addChild(benefitsList);
// Your invitation code section
var codeTitle = new Text2('📋 SİZİN DAVET KODUNUZ', {
size: 60,
fill: 0x3498db
});
codeTitle.anchor.set(0.5, 0.5);
codeTitle.x = 2048 / 2;
codeTitle.y = 1100;
currentMenu.addChild(codeTitle);
// Generate or get stored invitation code
var invitationCode = storage.invitationCode || 'CATCH' + Math.floor(Math.random() * 10000);
storage.invitationCode = invitationCode;
var codeDisplay = new Text2(invitationCode, {
size: 100,
fill: 0xf1c40f
});
codeDisplay.anchor.set(0.5, 0.5);
codeDisplay.x = 2048 / 2;
codeDisplay.y = 1200;
currentMenu.addChild(codeDisplay);
// Copy code button
var copyButton = new MenuButton('📋 KODU KOPYALA', 0x27ae60);
copyButton.x = 2048 / 2;
copyButton.y = 1350;
copyButton.onClick = function () {
LK.getSound('Click').play();
// Simulate copying to clipboard
LK.effects.flashScreen(0x27ae60, 300);
// Show feedback
var copyFeedback = new Text2('✅ Kod kopyalandı!', {
size: 50,
fill: 0x27ae60
});
copyFeedback.anchor.set(0.5, 0.5);
copyFeedback.x = 2048 / 2;
copyFeedback.y = 1450;
currentMenu.addChild(copyFeedback);
// Auto remove feedback after 2 seconds
LK.setTimeout(function () {
if (copyFeedback.parent) {
copyFeedback.destroy();
}
}, 2000);
};
currentMenu.addChild(copyButton);
// Share buttons section
var shareTitle = new Text2('📤 ARKADAŞLARINIZLA PAYLAŞIN', {
size: 60,
fill: 0x9b59b6
});
shareTitle.anchor.set(0.5, 0.5);
shareTitle.x = 2048 / 2;
shareTitle.y = 1550;
currentMenu.addChild(shareTitle);
// WhatsApp share button
var whatsappButton = new MenuButton('📱 WhatsApp ile Paylaş', 0x25D366);
whatsappButton.x = 2048 / 3;
whatsappButton.y = 1700;
whatsappButton.onClick = function () {
LK.getSound('Click').play();
LK.effects.flashScreen(0x25D366, 300);
};
currentMenu.addChild(whatsappButton);
// SMS share button
var smsButton = new MenuButton('💬 SMS ile Paylaş', 0x34495e);
smsButton.x = 2048 * 2 / 3;
smsButton.y = 1700;
smsButton.onClick = function () {
LK.getSound('Click').play();
LK.effects.flashScreen(0x34495e, 300);
};
currentMenu.addChild(smsButton);
// Enter friend code section
var enterCodeTitle = new Text2('🔑 ARKADAŞ KODU GİRİN', {
size: 60,
fill: 0xe67e22
});
enterCodeTitle.anchor.set(0.5, 0.5);
enterCodeTitle.x = 2048 / 2;
enterCodeTitle.y = 1900;
currentMenu.addChild(enterCodeTitle);
var enterCodeInfo = new Text2('Arkadaşınızın davet kodunu girerek\nikiniz de bonus puan kazanabilirsiniz!', {
size: 45,
fill: 0xbdc3c7
});
enterCodeInfo.anchor.set(0.5, 0.5);
enterCodeInfo.x = 2048 / 2;
enterCodeInfo.y = 2020;
currentMenu.addChild(enterCodeInfo);
var enterCodeButton = new MenuButton('⌨️ KOD GİR', 0xe67e22);
enterCodeButton.x = 2048 / 2;
enterCodeButton.y = 2150;
enterCodeButton.onClick = function () {
LK.getSound('Click').play();
// Simulate code entry process
var enteredCode = 'CATCH' + Math.floor(Math.random() * 10000);
if (enteredCode !== invitationCode) {
// Simulate successful code entry
storage.friendCodesUsed = (storage.friendCodesUsed || 0) + 1;
LK.setScore(LK.getScore() + 50);
LK.effects.flashScreen(0x27ae60, 500);
// Show success message
var successMsg = new Text2('🎉 Kod kabul edildi! +50 puan kazandınız!', {
size: 50,
fill: 0x27ae60
});
successMsg.anchor.set(0.5, 0.5);
successMsg.x = 2048 / 2;
successMsg.y = 2300;
currentMenu.addChild(successMsg);
}
};
currentMenu.addChild(enterCodeButton);
// Statistics
var statsTitle = new Text2('📊 DAVET İSTATİSTİKLERİNİZ', {
size: 50,
fill: 0x6c5ce7
});
statsTitle.anchor.set(0.5, 0.5);
statsTitle.x = 2048 / 2;
statsTitle.y = 2400;
currentMenu.addChild(statsTitle);
var friendStats = storage.friendsInvited || 0;
var codeStats = storage.friendCodesUsed || 0;
var statsDisplay = new Text2('Davet ettiğiniz arkadaş: ' + friendStats + '\nKullandığınız kod: ' + codeStats, {
size: 45,
fill: 0xFFFFFF
});
statsDisplay.anchor.set(0.5, 0.5);
statsDisplay.x = 2048 / 2;
statsDisplay.y = 2500;
currentMenu.addChild(statsDisplay);
// Back button
var backButton = new MenuButton('⬅ GERİ DÖN', 0x34495e);
backButton.x = 2048 / 2;
backButton.y = 2650;
backButton.onClick = function () {
LK.getSound('Click').play();
createLoginScreen();
};
currentMenu.addChild(backButton);
}
Make me a 2d basketball hoop net in yellow color. In-Game asset. 2d. High contrast. No shadows
Bana 2d basketbol topu yap sarı renkli olsun. In-Game asset. 2d. High contrast. No shadows
Make me a 2d basketball hoop net in blue color. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
Bana 2d basketbol topu yap mavi renk olsun. In-Game asset. 2d. High contrast. No shadows
Bana 2d basketbol topu yap kırmızı renk olsun. In-Game asset. 2d. High contrast. No shadows
Make me a 2d basketball hoop net in red color. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
600x120 size box, Oyunu başlat text yazısı. In-Game asset. 2d. High contrast. No shadows
Bana 2d basketbol topuyap gökkuşağı renklerinde olsun. In-Game asset. 2d. High contrast. No shadows