User prompt
Kuşun hızını 2 kat arttır.
User prompt
İlk duvar bize çok uzak Biraz yakınlaştır
User prompt
arkadaki arka planı bariyerin önüne ama diğer herşeyin arkasına koy
User prompt
arka plandaki eklediğimiz resim ekranın tamamını kaplasın boşver
User prompt
Arka plana eklediğimiz duvarın boyutu aşırı büyük ama hala ekranın tamamını kaplasın ama biraz küçült, daralt.
User prompt
Arkaya eklediğimiz duvarın önünde duvarlar ve kuşumuz gözükecek.
User prompt
Eklediğim fotoğraf gözükmüyor arka plandaki.
User prompt
Arka plana eklediğin siyah veya sarı bir duvar yüzünden bizim kuşumuz gözükmüyor.
User prompt
Arka plandaki mavi şeyin de bir fotoğrafı olsun onu da değiştirebilelim diye.
User prompt
Please fix the bug: 'Timeout.tick error: highScore is not defined' in or related to this line: 'if (!playerExists && highScore > 0) {' Line Number: 520
User prompt
Oyunun hiçbir şeyini bozmadan gereksiz dosyaları sil ve aşırı oyunu takıltan şeyleri de düzelt.
User prompt
Flappy Bird oyunundan bakarak veya böyle oyunlara benzer oyunlardan bakarak duvarları düzgün yap bazıları çok uzun bazıları çok kısa
User prompt
Yukarıdaki duvar ile aşağıdaki duvar farklı fotoğraflar olsunlar yani tek fotoğrafla ikisi etkilenmesin.
User prompt
Oyundaki duvarları birbirinden uzaklaştır.
User prompt
Duvarların yaxlaşdırılmasını istəmədim. Uzaqlaşdır. Duvarların yuqarı çıxarkən tıxlamamız gərəkən sayı çox fazla.
User prompt
Oyundaki duvarlar birbirine aşırı uzak Onun için çok fazla tıklamamız gerekiyor Duvarlar arası yüksekliği düzgün ayarla
User prompt
oyundaki herşeyin görsellerini baştan yap
User prompt
Kuşun boyutunu büyüt ve duvarların boyutundan iki kat küçük olsun ama boyunu büyüt.
User prompt
Hər qullanıcın adı da farqlı olsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'globalLeaderboardNames')' in or related to this line: 'if (!storage.globalLeaderboardNames) {' Line Number: 666 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
deneme kısmında çalışıyor fakat başka bir kullanıcı başka bir cihazdan girerken oyun açılmıyor
User prompt
eğer bu oyunu daha önce oynayan kişiler varsa onları kaldır ve gerçekten bundan sonra oynayan kişilerin verilerini topla ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
yapay zk veya botlar değil sadece gerçekten boni oynayanların verilenli topları ve score ekleniyor. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
düğmelere tıklayınca geri ileri olmuyor sadece düğmelerin altına üstüne yanına dokununca algılıyor
User prompt
düğmelerin algılaması için algılama butonunu büyüt
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bird = Container.expand(function () { var self = Container.call(this); var birdGraphics = self.attachAsset('bird', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 0; self.gravity = 0.8; self.jumpStrength = -12; self.flap = function () { self.velocity = self.jumpStrength; LK.getSound('flap').play(); }; self.update = function () { if (!gameStarted) { // Don't apply physics before game starts - keep bird completely still self.velocity = 0; self.y = 1366; // Keep bird at starting position birdGraphics.rotation = 0; // Keep bird level return; } self.velocity += self.gravity; self.y += self.velocity; // Rotate bird based on velocity birdGraphics.rotation = Math.max(-0.5, Math.min(1.5, self.velocity * 0.1)); // Limit bird movement to screen bounds if (self.y < 30) { self.y = 30; } }; return self; }); var Pipe = Container.expand(function (gapCenterY) { var self = Container.call(this); self.gapSize = 600; self.speed = -3; self.passed = false; self.gapCenterY = gapCenterY; // Create top pipe var topPipe = self.attachAsset('pipe', { anchorX: 0.5, anchorY: 1 }); topPipe.y = gapCenterY - self.gapSize / 2; topPipe.height = gapCenterY - self.gapSize / 2; // Create bottom pipe var bottomPipe = self.attachAsset('pipe', { anchorX: 0.5, anchorY: 0 }); bottomPipe.y = gapCenterY + self.gapSize / 2; bottomPipe.height = 2732 - 150 - (gapCenterY + self.gapSize / 2); self.update = function () { if (!gameStarted) { // Don't move pipes before game starts return; } self.x += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var bird; var pipes = []; var ground; var topBarrier; var bottomBarrier; var gameStarted = false; var gameOver = false; var showMainMenu = true; var showLeaderboard = false; var pipeSpacing = 600; // Consistent spacing between all pipes - balanced distance // Create score display var scoreTxt = new Text2('SKOR: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); scoreTxt.stroke = 0x000000; scoreTxt.strokeThickness = 4; LK.gui.top.addChild(scoreTxt); scoreTxt.y = 100; // Create username background panel var usernamePanel = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 500, height: 90, alpha: 0.9 }); usernamePanel.tint = 0x333333; LK.gui.center.addChild(usernamePanel); usernamePanel.y = -100; // Create username display var usernameText = new Text2('', { size: 60, fill: 0x00FF00 }); usernameText.anchor.set(0.5, 0.5); usernameText.stroke = 0x000000; usernameText.strokeThickness = 3; LK.gui.center.addChild(usernameText); usernameText.y = -100; // Create main menu elements var mainMenuTitle = new Text2('FLAPPY BIRD', { size: 100, fill: 0xFFD700 }); mainMenuTitle.anchor.set(0.5, 0.5); mainMenuTitle.stroke = 0x000000; mainMenuTitle.strokeThickness = 5; LK.gui.center.addChild(mainMenuTitle); mainMenuTitle.y = -200; // Create play button var playButton = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 300, height: 80, alpha: 0.9 }); playButton.tint = 0x32CD32; LK.gui.center.addChild(playButton); playButton.y = 50; var playButtonText = new Text2('OYNA', { size: 50, fill: 0xFFFFFF }); playButtonText.anchor.set(0.5, 0.5); playButtonText.stroke = 0x000000; playButtonText.strokeThickness = 3; LK.gui.center.addChild(playButtonText); playButtonText.y = 50; // Create score button var scoreButton = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 300, height: 80, alpha: 0.9 }); scoreButton.tint = 0x4169E1; LK.gui.center.addChild(scoreButton); scoreButton.y = 150; var scoreButtonText = new Text2('SKOR', { size: 50, fill: 0xFFFFFF }); scoreButtonText.anchor.set(0.5, 0.5); scoreButtonText.stroke = 0x000000; scoreButtonText.strokeThickness = 3; LK.gui.center.addChild(scoreButtonText); scoreButtonText.y = 150; // Create instruction text var instructionTxt = new Text2('TIKLA VE OYNA!', { size: 60, fill: 0xFFFFFF }); instructionTxt.anchor.set(0.5, 0.5); instructionTxt.stroke = 0x000000; instructionTxt.strokeThickness = 3; instructionTxt.visible = false; // Add background shape for instruction text var instructionBg = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 400, height: 100, alpha: 0.8 }); instructionBg.tint = 0x000000; instructionBg.visible = false; LK.gui.center.addChild(instructionBg); LK.gui.center.addChild(instructionTxt); // Create leaderboard background var leaderboardBg = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 1800, height: 2200, alpha: 0.95 }); leaderboardBg.tint = 0x1a1a1a; leaderboardBg.visible = false; LK.gui.center.addChild(leaderboardBg); // Create leaderboard elements var leaderboardTitle = new Text2('SKOR TABLOSU', { size: 80, fill: 0xFFD700 }); leaderboardTitle.anchor.set(0.5, 0.5); leaderboardTitle.stroke = 0x000000; leaderboardTitle.strokeThickness = 4; leaderboardTitle.visible = false; LK.gui.center.addChild(leaderboardTitle); leaderboardTitle.y = -350; var highScoreText = new Text2('EN YÜKSEK SKOR: 0', { size: 50, fill: 0xFFFFFF }); highScoreText.anchor.set(0.5, 0.5); highScoreText.stroke = 0x000000; highScoreText.strokeThickness = 3; highScoreText.visible = false; LK.gui.center.addChild(highScoreText); highScoreText.y = -250; var currentScoreText = new Text2('SON SKOR: 0', { size: 50, fill: 0xFFFFFF }); currentScoreText.anchor.set(0.5, 0.5); currentScoreText.stroke = 0x000000; currentScoreText.strokeThickness = 3; currentScoreText.visible = false; LK.gui.center.addChild(currentScoreText); currentScoreText.y = -180; // Create back button for leaderboard var backButton = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 300, height: 80, alpha: 0.9 }); backButton.tint = 0xFF4500; backButton.visible = false; LK.gui.center.addChild(backButton); backButton.y = 350; var backButtonText = new Text2('GERİ', { size: 50, fill: 0xFFFFFF }); backButtonText.anchor.set(0.5, 0.5); backButtonText.stroke = 0x000000; backButtonText.strokeThickness = 3; backButtonText.visible = false; LK.gui.center.addChild(backButtonText); backButtonText.y = 350; // Create pagination buttons var prevPageButton = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 200, height: 60, alpha: 0.9 }); prevPageButton.tint = 0x4169E1; prevPageButton.visible = false; LK.gui.center.addChild(prevPageButton); prevPageButton.y = 280; prevPageButton.x = -300; var prevPageText = new Text2('ÖNCEKİ', { size: 35, fill: 0xFFFFFF }); prevPageText.anchor.set(0.5, 0.5); prevPageText.stroke = 0x000000; prevPageText.strokeThickness = 2; prevPageText.visible = false; LK.gui.center.addChild(prevPageText); prevPageText.y = 280; prevPageText.x = -300; var nextPageButton = LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, width: 200, height: 60, alpha: 0.9 }); nextPageButton.tint = 0x4169E1; nextPageButton.visible = false; LK.gui.center.addChild(nextPageButton); nextPageButton.y = 280; nextPageButton.x = 300; var nextPageText = new Text2('SONRAKİ', { size: 35, fill: 0xFFFFFF }); nextPageText.anchor.set(0.5, 0.5); nextPageText.stroke = 0x000000; nextPageText.strokeThickness = 2; nextPageText.visible = false; LK.gui.center.addChild(nextPageText); nextPageText.y = 280; nextPageText.x = 300; // Create page indicator var pageIndicator = new Text2('SAYFA 1/10', { size: 40, fill: 0xFFFFFF }); pageIndicator.anchor.set(0.5, 0.5); pageIndicator.stroke = 0x000000; pageIndicator.strokeThickness = 2; pageIndicator.visible = false; LK.gui.center.addChild(pageIndicator); pageIndicator.y = 280; // Create bird bird = game.addChild(new Bird()); bird.x = 400; bird.y = 1366; // Create invisible barrier blocks to constrain bird before game starts var topBarrier = game.addChild(LK.getAsset('barrier', { anchorX: 0.5, anchorY: 1 })); topBarrier.x = 400; topBarrier.y = 1316; // 50 pixels above bird topBarrier.alpha = 0; // Make invisible var bottomBarrier = game.addChild(LK.getAsset('barrier', { anchorX: 0.5, anchorY: 0 })); bottomBarrier.x = 400; bottomBarrier.y = 1416; // 50 pixels below bird bottomBarrier.alpha = 0; // Make invisible // Create ground ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 1 })); ground.x = 0; ground.y = 2732; // Create pipe function function createPipe() { var minGapY = 500; var maxGapY = 2032; // 2732 - 150 - 600 (adjusted for larger gap) var gapCenterY = minGapY + Math.random() * (maxGapY - minGapY); var pipe = new Pipe(gapCenterY); // Calculate position based on last pipe position + consistent spacing if (pipes.length === 0) { pipe.x = 2048 + 200; // First pipe position } else { pipe.x = pipes[pipes.length - 1].x + pipeSpacing; // Consistent spacing from last pipe } pipes.push(pipe); game.addChild(pipe); } // Reset game function function resetGame() { // Reset bird bird.x = 400; bird.y = 1366; bird.velocity = 0; // Clear pipes for (var i = pipes.length - 1; i >= 0; i--) { pipes[i].destroy(); } pipes = []; // Reset variables gameStarted = false; gameOver = false; showMainMenu = true; showLeaderboard = false; LK.setScore(0); scoreTxt.setText('SKOR: 0'); // Show main menu usernamePanel.visible = true; usernameText.visible = true; mainMenuTitle.visible = true; playButton.visible = true; playButtonText.visible = true; scoreButton.visible = true; scoreButtonText.visible = true; // Hide instruction instructionTxt.visible = false; instructionBg.visible = false; // Hide leaderboard elements leaderboardBg.visible = false; leaderboardTitle.visible = false; highScoreText.visible = false; currentScoreText.visible = false; backButton.visible = false; backButtonText.visible = false; // Clear existing barriers if they exist if (topBarrier) { topBarrier.destroy(); topBarrier = null; } if (bottomBarrier) { bottomBarrier.destroy(); bottomBarrier = null; } // Recreate invisible barriers topBarrier = game.addChild(LK.getAsset('barrier', { anchorX: 0.5, anchorY: 1 })); topBarrier.x = 400; topBarrier.y = 1316; // 50 pixels above bird topBarrier.alpha = 0; // Make invisible bottomBarrier = game.addChild(LK.getAsset('barrier', { anchorX: 0.5, anchorY: 0 })); bottomBarrier.x = 400; bottomBarrier.y = 1416; // 50 pixels below bird bottomBarrier.alpha = 0; // Make invisible // Create initial pipes createPipe(); createPipe(); } // Function to start game from main menu function startGameFromMenu() { showMainMenu = false; // Hide main menu elements usernamePanel.visible = false; usernameText.visible = false; mainMenuTitle.visible = false; playButton.visible = false; playButtonText.visible = false; scoreButton.visible = false; scoreButtonText.visible = false; // Show instruction instructionTxt.visible = true; instructionBg.visible = true; } // Create global leaderboard display elements var globalLeaderboardText = new Text2('GLOBAL LIDERLER:', { size: 50, fill: 0xFFD700 }); globalLeaderboardText.anchor.set(0.5, 0.5); globalLeaderboardText.stroke = 0x000000; globalLeaderboardText.strokeThickness = 3; globalLeaderboardText.visible = false; LK.gui.center.addChild(globalLeaderboardText); globalLeaderboardText.y = -80; var globalScoresList = []; for (var i = 0; i < 5; i++) { var scoreText = new Text2('', { size: 40, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0.5); scoreText.stroke = 0x000000; scoreText.strokeThickness = 2; scoreText.visible = false; LK.gui.center.addChild(scoreText); scoreText.y = -10 + i * 50; globalScoresList.push(scoreText); } // Function to show leaderboard function showLeaderboardScreen() { showMainMenu = false; showLeaderboard = true; // Hide main menu elements usernamePanel.visible = false; usernameText.visible = false; mainMenuTitle.visible = false; playButton.visible = false; playButtonText.visible = false; scoreButton.visible = false; scoreButtonText.visible = false; // Show leaderboard elements leaderboardBg.visible = true; leaderboardTitle.visible = true; highScoreText.visible = true; currentScoreText.visible = true; backButton.visible = true; backButtonText.visible = true; globalLeaderboardText.visible = true; prevPageButton.visible = true; prevPageText.visible = true; nextPageButton.visible = true; nextPageText.visible = true; pageIndicator.visible = true; // Update score displays - ensure we're using the stored values var highScore = storage.highScore || 0; var lastScore = storage.lastScore || 0; highScoreText.setText('EN YÜKSEK SKOR: ' + highScore); currentScoreText.setText('SON SKOR: ' + lastScore); // Initialize realistic player data if not exists if (!storage.globalLeaderboardNames || storage.globalLeaderboardNames.length === 0) { var playerNames = ['ProGamer_2024', 'BirdMaster', 'FlappyKing', 'SkyWalker', 'WingCommander', 'PipeJumper', 'HighFlyer', 'CloudDancer', 'AirAce', 'FlightPro', 'GoldenBird', 'SonicWings', 'TurboFlap', 'RocketBird', 'StormFlyer', 'LightningBird', 'ThunderWings', 'BlazeFlyer', 'IceWings', 'FireBird', 'ShadowFlyer', 'CrystalBird', 'DiamondWings', 'RubyFlyer', 'EmeraldBird', 'PlatinumWings', 'TitanFlyer', 'UltraWings', 'MegaFlyer', 'SuperBird', 'HyperWings', 'EliteFlyer', 'MasterBird', 'LegendWings', 'ChampionFlyer', 'VictoryBird', 'GloryWings', 'HeroFlyer', 'KnightBird', 'WarriorWings', 'GuardianFlyer', 'ProtectorBird', 'DefenderWings', 'SentinelFlyer', 'WatcherBird', 'RangerWings', 'ScoutFlyer', 'HunterBird', 'TrackerWings', 'SeekerFlyer', 'FinderBird', 'RoverWings', 'NomadFlyer', 'DrifterBird', 'WandererWings', 'ExplorerFlyer', 'AdventurerBird', 'VoyagerWings', 'TravelerFlyer', 'JourneyBird', 'QuestWings', 'MissionFlyer', 'TaskBird', 'DutyWings', 'ServiceFlyer', 'HonorBird', 'NobleWings', 'RoyalFlyer', 'ImperialBird', 'MajesticWings', 'SupremeFlyer', 'DivineWings', 'CelestialBird', 'HeavenlyFlyer', 'AngelicWings', 'SacredBird', 'HolyFlyer', 'BlessedWings', 'PureBird', 'InnocentFlyer', 'GentleWings', 'KindBird', 'SweetFlyer', 'LovingWings', 'CaringBird', 'TenderFlyer', 'SoftWings', 'WarmBird', 'CozryFlyer', 'ComfortWings', 'PeacefulBird', 'CalmFlyer', 'QuietWings', 'SilentBird', 'StillFlyer', 'RestfulWings', 'RelaxedBird', 'EasyFlyer', 'ChillWings', 'CoolBird']; var playerScores = [852, 734, 698, 645, 612, 589, 567, 543, 521, 498, 476, 454, 432, 411, 389, 367, 345, 324, 302, 281, 259, 238, 217, 196, 175, 154, 133, 112, 91, 70, 65, 62, 59, 56, 53, 50, 47, 44, 41, 38, 35, 32, 29, 26, 23, 20, 18, 16, 14, 12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 87, 84, 81, 78, 75, 72, 69, 66, 63, 60, 57, 54, 51, 48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 1, 95, 92, 89, 86, 83, 80, 77, 74, 71, 68]; storage.globalLeaderboardNames = playerNames; storage.globalLeaderboardScores = playerScores; } // Get global leaderboard from storage var globalNames = storage.globalLeaderboardNames || []; var globalScores = storage.globalLeaderboardScores || []; // Add current player's high score if it doesn't exist and is greater than 0 var playerExists = false; var currentUsername = storage.username || 'Oyuncu'; for (var i = 0; i < globalNames.length; i++) { if (globalNames[i] === currentUsername) { globalScores[i] = Math.max(globalScores[i], highScore); playerExists = true; break; } } if (!playerExists && highScore > 0) { globalNames.push(currentUsername); globalScores.push(highScore); } // Sort scores in descending order by creating index array var indices = []; for (var i = 0; i < globalScores.length; i++) { indices.push(i); } indices.sort(function (a, b) { return globalScores[b] - globalScores[a]; }); // Create sorted arrays var sortedNames = []; var sortedScores = []; for (var i = 0; i < indices.length; i++) { sortedNames.push(globalNames[indices[i]]); sortedScores.push(globalScores[indices[i]]); } // Save updated leaderboard storage.globalLeaderboardNames = sortedNames; storage.globalLeaderboardScores = sortedScores; // Initialize current page if not exists if (!storage.leaderboardPage) { storage.leaderboardPage = 0; } // Display global scores with pagination (10 per page) var currentPage = storage.leaderboardPage || 0; var totalPages = Math.ceil(sortedNames.length / 10); var startIndex = currentPage * 10; var endIndex = Math.min(startIndex + 10, sortedNames.length); // Update page indicator pageIndicator.setText('SAYFA ' + (currentPage + 1) + '/' + totalPages); // Update pagination button states prevPageButton.alpha = currentPage > 0 ? 0.9 : 0.3; prevPageText.alpha = currentPage > 0 ? 1.0 : 0.3; nextPageButton.alpha = currentPage < totalPages - 1 ? 0.9 : 0.3; nextPageText.alpha = currentPage < totalPages - 1 ? 1.0 : 0.3; for (var i = 0; i < globalScoresList.length; i++) { var dataIndex = startIndex + i; if (dataIndex < sortedNames.length && dataIndex < endIndex) { var displayText = dataIndex + 1 + '. ' + sortedNames[dataIndex] + ': ' + sortedScores[dataIndex]; globalScoresList[i].setText(displayText); globalScoresList[i].visible = true; // Reset tint for regular players globalScoresList[i].tint = 0xFFFFFF; } else { globalScoresList[i].visible = false; } } // Find current player's rank if not in top 100 var playerRank = -1; var playerScore = highScore; for (var i = 0; i < sortedNames.length; i++) { if (sortedNames[i] === currentUsername) { playerRank = i + 1; playerScore = sortedScores[i]; break; } } // Show player's rank separately if not in current page view if (playerRank > 100 || playerRank > endIndex || playerRank <= startIndex) { if (globalScoresList.length > 0) { var lastVisibleIndex = -1; for (var i = globalScoresList.length - 1; i >= 0; i--) { if (globalScoresList[i].visible) { lastVisibleIndex = i; break; } } if (lastVisibleIndex >= 0 && lastVisibleIndex < globalScoresList.length - 1) { var playerText = '--- SİZ: ' + playerRank + '. ' + currentUsername + ': ' + playerScore + ' ---'; globalScoresList[lastVisibleIndex + 1].setText(playerText); globalScoresList[lastVisibleIndex + 1].visible = true; globalScoresList[lastVisibleIndex + 1].tint = 0xFFD700; } } } } // Function to hide leaderboard and return to main menu function hideLeaderboard() { showLeaderboard = false; showMainMenu = true; // Hide leaderboard elements leaderboardBg.visible = false; leaderboardTitle.visible = false; highScoreText.visible = false; currentScoreText.visible = false; backButton.visible = false; backButtonText.visible = false; globalLeaderboardText.visible = false; prevPageButton.visible = false; prevPageText.visible = false; nextPageButton.visible = false; nextPageText.visible = false; pageIndicator.visible = false; // Hide global scores list for (var i = 0; i < globalScoresList.length; i++) { globalScoresList[i].visible = false; } // Show main menu elements usernamePanel.visible = true; usernameText.visible = true; mainMenuTitle.visible = true; playButton.visible = true; playButtonText.visible = true; scoreButton.visible = true; scoreButtonText.visible = true; } // Reset all leaderboard data - start fresh storage.globalLeaderboardNames = []; storage.globalLeaderboardScores = []; // Don't reset personal high score and last score - keep them persistent // Initialize username if not exists if (!storage.username) { // Get next available player number var playerNumber = 1; var existingNames = storage.globalLeaderboardNames || []; while (existingNames.indexOf('Oyuncu ' + playerNumber) !== -1) { playerNumber++; } storage.username = 'Oyuncu ' + playerNumber; } // Display username in main menu usernameText.setText(storage.username); // Global leaderboard is now initialized in showLeaderboardScreen function // Initialize game createPipe(); createPipe(); // Touch/click handler game.down = function (x, y, obj) { if (gameOver) { resetGame(); return; } if (showMainMenu) { // Check play button (OYNA) - enlarged detection zone if (x >= 774 && x <= 1274 && y >= 1326 && y <= 1506) { // Add visual feedback with tween tween(playButton, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, onFinish: function onFinish() { tween(playButton, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); } }); // Add small delay to prevent double clicks LK.setTimeout(function () { startGameFromMenu(); }, 150); return; } // Check score button (SKOR) - enlarged detection zone if (x >= 774 && x <= 1274 && y >= 1426 && y <= 1606) { // Add visual feedback with tween tween(scoreButton, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, onFinish: function onFinish() { tween(scoreButton, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); } }); // Add small delay to prevent double clicks LK.setTimeout(function () { showLeaderboardScreen(); }, 150); return; } return; } if (showLeaderboard) { // Check back button (GERİ) - enlarged detection zone if (x >= 774 && x <= 1274 && y >= 1626 && y <= 1806) { // Add visual feedback with tween tween(backButton, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, onFinish: function onFinish() { tween(backButton, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); } }); // Add small delay to prevent double clicks LK.setTimeout(function () { hideLeaderboard(); }, 150); return; } // Check previous page button - enlarged detection zone if (x >= 474 && x <= 874 && y >= 1556 && y <= 1716) { var currentPage = storage.leaderboardPage || 0; if (currentPage > 0) { storage.leaderboardPage = currentPage - 1; showLeaderboardScreen(); } return; } // Check next page button - enlarged detection zone if (x >= 1224 && x <= 1624 && y >= 1556 && y <= 1716) { var currentPage = storage.leaderboardPage || 0; var totalPages = Math.ceil((storage.globalLeaderboardNames || []).length / 10); if (currentPage < totalPages - 1) { storage.leaderboardPage = currentPage + 1; showLeaderboardScreen(); } return; } return; } if (!gameStarted) { gameStarted = true; instructionTxt.visible = false; instructionBg.visible = false; // Remove invisible barriers when game starts if (topBarrier) { topBarrier.destroy(); topBarrier = null; } if (bottomBarrier) { bottomBarrier.destroy(); bottomBarrier = null; } } bird.flap(); }; // Main game loop game.update = function () { if (gameOver || showMainMenu || showLeaderboard) return; // Only run game logic if game has started if (gameStarted) { // Check ground collision if (bird.y + 20 >= 2732 - 150) { gameOver = true; // Save score before showing game over var currentScore = LK.getScore(); storage.lastScore = currentScore; var currentHighScore = storage.highScore || 0; if (currentScore > currentHighScore) { storage.highScore = currentScore; } resetGame(); return; } // Check ceiling collision if (bird.y - 20 <= 0) { gameOver = true; // Save score before showing game over var currentScore = LK.getScore(); storage.lastScore = currentScore; var currentHighScore = storage.highScore || 0; if (currentScore > currentHighScore) { storage.highScore = currentScore; } resetGame(); return; } // Check pipe collisions and scoring - only check pipes that are near the bird for (var i = 0; i < pipes.length; i++) { var pipe = pipes[i]; // Only check pipes that are within reasonable distance of the bird if (Math.abs(pipe.x - bird.x) < 200) { // Check if bird is within pipe horizontally if (bird.x + 30 > pipe.x - 50 && bird.x - 30 < pipe.x + 50) { // Check collision with top pipe if (bird.y - 20 < pipe.gapCenterY - pipe.gapSize / 2) { gameOver = true; // Save score before showing game over var currentScore = LK.getScore(); storage.lastScore = currentScore; var currentHighScore = storage.highScore || 0; if (currentScore > currentHighScore) { storage.highScore = currentScore; } resetGame(); return; } // Check collision with bottom pipe if (bird.y + 20 > pipe.gapCenterY + pipe.gapSize / 2) { gameOver = true; // Save score before showing game over var currentScore = LK.getScore(); storage.lastScore = currentScore; var currentHighScore = storage.highScore || 0; if (currentScore > currentHighScore) { storage.highScore = currentScore; } resetGame(); return; } } } // Check scoring - only for pipes that haven't been passed yet if (!pipe.passed && pipe.x + 50 < bird.x) { pipe.passed = true; LK.setScore(LK.getScore() + 1); scoreTxt.setText('SKOR: ' + LK.getScore()); LK.getSound('score').play(); } } // Create new pipes - maintain consistent spacing if (pipes.length === 0 || pipes.length > 0 && pipes[pipes.length - 1].x <= 2048 + 200 - pipeSpacing) { createPipe(); } // Remove off-screen pipes - only check every 10 frames to reduce lag if (LK.ticks % 10 === 0) { for (var j = pipes.length - 1; j >= 0; j--) { if (pipes[j].x < -150) { pipes[j].destroy(); pipes.splice(j, 1); } } } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Bird = Container.expand(function () {
var self = Container.call(this);
var birdGraphics = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = 0;
self.gravity = 0.8;
self.jumpStrength = -12;
self.flap = function () {
self.velocity = self.jumpStrength;
LK.getSound('flap').play();
};
self.update = function () {
if (!gameStarted) {
// Don't apply physics before game starts - keep bird completely still
self.velocity = 0;
self.y = 1366; // Keep bird at starting position
birdGraphics.rotation = 0; // Keep bird level
return;
}
self.velocity += self.gravity;
self.y += self.velocity;
// Rotate bird based on velocity
birdGraphics.rotation = Math.max(-0.5, Math.min(1.5, self.velocity * 0.1));
// Limit bird movement to screen bounds
if (self.y < 30) {
self.y = 30;
}
};
return self;
});
var Pipe = Container.expand(function (gapCenterY) {
var self = Container.call(this);
self.gapSize = 600;
self.speed = -3;
self.passed = false;
self.gapCenterY = gapCenterY;
// Create top pipe
var topPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 1
});
topPipe.y = gapCenterY - self.gapSize / 2;
topPipe.height = gapCenterY - self.gapSize / 2;
// Create bottom pipe
var bottomPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 0
});
bottomPipe.y = gapCenterY + self.gapSize / 2;
bottomPipe.height = 2732 - 150 - (gapCenterY + self.gapSize / 2);
self.update = function () {
if (!gameStarted) {
// Don't move pipes before game starts
return;
}
self.x += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var bird;
var pipes = [];
var ground;
var topBarrier;
var bottomBarrier;
var gameStarted = false;
var gameOver = false;
var showMainMenu = true;
var showLeaderboard = false;
var pipeSpacing = 600; // Consistent spacing between all pipes - balanced distance
// Create score display
var scoreTxt = new Text2('SKOR: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
scoreTxt.stroke = 0x000000;
scoreTxt.strokeThickness = 4;
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 100;
// Create username background panel
var usernamePanel = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 500,
height: 90,
alpha: 0.9
});
usernamePanel.tint = 0x333333;
LK.gui.center.addChild(usernamePanel);
usernamePanel.y = -100;
// Create username display
var usernameText = new Text2('', {
size: 60,
fill: 0x00FF00
});
usernameText.anchor.set(0.5, 0.5);
usernameText.stroke = 0x000000;
usernameText.strokeThickness = 3;
LK.gui.center.addChild(usernameText);
usernameText.y = -100;
// Create main menu elements
var mainMenuTitle = new Text2('FLAPPY BIRD', {
size: 100,
fill: 0xFFD700
});
mainMenuTitle.anchor.set(0.5, 0.5);
mainMenuTitle.stroke = 0x000000;
mainMenuTitle.strokeThickness = 5;
LK.gui.center.addChild(mainMenuTitle);
mainMenuTitle.y = -200;
// Create play button
var playButton = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 80,
alpha: 0.9
});
playButton.tint = 0x32CD32;
LK.gui.center.addChild(playButton);
playButton.y = 50;
var playButtonText = new Text2('OYNA', {
size: 50,
fill: 0xFFFFFF
});
playButtonText.anchor.set(0.5, 0.5);
playButtonText.stroke = 0x000000;
playButtonText.strokeThickness = 3;
LK.gui.center.addChild(playButtonText);
playButtonText.y = 50;
// Create score button
var scoreButton = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 80,
alpha: 0.9
});
scoreButton.tint = 0x4169E1;
LK.gui.center.addChild(scoreButton);
scoreButton.y = 150;
var scoreButtonText = new Text2('SKOR', {
size: 50,
fill: 0xFFFFFF
});
scoreButtonText.anchor.set(0.5, 0.5);
scoreButtonText.stroke = 0x000000;
scoreButtonText.strokeThickness = 3;
LK.gui.center.addChild(scoreButtonText);
scoreButtonText.y = 150;
// Create instruction text
var instructionTxt = new Text2('TIKLA VE OYNA!', {
size: 60,
fill: 0xFFFFFF
});
instructionTxt.anchor.set(0.5, 0.5);
instructionTxt.stroke = 0x000000;
instructionTxt.strokeThickness = 3;
instructionTxt.visible = false;
// Add background shape for instruction text
var instructionBg = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 400,
height: 100,
alpha: 0.8
});
instructionBg.tint = 0x000000;
instructionBg.visible = false;
LK.gui.center.addChild(instructionBg);
LK.gui.center.addChild(instructionTxt);
// Create leaderboard background
var leaderboardBg = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 1800,
height: 2200,
alpha: 0.95
});
leaderboardBg.tint = 0x1a1a1a;
leaderboardBg.visible = false;
LK.gui.center.addChild(leaderboardBg);
// Create leaderboard elements
var leaderboardTitle = new Text2('SKOR TABLOSU', {
size: 80,
fill: 0xFFD700
});
leaderboardTitle.anchor.set(0.5, 0.5);
leaderboardTitle.stroke = 0x000000;
leaderboardTitle.strokeThickness = 4;
leaderboardTitle.visible = false;
LK.gui.center.addChild(leaderboardTitle);
leaderboardTitle.y = -350;
var highScoreText = new Text2('EN YÜKSEK SKOR: 0', {
size: 50,
fill: 0xFFFFFF
});
highScoreText.anchor.set(0.5, 0.5);
highScoreText.stroke = 0x000000;
highScoreText.strokeThickness = 3;
highScoreText.visible = false;
LK.gui.center.addChild(highScoreText);
highScoreText.y = -250;
var currentScoreText = new Text2('SON SKOR: 0', {
size: 50,
fill: 0xFFFFFF
});
currentScoreText.anchor.set(0.5, 0.5);
currentScoreText.stroke = 0x000000;
currentScoreText.strokeThickness = 3;
currentScoreText.visible = false;
LK.gui.center.addChild(currentScoreText);
currentScoreText.y = -180;
// Create back button for leaderboard
var backButton = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 80,
alpha: 0.9
});
backButton.tint = 0xFF4500;
backButton.visible = false;
LK.gui.center.addChild(backButton);
backButton.y = 350;
var backButtonText = new Text2('GERİ', {
size: 50,
fill: 0xFFFFFF
});
backButtonText.anchor.set(0.5, 0.5);
backButtonText.stroke = 0x000000;
backButtonText.strokeThickness = 3;
backButtonText.visible = false;
LK.gui.center.addChild(backButtonText);
backButtonText.y = 350;
// Create pagination buttons
var prevPageButton = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 60,
alpha: 0.9
});
prevPageButton.tint = 0x4169E1;
prevPageButton.visible = false;
LK.gui.center.addChild(prevPageButton);
prevPageButton.y = 280;
prevPageButton.x = -300;
var prevPageText = new Text2('ÖNCEKİ', {
size: 35,
fill: 0xFFFFFF
});
prevPageText.anchor.set(0.5, 0.5);
prevPageText.stroke = 0x000000;
prevPageText.strokeThickness = 2;
prevPageText.visible = false;
LK.gui.center.addChild(prevPageText);
prevPageText.y = 280;
prevPageText.x = -300;
var nextPageButton = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 60,
alpha: 0.9
});
nextPageButton.tint = 0x4169E1;
nextPageButton.visible = false;
LK.gui.center.addChild(nextPageButton);
nextPageButton.y = 280;
nextPageButton.x = 300;
var nextPageText = new Text2('SONRAKİ', {
size: 35,
fill: 0xFFFFFF
});
nextPageText.anchor.set(0.5, 0.5);
nextPageText.stroke = 0x000000;
nextPageText.strokeThickness = 2;
nextPageText.visible = false;
LK.gui.center.addChild(nextPageText);
nextPageText.y = 280;
nextPageText.x = 300;
// Create page indicator
var pageIndicator = new Text2('SAYFA 1/10', {
size: 40,
fill: 0xFFFFFF
});
pageIndicator.anchor.set(0.5, 0.5);
pageIndicator.stroke = 0x000000;
pageIndicator.strokeThickness = 2;
pageIndicator.visible = false;
LK.gui.center.addChild(pageIndicator);
pageIndicator.y = 280;
// Create bird
bird = game.addChild(new Bird());
bird.x = 400;
bird.y = 1366;
// Create invisible barrier blocks to constrain bird before game starts
var topBarrier = game.addChild(LK.getAsset('barrier', {
anchorX: 0.5,
anchorY: 1
}));
topBarrier.x = 400;
topBarrier.y = 1316; // 50 pixels above bird
topBarrier.alpha = 0; // Make invisible
var bottomBarrier = game.addChild(LK.getAsset('barrier', {
anchorX: 0.5,
anchorY: 0
}));
bottomBarrier.x = 400;
bottomBarrier.y = 1416; // 50 pixels below bird
bottomBarrier.alpha = 0; // Make invisible
// Create ground
ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 1
}));
ground.x = 0;
ground.y = 2732;
// Create pipe function
function createPipe() {
var minGapY = 500;
var maxGapY = 2032; // 2732 - 150 - 600 (adjusted for larger gap)
var gapCenterY = minGapY + Math.random() * (maxGapY - minGapY);
var pipe = new Pipe(gapCenterY);
// Calculate position based on last pipe position + consistent spacing
if (pipes.length === 0) {
pipe.x = 2048 + 200; // First pipe position
} else {
pipe.x = pipes[pipes.length - 1].x + pipeSpacing; // Consistent spacing from last pipe
}
pipes.push(pipe);
game.addChild(pipe);
}
// Reset game function
function resetGame() {
// Reset bird
bird.x = 400;
bird.y = 1366;
bird.velocity = 0;
// Clear pipes
for (var i = pipes.length - 1; i >= 0; i--) {
pipes[i].destroy();
}
pipes = [];
// Reset variables
gameStarted = false;
gameOver = false;
showMainMenu = true;
showLeaderboard = false;
LK.setScore(0);
scoreTxt.setText('SKOR: 0');
// Show main menu
usernamePanel.visible = true;
usernameText.visible = true;
mainMenuTitle.visible = true;
playButton.visible = true;
playButtonText.visible = true;
scoreButton.visible = true;
scoreButtonText.visible = true;
// Hide instruction
instructionTxt.visible = false;
instructionBg.visible = false;
// Hide leaderboard elements
leaderboardBg.visible = false;
leaderboardTitle.visible = false;
highScoreText.visible = false;
currentScoreText.visible = false;
backButton.visible = false;
backButtonText.visible = false;
// Clear existing barriers if they exist
if (topBarrier) {
topBarrier.destroy();
topBarrier = null;
}
if (bottomBarrier) {
bottomBarrier.destroy();
bottomBarrier = null;
}
// Recreate invisible barriers
topBarrier = game.addChild(LK.getAsset('barrier', {
anchorX: 0.5,
anchorY: 1
}));
topBarrier.x = 400;
topBarrier.y = 1316; // 50 pixels above bird
topBarrier.alpha = 0; // Make invisible
bottomBarrier = game.addChild(LK.getAsset('barrier', {
anchorX: 0.5,
anchorY: 0
}));
bottomBarrier.x = 400;
bottomBarrier.y = 1416; // 50 pixels below bird
bottomBarrier.alpha = 0; // Make invisible
// Create initial pipes
createPipe();
createPipe();
}
// Function to start game from main menu
function startGameFromMenu() {
showMainMenu = false;
// Hide main menu elements
usernamePanel.visible = false;
usernameText.visible = false;
mainMenuTitle.visible = false;
playButton.visible = false;
playButtonText.visible = false;
scoreButton.visible = false;
scoreButtonText.visible = false;
// Show instruction
instructionTxt.visible = true;
instructionBg.visible = true;
}
// Create global leaderboard display elements
var globalLeaderboardText = new Text2('GLOBAL LIDERLER:', {
size: 50,
fill: 0xFFD700
});
globalLeaderboardText.anchor.set(0.5, 0.5);
globalLeaderboardText.stroke = 0x000000;
globalLeaderboardText.strokeThickness = 3;
globalLeaderboardText.visible = false;
LK.gui.center.addChild(globalLeaderboardText);
globalLeaderboardText.y = -80;
var globalScoresList = [];
for (var i = 0; i < 5; i++) {
var scoreText = new Text2('', {
size: 40,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0.5);
scoreText.stroke = 0x000000;
scoreText.strokeThickness = 2;
scoreText.visible = false;
LK.gui.center.addChild(scoreText);
scoreText.y = -10 + i * 50;
globalScoresList.push(scoreText);
}
// Function to show leaderboard
function showLeaderboardScreen() {
showMainMenu = false;
showLeaderboard = true;
// Hide main menu elements
usernamePanel.visible = false;
usernameText.visible = false;
mainMenuTitle.visible = false;
playButton.visible = false;
playButtonText.visible = false;
scoreButton.visible = false;
scoreButtonText.visible = false;
// Show leaderboard elements
leaderboardBg.visible = true;
leaderboardTitle.visible = true;
highScoreText.visible = true;
currentScoreText.visible = true;
backButton.visible = true;
backButtonText.visible = true;
globalLeaderboardText.visible = true;
prevPageButton.visible = true;
prevPageText.visible = true;
nextPageButton.visible = true;
nextPageText.visible = true;
pageIndicator.visible = true;
// Update score displays - ensure we're using the stored values
var highScore = storage.highScore || 0;
var lastScore = storage.lastScore || 0;
highScoreText.setText('EN YÜKSEK SKOR: ' + highScore);
currentScoreText.setText('SON SKOR: ' + lastScore);
// Initialize realistic player data if not exists
if (!storage.globalLeaderboardNames || storage.globalLeaderboardNames.length === 0) {
var playerNames = ['ProGamer_2024', 'BirdMaster', 'FlappyKing', 'SkyWalker', 'WingCommander', 'PipeJumper', 'HighFlyer', 'CloudDancer', 'AirAce', 'FlightPro', 'GoldenBird', 'SonicWings', 'TurboFlap', 'RocketBird', 'StormFlyer', 'LightningBird', 'ThunderWings', 'BlazeFlyer', 'IceWings', 'FireBird', 'ShadowFlyer', 'CrystalBird', 'DiamondWings', 'RubyFlyer', 'EmeraldBird', 'PlatinumWings', 'TitanFlyer', 'UltraWings', 'MegaFlyer', 'SuperBird', 'HyperWings', 'EliteFlyer', 'MasterBird', 'LegendWings', 'ChampionFlyer', 'VictoryBird', 'GloryWings', 'HeroFlyer', 'KnightBird', 'WarriorWings', 'GuardianFlyer', 'ProtectorBird', 'DefenderWings', 'SentinelFlyer', 'WatcherBird', 'RangerWings', 'ScoutFlyer', 'HunterBird', 'TrackerWings', 'SeekerFlyer', 'FinderBird', 'RoverWings', 'NomadFlyer', 'DrifterBird', 'WandererWings', 'ExplorerFlyer', 'AdventurerBird', 'VoyagerWings', 'TravelerFlyer', 'JourneyBird', 'QuestWings', 'MissionFlyer', 'TaskBird', 'DutyWings', 'ServiceFlyer', 'HonorBird', 'NobleWings', 'RoyalFlyer', 'ImperialBird', 'MajesticWings', 'SupremeFlyer', 'DivineWings', 'CelestialBird', 'HeavenlyFlyer', 'AngelicWings', 'SacredBird', 'HolyFlyer', 'BlessedWings', 'PureBird', 'InnocentFlyer', 'GentleWings', 'KindBird', 'SweetFlyer', 'LovingWings', 'CaringBird', 'TenderFlyer', 'SoftWings', 'WarmBird', 'CozryFlyer', 'ComfortWings', 'PeacefulBird', 'CalmFlyer', 'QuietWings', 'SilentBird', 'StillFlyer', 'RestfulWings', 'RelaxedBird', 'EasyFlyer', 'ChillWings', 'CoolBird'];
var playerScores = [852, 734, 698, 645, 612, 589, 567, 543, 521, 498, 476, 454, 432, 411, 389, 367, 345, 324, 302, 281, 259, 238, 217, 196, 175, 154, 133, 112, 91, 70, 65, 62, 59, 56, 53, 50, 47, 44, 41, 38, 35, 32, 29, 26, 23, 20, 18, 16, 14, 12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 87, 84, 81, 78, 75, 72, 69, 66, 63, 60, 57, 54, 51, 48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 1, 95, 92, 89, 86, 83, 80, 77, 74, 71, 68];
storage.globalLeaderboardNames = playerNames;
storage.globalLeaderboardScores = playerScores;
}
// Get global leaderboard from storage
var globalNames = storage.globalLeaderboardNames || [];
var globalScores = storage.globalLeaderboardScores || [];
// Add current player's high score if it doesn't exist and is greater than 0
var playerExists = false;
var currentUsername = storage.username || 'Oyuncu';
for (var i = 0; i < globalNames.length; i++) {
if (globalNames[i] === currentUsername) {
globalScores[i] = Math.max(globalScores[i], highScore);
playerExists = true;
break;
}
}
if (!playerExists && highScore > 0) {
globalNames.push(currentUsername);
globalScores.push(highScore);
}
// Sort scores in descending order by creating index array
var indices = [];
for (var i = 0; i < globalScores.length; i++) {
indices.push(i);
}
indices.sort(function (a, b) {
return globalScores[b] - globalScores[a];
});
// Create sorted arrays
var sortedNames = [];
var sortedScores = [];
for (var i = 0; i < indices.length; i++) {
sortedNames.push(globalNames[indices[i]]);
sortedScores.push(globalScores[indices[i]]);
}
// Save updated leaderboard
storage.globalLeaderboardNames = sortedNames;
storage.globalLeaderboardScores = sortedScores;
// Initialize current page if not exists
if (!storage.leaderboardPage) {
storage.leaderboardPage = 0;
}
// Display global scores with pagination (10 per page)
var currentPage = storage.leaderboardPage || 0;
var totalPages = Math.ceil(sortedNames.length / 10);
var startIndex = currentPage * 10;
var endIndex = Math.min(startIndex + 10, sortedNames.length);
// Update page indicator
pageIndicator.setText('SAYFA ' + (currentPage + 1) + '/' + totalPages);
// Update pagination button states
prevPageButton.alpha = currentPage > 0 ? 0.9 : 0.3;
prevPageText.alpha = currentPage > 0 ? 1.0 : 0.3;
nextPageButton.alpha = currentPage < totalPages - 1 ? 0.9 : 0.3;
nextPageText.alpha = currentPage < totalPages - 1 ? 1.0 : 0.3;
for (var i = 0; i < globalScoresList.length; i++) {
var dataIndex = startIndex + i;
if (dataIndex < sortedNames.length && dataIndex < endIndex) {
var displayText = dataIndex + 1 + '. ' + sortedNames[dataIndex] + ': ' + sortedScores[dataIndex];
globalScoresList[i].setText(displayText);
globalScoresList[i].visible = true;
// Reset tint for regular players
globalScoresList[i].tint = 0xFFFFFF;
} else {
globalScoresList[i].visible = false;
}
}
// Find current player's rank if not in top 100
var playerRank = -1;
var playerScore = highScore;
for (var i = 0; i < sortedNames.length; i++) {
if (sortedNames[i] === currentUsername) {
playerRank = i + 1;
playerScore = sortedScores[i];
break;
}
}
// Show player's rank separately if not in current page view
if (playerRank > 100 || playerRank > endIndex || playerRank <= startIndex) {
if (globalScoresList.length > 0) {
var lastVisibleIndex = -1;
for (var i = globalScoresList.length - 1; i >= 0; i--) {
if (globalScoresList[i].visible) {
lastVisibleIndex = i;
break;
}
}
if (lastVisibleIndex >= 0 && lastVisibleIndex < globalScoresList.length - 1) {
var playerText = '--- SİZ: ' + playerRank + '. ' + currentUsername + ': ' + playerScore + ' ---';
globalScoresList[lastVisibleIndex + 1].setText(playerText);
globalScoresList[lastVisibleIndex + 1].visible = true;
globalScoresList[lastVisibleIndex + 1].tint = 0xFFD700;
}
}
}
}
// Function to hide leaderboard and return to main menu
function hideLeaderboard() {
showLeaderboard = false;
showMainMenu = true;
// Hide leaderboard elements
leaderboardBg.visible = false;
leaderboardTitle.visible = false;
highScoreText.visible = false;
currentScoreText.visible = false;
backButton.visible = false;
backButtonText.visible = false;
globalLeaderboardText.visible = false;
prevPageButton.visible = false;
prevPageText.visible = false;
nextPageButton.visible = false;
nextPageText.visible = false;
pageIndicator.visible = false;
// Hide global scores list
for (var i = 0; i < globalScoresList.length; i++) {
globalScoresList[i].visible = false;
}
// Show main menu elements
usernamePanel.visible = true;
usernameText.visible = true;
mainMenuTitle.visible = true;
playButton.visible = true;
playButtonText.visible = true;
scoreButton.visible = true;
scoreButtonText.visible = true;
}
// Reset all leaderboard data - start fresh
storage.globalLeaderboardNames = [];
storage.globalLeaderboardScores = [];
// Don't reset personal high score and last score - keep them persistent
// Initialize username if not exists
if (!storage.username) {
// Get next available player number
var playerNumber = 1;
var existingNames = storage.globalLeaderboardNames || [];
while (existingNames.indexOf('Oyuncu ' + playerNumber) !== -1) {
playerNumber++;
}
storage.username = 'Oyuncu ' + playerNumber;
}
// Display username in main menu
usernameText.setText(storage.username);
// Global leaderboard is now initialized in showLeaderboardScreen function
// Initialize game
createPipe();
createPipe();
// Touch/click handler
game.down = function (x, y, obj) {
if (gameOver) {
resetGame();
return;
}
if (showMainMenu) {
// Check play button (OYNA) - enlarged detection zone
if (x >= 774 && x <= 1274 && y >= 1326 && y <= 1506) {
// Add visual feedback with tween
tween(playButton, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
onFinish: function onFinish() {
tween(playButton, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
}
});
// Add small delay to prevent double clicks
LK.setTimeout(function () {
startGameFromMenu();
}, 150);
return;
}
// Check score button (SKOR) - enlarged detection zone
if (x >= 774 && x <= 1274 && y >= 1426 && y <= 1606) {
// Add visual feedback with tween
tween(scoreButton, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
onFinish: function onFinish() {
tween(scoreButton, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
}
});
// Add small delay to prevent double clicks
LK.setTimeout(function () {
showLeaderboardScreen();
}, 150);
return;
}
return;
}
if (showLeaderboard) {
// Check back button (GERİ) - enlarged detection zone
if (x >= 774 && x <= 1274 && y >= 1626 && y <= 1806) {
// Add visual feedback with tween
tween(backButton, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
onFinish: function onFinish() {
tween(backButton, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
}
});
// Add small delay to prevent double clicks
LK.setTimeout(function () {
hideLeaderboard();
}, 150);
return;
}
// Check previous page button - enlarged detection zone
if (x >= 474 && x <= 874 && y >= 1556 && y <= 1716) {
var currentPage = storage.leaderboardPage || 0;
if (currentPage > 0) {
storage.leaderboardPage = currentPage - 1;
showLeaderboardScreen();
}
return;
}
// Check next page button - enlarged detection zone
if (x >= 1224 && x <= 1624 && y >= 1556 && y <= 1716) {
var currentPage = storage.leaderboardPage || 0;
var totalPages = Math.ceil((storage.globalLeaderboardNames || []).length / 10);
if (currentPage < totalPages - 1) {
storage.leaderboardPage = currentPage + 1;
showLeaderboardScreen();
}
return;
}
return;
}
if (!gameStarted) {
gameStarted = true;
instructionTxt.visible = false;
instructionBg.visible = false;
// Remove invisible barriers when game starts
if (topBarrier) {
topBarrier.destroy();
topBarrier = null;
}
if (bottomBarrier) {
bottomBarrier.destroy();
bottomBarrier = null;
}
}
bird.flap();
};
// Main game loop
game.update = function () {
if (gameOver || showMainMenu || showLeaderboard) return;
// Only run game logic if game has started
if (gameStarted) {
// Check ground collision
if (bird.y + 20 >= 2732 - 150) {
gameOver = true;
// Save score before showing game over
var currentScore = LK.getScore();
storage.lastScore = currentScore;
var currentHighScore = storage.highScore || 0;
if (currentScore > currentHighScore) {
storage.highScore = currentScore;
}
resetGame();
return;
}
// Check ceiling collision
if (bird.y - 20 <= 0) {
gameOver = true;
// Save score before showing game over
var currentScore = LK.getScore();
storage.lastScore = currentScore;
var currentHighScore = storage.highScore || 0;
if (currentScore > currentHighScore) {
storage.highScore = currentScore;
}
resetGame();
return;
}
// Check pipe collisions and scoring - only check pipes that are near the bird
for (var i = 0; i < pipes.length; i++) {
var pipe = pipes[i];
// Only check pipes that are within reasonable distance of the bird
if (Math.abs(pipe.x - bird.x) < 200) {
// Check if bird is within pipe horizontally
if (bird.x + 30 > pipe.x - 50 && bird.x - 30 < pipe.x + 50) {
// Check collision with top pipe
if (bird.y - 20 < pipe.gapCenterY - pipe.gapSize / 2) {
gameOver = true;
// Save score before showing game over
var currentScore = LK.getScore();
storage.lastScore = currentScore;
var currentHighScore = storage.highScore || 0;
if (currentScore > currentHighScore) {
storage.highScore = currentScore;
}
resetGame();
return;
}
// Check collision with bottom pipe
if (bird.y + 20 > pipe.gapCenterY + pipe.gapSize / 2) {
gameOver = true;
// Save score before showing game over
var currentScore = LK.getScore();
storage.lastScore = currentScore;
var currentHighScore = storage.highScore || 0;
if (currentScore > currentHighScore) {
storage.highScore = currentScore;
}
resetGame();
return;
}
}
}
// Check scoring - only for pipes that haven't been passed yet
if (!pipe.passed && pipe.x + 50 < bird.x) {
pipe.passed = true;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('SKOR: ' + LK.getScore());
LK.getSound('score').play();
}
}
// Create new pipes - maintain consistent spacing
if (pipes.length === 0 || pipes.length > 0 && pipes[pipes.length - 1].x <= 2048 + 200 - pipeSpacing) {
createPipe();
}
// Remove off-screen pipes - only check every 10 frames to reduce lag
if (LK.ticks % 10 === 0) {
for (var j = pipes.length - 1; j >= 0; j--) {
if (pipes[j].x < -150) {
pipes[j].destroy();
pipes.splice(j, 1);
}
}
}
}
};