/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, totalPlayed: 0 }); /**** * Classes ****/ var Character = Container.expand(function () { var self = Container.call(this); var happyFace = self.attachAsset('characterHappy', { anchorX: 0.5, anchorY: 0.5 }); happyFace.visible = false; var sadFace = self.attachAsset('characterSad', { anchorX: 0.5, anchorY: 0.5 }); sadFace.visible = false; var excitedFace = self.attachAsset('characterExcited', { anchorX: 0.5, anchorY: 0.5 }); excitedFace.visible = false; var neutralFace = self.attachAsset('characterNeutral', { anchorX: 0.5, anchorY: 0.5 }); neutralFace.visible = true; self.showHappy = function () { happyFace.visible = true; sadFace.visible = false; excitedFace.visible = false; neutralFace.visible = false; }; self.showSad = function () { happyFace.visible = false; sadFace.visible = true; excitedFace.visible = false; neutralFace.visible = false; }; self.showExcited = function () { happyFace.visible = false; sadFace.visible = false; excitedFace.visible = true; neutralFace.visible = false; }; self.showNeutral = function () { happyFace.visible = false; sadFace.visible = false; excitedFace.visible = false; neutralFace.visible = true; }; return self; }); var Joker = Container.expand(function (type, icon) { var self = Container.call(this); self.type = type; self.used = false; var background = self.attachAsset('jokerButton', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2(icon, { size: 50, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 3 }); text.anchor.set(0.5, 0.5); self.addChild(text); self.use = function () { if (self.used) { return false; } self.used = true; tween(self, { alpha: 0.4 }, { duration: 100 }); return true; }; self.reset = function () { self.used = false; self.alpha = 1; }; self.down = function (x, y, obj) { if (!self.used && !gameOver && !answerLocked && !menuOpen) { activateJoker(self.type); } }; return self; }); var MenuScreen = Container.expand(function () { var self = Container.call(this); // Menu background // Mavi ve mor dalgalı şeritlerden oluşan kapak arka planı var kapakWaves = new Container(); var waveColors = [0x3a1c71, 0x5e5ce6, 0x48a9e6, 0x9f5de2, 0x6a82fb, 0xfc5c7d]; var waveCount = 7; var waveHeight = Math.ceil(2732 / waveCount); for (var i = 0; i < waveCount; i++) { // Dalga için yatay kaydırma ve yükseklik ayarı var offset = Math.sin(i * 1.2) * 120; var color = waveColors[i % waveColors.length]; var wave = kapakWaves.attachAsset('menuscreen', { anchorX: 0.5, anchorY: 0, width: 2048 + 300, height: waveHeight + 80, color: color }); wave.x = 0; wave.y = i * waveHeight + Math.sin(i * 1.2) * 60; wave.rotation = Math.sin(i * 0.7) * 0.08; kapakWaves.addChild(wave); } kapakWaves.position.set(0, -1366); // Ortala (anchorY:0), menü ortası için self.addChildAt(kapakWaves, 0); // Add game title text to kapak (cover) var kapakTitleText = new Text2("upit milyoner", { size: 140, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 8 }); kapakTitleText.anchor.set(0.5, 0.5); kapakTitleText.position.set(0, -900); // Centered horizontally, visually above the play button kapakWaves.addChild(kapakTitleText); var background = self.attachAsset('menuscreen', { anchorX: 0.5, anchorY: 0.5 }); // Play button var playButtonContainer = new Container(); playButtonContainer.position.set(0, -100); // Moved 200 pixels down from original -300 self.addChild(playButtonContainer); var playButtonBg = playButtonContainer.attachAsset('menu_play', { anchorX: 0.5, anchorY: 0.5 }); playButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent) // Add "Play" text to play button playText = new Text2(labels[currentLang].play, { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); playText.anchor.set(0.5, 0.5); playButtonContainer.addChild(playText); // How to play button var howToPlayContainer = new Container(); howToPlayContainer.position.set(0, -1600); // Moved 1500 pixels up from original -100 self.addChild(howToPlayContainer); var howToPlayButtonBg = howToPlayContainer.attachAsset('menu_howtoplay', { anchorX: 0.5, anchorY: 0.5 }); howToPlayButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent) // Add "How To Play" text to how to play button howToPlayText = new Text2(labels[currentLang].how, { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); howToPlayText.anchor.set(0.5, 0.5); howToPlayContainer.addChild(howToPlayText); // Language button var languageContainer = new Container(); languageContainer.position.set(0, 102); self.addChild(languageContainer); var languageButtonBg = languageContainer.attachAsset('menu_language', { anchorX: 0.5, anchorY: 0.5 }); languageButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent) // Add "Language" text to language button languageText = new Text2(labels[currentLang].lang, { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); languageText.anchor.set(0.5, 0.5); languageContainer.addChild(languageText); // Stickman button var stickmanContainer = new Container(); stickmanContainer.position.set(0, 303); self.addChild(stickmanContainer); var stickmanButtonBg = stickmanContainer.attachAsset('menu_stickman', { anchorX: 0.5, anchorY: 0.5 }); stickmanButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent) // Add "Select Character" text to stickman button stickmanText = new Text2(labels[currentLang]["char"], { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); stickmanText.anchor.set(0.5, 0.5); stickmanContainer.addChild(stickmanText); // Handle clicks on all buttons playButtonContainer.interactive = true; playButtonContainer.down = function () { if (secondaryMenuOpen) { return; } // Don't do anything if secondary menu is open self.hide(); initGame(); }; howToPlayContainer.interactive = true; howToPlayContainer.down = function () { if (secondaryMenuOpen) { return; } // Don't do anything if secondary menu is open // For now just log console.log("How To Play clicked"); }; languageContainer.interactive = true; languageContainer.down = function () { if (secondaryMenuOpen) { return; } // Don't do anything if secondary menu is open openSecondaryMenu(languageMenu); }; stickmanContainer.interactive = true; stickmanContainer.down = function () { if (secondaryMenuOpen) { return; } // Don't do anything if secondary menu is open openSecondaryMenu(characterMenu); }; // Show menu self.show = function () { self.visible = true; menuOpen = true; // Set menu state to open }; // Hide menu self.hide = function () { self.visible = false; menuOpen = false; // Set menu state to closed }; return self; }); var PhoneFriendPopup = Container.expand(function () { var self = Container.call(this); // background card var bg = self.attachAsset('phonejokerscreen', { anchorX: 0.5, anchorY: 0.5, width: 1200, height: 800 }); bg.tint = 0xF5F5F5; // the single guess text var guessText = new Text2("", { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); guessText.anchor.set(0.5, 0.5); guessText.position.set(0, 0); self.addChild(guessText); self.visible = false; // show with the correct answer inserted self.show = function (answer) { guessText.setText('Hmm, I guess the answer is "' + answer + '"!'); self.visible = true; }; self.hide = function () { self.visible = false; }; return self; }); var QuestionButton = Container.expand(function (index, text) { var self = Container.call(this); self.index = index; self.isCorrect = false; self.isSelected = false; self.isEliminated = false; self.isDisabled = false; // Added for second chance joker // Apply additional 7% height increase while keeping width the same var background = self.attachAsset('buttonBackground', { anchorX: 0.5, anchorY: 0.5, width: 944, // 924 + 20 = 944 (adding 10px on each side) // Extended by 10 pixels on left and right height: 234, // 224 + 10 = 234 (adding 5px on top and 5px on bottom) shape: 'ellipse' // More rounded shape }); // Add outline to the button var btnWidth = 944; var btnHeight = 234; var cornerRadius = 50; // Create outline shape with same properties as button var outline = self.attachAsset('buttonBackground', { anchorX: 0.5, anchorY: 0.5, width: btnWidth + 10, // Slightly larger than the button height: btnHeight + 10, shape: 'ellipse' }); outline.tint = 0x000000; // Black outline outline.alpha = 0.8; // Make sure outline is rendered behind the button background self.addChildAt(outline, 0); var buttonText = new Text2(text, { size: 60, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); buttonText.anchor.set(0.5, 0.5); buttonText.position.set(10, 0); // Shift text 10 pixels to the right self.addChild(buttonText); var overlay = self.attachAsset('correctAnswerOverlay', { anchorX: 0.5, anchorY: 0.5, width: 944, // 924 + 20 = 944 (adding 10px on each side) // Extended by 10 pixels on left and right height: 234, // 224 + 10 = 234 (adding 5px on top and 5px on bottom) shape: 'ellipse' // More rounded shape for overlay }); overlay.alpha = 0; self.setText = function (newText) { buttonText.setText(wrapText(newText, 35)); }; self.setCorrect = function (correct) { self.isCorrect = correct; }; self.markAsCorrect = function () { overlay.tint = 0x00FF00; tween(overlay, { alpha: 0.5 }, { duration: 500 }); }; self.markAsIncorrect = function () { overlay.tint = 0xFF0000; tween(overlay, { alpha: 0.5 }, { duration: 500 }); }; self.reset = function () { overlay.alpha = 0; self.isSelected = false; self.isEliminated = false; self.isDisabled = false; // Reset disabled state self.alpha = 1; // Reset visual appearance back to fully visible }; self.eliminate = function () { if (self.isCorrect) { return false; } self.isEliminated = true; tween(self, { alpha: 0.3 }, { duration: 300 }); return true; }; // New function for second chance joker self.disable = function () { self.isDisabled = true; tween(self, { alpha: 0.3 }, { duration: 300 }); }; self.down = function (x, y, obj) { if (!self.isEliminated && !self.isDisabled && !gameOver && !answerLocked && !menuOpen) { self.isSelected = true; submitAnswer(self.index); } }; return self; }); var SecondarySmallMenu = Container.expand(function (title, options) { var self = Container.call(this); // Create full screen overlay that captures all clicks var overlay = new Container(); overlay.width = 2048; overlay.height = 2732; overlay.position.set(-2048 / 2, -2732 / 2); // Position overlay to cover entire screen overlay.hitArea = new Rectangle(0, 0, 2048, 2732); overlay.interactive = true; overlay.down = function (x, y, obj) { closeSecondaryMenus(); }; self.addChild(overlay); // Create background var background = self.attachAsset('secondarysmallmenu', { anchorX: 0.5, anchorY: 0.5, width: 1200, height: 800 }); // Make background interactive to prevent click events from reaching overlay background.hitArea = new Rectangle(-600, -400, 1200, 800); background.interactive = true; background.down = function (x, y, obj) { // Stop propagation - do nothing when clicking the background if (obj && obj.event && typeof obj.event.stopPropagation === 'function') { obj.event.stopPropagation(); } }; // Create title text var titleText = new Text2(title, { size: 80, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); titleText.anchor.set(0.5, 0); titleText.position.set(0, -300); self.addChild(titleText); // Create options buttons self.optionButtons = []; for (var i = 0; i < options.length; i++) { var optionContainer = new Container(); optionContainer.position.set(0, -150 + i * 120); var optionBackground = optionContainer.attachAsset('buttonBackground', { anchorX: 0.5, anchorY: 0.5, width: 800, height: 100 }); var optionText = new Text2(options[i], { size: 60, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 3 }); optionText.anchor.set(0.5, 0.5); optionContainer.addChild(optionText); optionContainer.optionValue = options[i]; // Handle button click optionContainer.interactive = true; optionContainer.down = function (x, y, obj) { // Stop propagation to prevent menu from closing immediately if (obj && obj.event && typeof obj.event.stopPropagation === 'function') { obj.event.stopPropagation(); } console.log("Selected option: " + obj.parent.optionValue); self.hide(); secondaryMenuOpen = false; activeSecondaryMenu = null; }; self.optionButtons.push(optionContainer); self.addChild(optionContainer); } self.visible = false; self.show = function () { self.visible = true; secondaryMenuOpen = true; activeSecondaryMenu = self; }; self.hide = function () { self.visible = false; }; return self; }); var Stickman = Container.expand(function () { var self = Container.call(this); // Create stickman assets var stickmanhappy = self.attachAsset('stickmanhappy', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var stickmanthinking = self.attachAsset('stickmanthinking', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var stickmandisappointed = self.attachAsset('stickmandisappointed', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var stickmanangry = self.attachAsset('stickmanagry', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var stickmanwinner = self.attachAsset('stickmanwinner', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); // Create Pepo assets var pepohappy = self.attachAsset('pepohappy', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var pepothinking = self.attachAsset('pepothinking', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var pepodisappointed = self.attachAsset('pepodisappointed', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var pepoangry = self.attachAsset('pepoangry', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var pepowin = self.attachAsset('pepowin', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); // Create Chill Guy assets var chillguyhappy = self.attachAsset('chillguyhappy', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var chillguythinking = self.attachAsset('chillguythinking', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var chillguydisappointed = self.attachAsset('chillguydisappointed', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var chillguyangry = self.attachAsset('chillguyangry', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var chillguywin = self.attachAsset('chillguywin', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); // Create at0m assets var atomhappy = self.attachAsset('atomhappy', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var atomthinking = self.attachAsset('atomthinking', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var atomdisappointed = self.attachAsset('atomdisappointed', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var atomangry = self.attachAsset('atomangry', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var atomwin = self.attachAsset('atomwin', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); // Set all to same position stickmanhappy.position.set(0, 0); stickmanthinking.position.set(0, 0); stickmandisappointed.position.set(0, 0); stickmanangry.position.set(0, 0); stickmanwinner.position.set(0, 0); pepohappy.position.set(0, 0); pepothinking.position.set(0, 0); pepodisappointed.position.set(0, 0); pepoangry.position.set(0, 0); pepowin.position.set(0, 0); chillguyhappy.position.set(0, 0); chillguythinking.position.set(0, 0); chillguydisappointed.position.set(0, 0); chillguyangry.position.set(0, 0); chillguywin.position.set(0, 0); atomhappy.position.set(0, 0); atomthinking.position.set(0, 0); atomdisappointed.position.set(0, 0); atomangry.position.set(0, 0); atomwin.position.set(0, 0); // Initially hide Pepo and Chill Guy assets pepohappy.visible = false; pepothinking.visible = false; pepodisappointed.visible = false; pepoangry.visible = false; pepowin.visible = false; chillguyhappy.visible = false; chillguythinking.visible = false; chillguydisappointed.visible = false; chillguyangry.visible = false; chillguywin.visible = false; // Initially hide at0m assets atomhappy.visible = false; atomthinking.visible = false; atomdisappointed.visible = false; atomangry.visible = false; atomwin.visible = false; // Helper function to show only one state function showOnly(target) { if (self.currentCharacter === "Pepo") { pepohappy.visible = target === 'happy'; pepothinking.visible = target === 'thinking'; pepodisappointed.visible = target === 'disappointed'; pepoangry.visible = target === 'angry'; pepowin.visible = target === 'winner'; // Hide all stickman, chillguy, and at0m assets stickmanhappy.visible = false; stickmanthinking.visible = false; stickmandisappointed.visible = false; stickmanangry.visible = false; stickmanwinner.visible = false; chillguyhappy.visible = false; chillguythinking.visible = false; chillguydisappointed.visible = false; chillguyangry.visible = false; chillguywin.visible = false; atomhappy.visible = false; atomthinking.visible = false; atomdisappointed.visible = false; atomangry.visible = false; atomwin.visible = false; } else if (self.currentCharacter === "Rahat Adam") { chillguyhappy.visible = target === 'happy'; chillguythinking.visible = target === 'thinking'; chillguydisappointed.visible = target === 'disappointed'; chillguyangry.visible = target === 'angry'; chillguywin.visible = target === 'winner'; // Hide all stickman, pepo, and at0m assets stickmanhappy.visible = false; stickmanthinking.visible = false; stickmandisappointed.visible = false; stickmanangry.visible = false; stickmanwinner.visible = false; pepohappy.visible = false; pepothinking.visible = false; pepodisappointed.visible = false; pepoangry.visible = false; pepowin.visible = false; atomhappy.visible = false; atomthinking.visible = false; atomdisappointed.visible = false; atomangry.visible = false; atomwin.visible = false; } else if (self.currentCharacter === "KEKO") { atomhappy.visible = target === 'happy'; atomthinking.visible = target === 'thinking'; atomdisappointed.visible = target === 'disappointed'; atomangry.visible = target === 'angry'; atomwin.visible = target === 'winner'; // Hide all stickman, pepo, and chillguy assets stickmanhappy.visible = false; stickmanthinking.visible = false; stickmandisappointed.visible = false; stickmanangry.visible = false; stickmanwinner.visible = false; pepohappy.visible = false; pepothinking.visible = false; pepodisappointed.visible = false; pepoangry.visible = false; pepowin.visible = false; chillguyhappy.visible = false; chillguythinking.visible = false; chillguydisappointed.visible = false; chillguyangry.visible = false; chillguywin.visible = false; } else { stickmanhappy.visible = target === 'happy'; stickmanthinking.visible = target === 'thinking'; stickmandisappointed.visible = target === 'disappointed'; stickmanangry.visible = target === 'angry'; stickmanwinner.visible = target === 'winner'; // Hide all pepo, chillguy, and at0m assets pepohappy.visible = false; pepothinking.visible = false; pepodisappointed.visible = false; pepoangry.visible = false; pepowin.visible = false; chillguyhappy.visible = false; chillguythinking.visible = false; chillguydisappointed.visible = false; chillguyangry.visible = false; chillguywin.visible = false; atomhappy.visible = false; atomthinking.visible = false; atomdisappointed.visible = false; atomangry.visible = false; atomwin.visible = false; } } // Set default character self.currentCharacter = "Stickman"; // Method to set character type self.setCharacter = function (characterType) { self.currentCharacter = characterType; // Update current state if (stickmanthinking.visible) { showOnly('thinking'); } else if (stickmanhappy.visible || pepohappy.visible) { showOnly('happy'); } else if (stickmandisappointed.visible || pepodisappointed.visible) { showOnly('disappointed'); } else if (stickmanangry.visible || pepoangry.visible) { showOnly('angry'); } else if (stickmanwinner.visible || pepowin.visible) { showOnly('winner'); } else { // Default to thinking showOnly('thinking'); } }; // Initialize with thinking visible showOnly('thinking'); // Public methods to change stickman state self.showHappy = function () { showOnly('happy'); }; self.showThinking = function () { showOnly('thinking'); }; self.showDisappointed = function () { showOnly('disappointed'); }; self.showAngry = function () { showOnly('angry'); }; self.showWinner = function () { showOnly('winner'); }; return self; }); var TrollFaces = Container.expand(function () { var self = Container.call(this); var trollFaceHappy = self.attachAsset('trollfacehappy', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var trollFaceSad = self.attachAsset('trollfacesad', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var trollFaceSmile = self.attachAsset('trollfacesmile', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); var trollFaceAngry = self.attachAsset('trollfaceangry', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); // Set all faces to same position trollFaceHappy.position.set(0, 0); trollFaceSad.position.set(0, 0); trollFaceSmile.position.set(0, 0); trollFaceAngry.position.set(0, 0); // Helper function to show only one face function showOnly(target) { trollFaceHappy.visible = target === 'happy'; trollFaceSad.visible = target === 'sad'; trollFaceSmile.visible = target === 'smile'; trollFaceAngry.visible = target === 'angry'; } // Initially only show happy face showOnly('happy'); self.showHappy = function () { showOnly('happy'); }; self.showSad = function () { showOnly('sad'); }; self.showSmile = function () { showOnly('smile'); }; self.showAngry = function () { showOnly('angry'); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Menüdeki buton metinlerini tutacak global referanslar var playText, howToPlayText, languageText, stickmanText; // Oyun başlığı (upit milyoner) - üstte ortalanmış şekilde var gameTitleText = new Text2("upit milyoner", { size: 110, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 7 }); gameTitleText.anchor.set(0.5, 0); gameTitleText.position.set(2048 / 2, 10); game.addChild(gameTitleText); /** * Uzun metni kelime bütünlüğünü bozmadan maxChars uzunluğunda parçalara ayırır. * @param {string} text — Orijinal metin * @param {number} maxChars — Bir satırdaki maksimum karakter sayısı * @returns {string} Satır sonlarıyla (\n) bölünmüş metin */ function wrapText(text, maxChars) { var lines = []; var remainder = text; while (remainder.length > maxChars) { // İlk maxChars karakterlik bölümü al var slice = remainder.slice(0, maxChars); // Kelime bütünlüğü için son boşluğu bul var lastSpace = slice.lastIndexOf(' '); if (lastSpace > 0) { lines.push(slice.slice(0, lastSpace)); remainder = remainder.slice(lastSpace + 1); } else { // Boşluk yoksa zorla kır lines.push(slice); remainder = remainder.slice(maxChars); } } // Kalan küçük metni de ekle if (remainder.length > 0) { lines.push(remainder); } return lines.join('\n'); } // ——— DİL SEÇİMİ & SORU VERİSİ ——— var currentLang = "tr"; // Başlangıçta Türkçe var questions; // Sorular initGame'de atanacak var questionsByLang = { tr: [{ question: "1. Öğrencilerin en sevdiği ders hangisidir?", answers: ["A) Matematik", "B) Coğrafya", "C) Fen Bilgisi", "D) Futbol"], correctIndex: 3 }, { question: "2. Çin Seddi nerededir?", answers: ["A) Çin", "B) Meksika", "C) Moğolistan", "D) Mısır"], correctIndex: 0 }, { question: "3. Dinlediğiniz marş hangi ülkenin dilindedir?", answers: ["A) İngilizce", "B) Rusça", "C) Almanca", "D) İspanyolca"], correctIndex: 1 }, { question: "4. Bogos binted?", answers: ["A) Evet", "B) Hayır", "C) Belki", "D) Rusça"], correctIndex: 1 }, { question: "5. Hangi “gezegen” dünyayı ısıtır?", answers: ["A) Güneş", "B) Jüpiter", "C) Ay", "D) Hiçbiri"], correctIndex: 3 }, { question: "6. İkincisinin gelmesi 6 yıl, üçüncüsünün gelmesi 13 yıl süren şey nedir?", answers: ["A) Avatar", "B) GTA", "C) Kargocu’nun kargomu teslim etme süresi", "D) RDR3"], correctIndex: 2 }, { question: "7. Cyberpunk 2077’nin distopik geleceğinde karşılaşılan en korkunç şey hangisidir?", answers: ["A) Beyne çip takılması", "B) Hâlâ trap dinlenmesi", "C) Göz kürenizi çıkarıp yerine vidalı, lazerli sensör takılması", "D) Çetelerin sokağı ele geçirmesi"], correctIndex: 1 }, { question: "8. Hayatımı düzene sokup spora başlamaya ne zaman karar veririm?", answers: ["A) Akşam yemeği sırasında", "B) Günün en verimli saatinde", "C) Saat 12:00’de", "D) Gece saat 03:00’te, yataktayken"], correctIndex: 3 }, { question: "9. Tüm diyetler ne zaman başlar?", answers: ["A) Pazar", "B) Pazartesi", "C) Salı", "D) Çarşamba"], correctIndex: 1 }, { question: "10. Kulakları en büyük hayvan hangisidir?", answers: ["A) Yarasa", "B) Tavşan", "C) Fil", "D) Kedi"], correctIndex: 2 }, { question: "11. Türkiye'nin başkenti neresidir?", answers: ["A) İstanbul", "B) Portekiz", "C) İzmir", "D) Bursa"], correctIndex: 1 }] }; // Menü butonları için Türkçe metinler var labels = { tr: { play: "Oyna", how: "Nasıl Oynanır", lang: "Dil", "char": "Karakter Seç" } }; // Game constants // Character images for different emotions/states var TOTAL_QUESTIONS = 10; var TIME_PER_QUESTION = 30; // seconds var BUTTON_SPACING = 180; var selectedCharacter = "Stickman"; // Default character selection // Function to update character assets based on selection function updateCharacterAssets() { if (selectedCharacter === "Pepo") { // Replace stickman assets with pepo assets stickman.setCharacter("Pepo"); } else if (selectedCharacter === "Rahat Adam") { // Replace stickman assets with chillguy assets stickman.setCharacter("Rahat Adam"); } else if (selectedCharacter === "KEKO") { // Replace stickman assets with KEKO assets stickman.setCharacter("KEKO"); } else { // Default to stickman stickman.setCharacter("Stickman"); } } // Game state variables var currentQuestion = 0; var score = 0; var timeLeft = TIME_PER_QUESTION; var gameOver = false; var answerLocked = false; var secondChanceActive = false; // Track if second chance is active for current question var currentCorrectIndex = 0; var indianMusicPlaying = false; // Flag to track if indian music is playing // Quiz questions var questions = [{ question: "1. Öğrencilerin en sevdiği ders hangisidir?", answers: ["Matematik", "Coğrafya", "Fen Bilgisi", "Türkçe"], correctIndex: 3 }, { question: "2. Çin Seddi nerededir?", answers: ["Çin", "Meksika", "Moğolistan", "Mısır"], correctIndex: 0 }, { question: "3. Dinlediğiniz marş hangi ülkenin dilindedir?", answers: ["İngilizce", "Rusça", "Almanca", "İspanyolca"], correctIndex: 1 }, { question: "4. Bogos binted?", answers: ["Evet", "Hayır", "Belki", "Rusça"], correctIndex: 1 }, { question: "5. Hangi “gezegen” dünyayı ısıtır?", answers: ["Güneş", "Jüpiter", "Ay", "Hiçbiri"], correctIndex: 3 }, { question: "6. İkincisinin gelmesi 6 yıl, üçüncüsünün gelmesi 13 yıl süren şey nedir?", answers: ["Avatar", "GTA", "Kargocu’nun kargomu teslim etme süresi", "RDR3"], correctIndex: 2 }, { question: "7. Cyberpunk 2077’nin distopik geleceğinde karşılaşılan en korkunç şey hangisidir?", answers: ["Beyne çip takılması", "Hâlâ trap dinlenmesi", "Göz kürenizi çıkarıp yerine vidalı, lazerli sensör takılması", "Çetelerin sokağı ele geçirmesi"], correctIndex: 1 }, { question: "8. Hayatımı düzene sokup spora başlamaya ne zaman karar veririm?", answers: ["Akşam yemeği sırasında", "Günün en verimli saatinde", "Saat 12:00’de", "Gece saat 03:00’te, yataktayken"], correctIndex: 3 }, { question: "9. Tüm diyetler ne zaman başlar?", answers: ["Pazar", "Pazartesi", "Salı", "Çarşamba"], correctIndex: 1 }, { question: "10. Kulakları en büyük hayvan hangisidir?", answers: ["Yarasa", "Tavşan", "Fil", "Kedi"], correctIndex: 2 }, { question: "11. Türkiye'nin başkenti neresidir?", answers: ["İstanbul", "Adana", "İzmir", "Bursa"], correctIndex: 1 }, { question: "12. En hızlı koşan kara hayvanı hangisidir?", answers: ["A) Aslan", "B) Çita", "C) Kanguru", "D) Tavşan"], correctIndex: 1 }]; // Background colors for different questions var backgroundColors = [0x87CEEB, // Sky blue 0x98FB98, // Pale green 0xFFB6C1, // Light pink 0xFFD700, // Gold 0xE6E6FA, // Lavender 0xFFA07A, // Light salmon 0xADD8E6, // Light blue 0xF0E68C, // Khaki 0xD8BFD8, // Thistle 0xAFEEEE // Pale turquoise ]; // Create UI elements var theset = game.addChild(LK.getAsset('theset', { anchorX: 0.5, anchorY: 0.5 })); theset.position.set(2048 / 2 - 30 + 10, 2732 / 2 - 600 + 400 + 100); var mainQuestionBoard = game.addChild(LK.getAsset('mainquestionboard', { anchorX: 0.5, anchorY: 0.5 })); mainQuestionBoard.position.set(2048 / 2 + 135, 2732 / 2 + 430); var questionCard = game.addChild(LK.getAsset('questionCard', { anchorX: 0.5, anchorY: -0.8 })); questionCard.position.set(2048 / 2, 2732 / 2 - 500); var questionText = new Text2("", { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); questionText.anchor.set(0.5, 0.5); questionText.position.set(0, 920); questionCard.addChild(questionText); var answerButtons = []; for (var i = 0; i < 4; i++) { var button = new QuestionButton(i, ""); if (i === 0) { // Move button A 500 pixels down and 215 pixels left button.position.set(2048 / 2 - 515, 2732 / 2 - 100 + i * BUTTON_SPACING + 970); } else if (i === 1) { // Move button B 970 pixels down and 400 pixels right, then 20 pixels left button.position.set(2048 / 2 + 510, 2732 / 2 - 100 + i * BUTTON_SPACING + 790); } else if (i === 2) { // Move button C 950 pixels down and 510 pixels left button.position.set(2048 / 2 - 510, 2732 / 2 - 200 + i * BUTTON_SPACING + 1010); } else { button.position.set(2048 / 2 + 515, 2732 / 2 - 200 + i * BUTTON_SPACING + 830); } answerButtons.push(button); game.addChild(button); } // Create jokers var jokers = []; var jokerTypes = ["fifty", "audience", "phone", "second"]; var jokerIcons = ["50/50", "👥", "📞", "🔄"]; for (var i = 0; i < 4; i++) { var joker = new Joker(jokerTypes[i], jokerIcons[i]); joker.position.set(280 + i * 150, 200); jokers.push(joker); game.addChild(joker); } // Create character var character = new Character(); character.position.set(2048 / 2, 2732 - 300); game.addChild(character); // Create timer UI var timerText = new Text2("", { size: 100, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 5 }); timerText.anchor.set(0.5, 0.5); timerText.position.set(2048 / 2, 150); game.addChild(timerText); // Create score display var scoreText = new Text2("Score: 0", { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); scoreText.anchor.set(1, 0); scoreText.position.set(2048 - 50, 50); game.addChild(scoreText); // Create question counter var counterText = new Text2("Question: 1/" + TOTAL_QUESTIONS, { size: 70, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); counterText.anchor.set(0, 0); counterText.position.set(205, 50); game.addChild(counterText); // Second chance indicator text var secondChanceText = new Text2("", { size: 60, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 3 }); secondChanceText.anchor.set(0.5, 0.5); secondChanceText.position.set(2048 / 2, 280); game.addChild(secondChanceText); // Create phone a friend popup var phoneFriendPopup = new PhoneFriendPopup(); phoneFriendPopup.position.set(2048 / 2, 2732 / 2); game.addChild(phoneFriendPopup); // Create and add troll faces var trollFaces = new TrollFaces(); trollFaces.position.set(2048 / 2 + 735, 2732 / 2 - 190); game.addChild(trollFaces); // Create and add stickman character var stickman = new Stickman(); stickman.position.set(2048 / 2 - 725, 2732 / 2 - 150); game.addChild(stickman); // Game timer var gameTimer = LK.setInterval(function () { if (gameOver || answerLocked || menuOpen) { return; } timeLeft--; timerText.setText(timeLeft); // Change character expression when time is running low if (timeLeft <= 5) { character.showExcited(); trollFaces.showSmile(); stickman.showAngry(); // Show angry stickman when 5 seconds left } if (timeLeft <= 0) { timeExpired(); } }, 1000); // Game functions function loadQuestion(index) { if (index >= questions.length) { endGame(true); return; } // Change background color game.setBackgroundColor(backgroundColors[index]); var question = questions[index]; questionText.setText(wrapText(question.question, 45)); currentCorrectIndex = question.correctIndex; for (var i = 0; i < 4; i++) { answerButtons[i].setText(question.answers[i]); answerButtons[i].setCorrect(i === question.correctIndex); answerButtons[i].reset(); } timeLeft = TIME_PER_QUESTION; timerText.setText(timeLeft); currentQuestion = index; // Play Indian music when loading question 3 if (index === 2) { // Question index 2 is the 3rd question (0-based indexing) LK.playMusic('indian'); indianMusicPlaying = true; } // Play Russian short music once 3 seconds after question 4 loads if (index === 3) { LK.setTimeout(function () { LK.playMusic('russianshort', { loop: false }); }, 3000); } // Play background music when 5th question is loaded if (index === 4) { LK.playMusic('backgroundMusic'); } // Sayaç metni var countLabel = { tr: "Soru: ", en: "Question: ", es: "Pregunta: ", de: "Frage: ", fr: "Question : " }[currentLang]; counterText.setText(countLabel + (index + 1) + "/" + TOTAL_QUESTIONS); // Skor metni var scoreLabel = currentLang === "tr" ? "Puan: " : "Score: "; scoreText.setText(scoreLabel + score); character.showNeutral(); stickman.showThinking(); // Reset stickman to thinking state for new question secondChanceActive = false; // Reset second chance status for new question secondChanceText.setText(""); // Clear second chance indicator answerLocked = false; } function submitAnswer(index) { if (answerLocked || menuOpen || secondaryMenuOpen) { return; } var correct = index === currentCorrectIndex; // Stop Indian music if it's playing (for 3rd question) if (indianMusicPlaying) { LK.stopMusic(); indianMusicPlaying = false; } // Special handling for second chance joker if (secondChanceActive) { if (correct) { // If correct answer with second chance active, proceed normally answerLocked = true; LK.getSound('correctSound').play(); answerButtons[index].markAsCorrect(); character.showHappy(); trollFaces.showSad(); // Show sad troll face for correct answer score++; // Use millionaire prize tiers based on question number var prizeMoney; switch (currentQuestion) { case 0: prizeMoney = 250; break; case 1: prizeMoney = 500; break; case 2: prizeMoney = 1000; break; case 3: prizeMoney = 2500; break; case 4: prizeMoney = 25000; break; case 5: prizeMoney = 50000; break; case 6: prizeMoney = 100000; break; case 7: prizeMoney = 250000; break; case 8: prizeMoney = 500000; break; case 9: prizeMoney = 1000000; break; default: prizeMoney = 0; } scoreText.setText("Score: " + prizeMoney); // Clear second chance indicator secondChanceActive = false; secondChanceText.setText(""); // Load next question after delay LK.setTimeout(function () { loadQuestion(currentQuestion + 1); }, 1500); } else { // If wrong answer with second chance active, disable only that button LK.getSound('incorrectSound').play(); answerButtons[index].disable(); // Make this button unclickable // Deactivate second chance - one wrong answer protection used secondChanceActive = false; secondChanceText.setText(""); // Clear the indicator // Player can still continue with this question, but will lose on next wrong answer } } else { // Normal answer handling (no second chance active) answerLocked = true; if (correct) { LK.getSound('correctSound').play(); answerButtons[index].markAsCorrect(); character.showHappy(); trollFaces.showSad(); // Show sad troll face for correct answer stickman.showHappy(); // Show happy stickman for correct answer score++; // Use millionaire prize tiers based on question number var prizeMoney; switch (currentQuestion) { case 0: prizeMoney = 250; break; case 1: prizeMoney = 500; break; case 2: prizeMoney = 1000; break; case 3: prizeMoney = 2500; break; case 4: prizeMoney = 25000; break; case 5: prizeMoney = 50000; break; case 6: prizeMoney = 100000; break; case 7: prizeMoney = 250000; break; case 8: prizeMoney = 500000; break; case 9: prizeMoney = 1000000; break; default: prizeMoney = 0; } scoreText.setText("Score: " + prizeMoney); LK.setTimeout(function () { trollFaces.showHappy(); loadQuestion(currentQuestion + 1); }, 2000); } else { LK.getSound('incorrectSound').play(); // Play hahaha sound with 0.2 second delay LK.setTimeout(function () { LK.getSound('hahaha').play(); // Play hahaha sound for wrong answer }, 200); answerButtons[index].markAsIncorrect(); character.showSad(); trollFaces.showHappy(); // Show happy troll face for wrong answer stickman.showDisappointed(); // Show disappointed stickman for wrong answer // Show correct answer and end game answerButtons[currentCorrectIndex].markAsCorrect(); LK.setTimeout(function () { LK.setTimeout(function () { endGame(false); }, 3000); }, 3000); } } } function timeExpired() { answerLocked = true; character.showSad(); trollFaces.showHappy(); // Show happy troll face when time expires stickman.showDisappointed(); // Show disappointed stickman when time expires // Highlight correct answer answerButtons[currentCorrectIndex].markAsCorrect(); // Stop Indian music if it's playing (for 3rd question) if (indianMusicPlaying) { LK.stopMusic(); indianMusicPlaying = false; } LK.setTimeout(function () { endGame(false); }, 3000); } function activateJoker(type) { var joker = findJokerByType(type); if (!joker || joker.used || menuOpen) { return; } LK.getSound('jokerSound').play(); switch (type) { case "fifty": useFiftyFifty(); joker.use(); break; case "audience": useAudienceHelp(); joker.use(); break; case "phone": usePhoneFriend(); joker.use(); break; case "second": useSecondChance(); // For second chance, we don't mark the joker as used yet // It will be marked as used when the player submits an answer break; } } function findJokerByType(type) { for (var i = 0; i < jokers.length; i++) { if (jokers[i].type === type) { return jokers[i]; } } return null; } function useFiftyFifty() { var eliminated = 0; var attempts = 0; // Try to eliminate two wrong answers while (eliminated < 2 && attempts < 10) { attempts++; var randomIndex = Math.floor(Math.random() * 4); if (answerButtons[randomIndex].eliminate()) { eliminated++; } } } function useAudienceHelp() { // Calculate audience accuracy based on question number // Accuracy decreases as questions get harder var baseAccuracy = 0.99 - currentQuestion * 0.05; for (var i = 0; i < 4; i++) { var percentage; if (i === currentCorrectIndex) { // Correct answer gets higher percentage based on accuracy percentage = Math.floor(baseAccuracy * 100); } else { // Distribute remaining percentage among wrong answers percentage = Math.floor((1 - baseAccuracy) * 33); } // Update button text to show percentage var originalText = questions[currentQuestion].answers[i]; answerButtons[i].setText(originalText + " (" + percentage + "%)"); } // Reset the text after 5 seconds LK.setTimeout(function () { for (var i = 0; i < 4; i++) { answerButtons[i].setText(questions[currentQuestion].answers[i]); } }, 5000); } function usePhoneFriend() { // hide the normal question card questionCard.visible = false; // show our new popup with the real answer var correctAnswer = questions[currentQuestion].answers[currentCorrectIndex]; phoneFriendPopup.show(correctAnswer); // mark the joker used findJokerByType('phone').use(); // Add click handler to close popup when clicked anywhere game.phoneFriendClickHandler = function (x, y, obj) { phoneFriendPopup.hide(); questionCard.visible = true; // Remove the handler by setting it to null game.phoneFriendClickHandler = null; }; // Assign the handler to game's down event game.down = game.phoneFriendClickHandler; // after 5 seconds, hide popup and go back LK.setTimeout(function () { phoneFriendPopup.hide(); questionCard.visible = true; // Remove click handler if timer expires first game.phoneFriendClickHandler = null; }, 5000); } function useSecondChance() { // Only activate if not already active if (!secondChanceActive) { // Mark second chance as active for the current question secondChanceActive = true; // Display second chance status secondChanceText.setText("Second Chance Active 🔄"); secondChanceText.visible = true; // Get the second chance joker var secondChanceJoker = findJokerByType("second"); // Don't mark as used yet - will be used when player makes a selection // We only want to mark it visually as active tween(secondChanceJoker, { alpha: 0.7 }, { duration: 300 }); } } // Phone friend callback has been replaced by direct handling in usePhoneFriend function endGame(completed) { gameOver = true; // Update high score if (score > storage.highScore) { storage.highScore = score; } // Update total games played storage.totalPlayed = (storage.totalPlayed || 0) + 1; // Show game over screen if (completed) { trollFaces.showAngry(); // Show angry troll face when completing all questions stickman.showWinner(); // Show winner stickman when completing all questions // Play yay sound when player wins LK.getSound('yay').play(); LK.setTimeout(function () { LK.showYouWin(); }, 2000); } else { LK.showGameOver(); } } // Create menu screen var menuScreen = new MenuScreen(); menuScreen.position.set(2048 / 2, 2732 / 2); game.addChild(menuScreen); // ——— DİL MENÜSÜ ——— var languageMenu = new SecondarySmallMenu("Dil Seç / Select Language", ["Türkçe", "English", "Español", "Deutsch", "Français"]); languageMenu.position.set(2048 / 2, 2732 / 2); game.addChild(languageMenu); languageMenu.optionButtons.forEach(function (btn) { btn.down = function (x, y, obj) { // Tıklama olayının menüyü tekrar kapatmaması için if (obj && obj.event && typeof obj.event.stopPropagation === 'function') { obj.event.stopPropagation(); } // seçime göre currentLang switch (this.optionValue) { case "Türkçe": currentLang = "tr"; break; case "English": currentLang = "en"; break; case "Español": currentLang = "es"; break; case "Deutsch": currentLang = "de"; break; case "Français": currentLang = "fr"; break; } // Sadece dil menüsünü kapat closeSecondaryMenus(); // Menüdeki etiketleri (Play, Language vs) ve sayaç metnini güncelle playText.setText(labels[currentLang].play); howToPlayText.setText(labels[currentLang].how); languageText.setText(labels[currentLang].lang); stickmanText.setText(labels[currentLang]["char"]); // Eğer ekranındaki başka metinler (counterText vb.) varsa, onları da güncelle: counterText.setText({ tr: "Soru: ", en: "Question: ", es: "Pregunta: ", de: "Frage: ", fr: "Question : " }[currentLang] + (currentQuestion + 1) + "/" + TOTAL_QUESTIONS); scoreText.setText((currentLang === "tr" ? "Puan: " : "Score: ") + score); }; }); var characterMenu = new SecondarySmallMenu("Select Character", ["Pepo", "Rahat Adam", "KEKO", "-", "-"]); characterMenu.position.set(2048 / 2, 2732 / 2); game.addChild(characterMenu); // Override character menu option buttons to only close menu when clicked characterMenu.optionButtons.forEach(function (btn) { btn.down = function (x, y, obj) { // Stop propagation to prevent menu from closing immediately if (obj && obj.event && typeof obj.event.stopPropagation === 'function') { obj.event.stopPropagation(); } // Check which character was selected if (this.optionValue === "Pepo") { // Set a global flag to track which character is selected selectedCharacter = "Pepo"; // Update stickman with Pepo assets updateCharacterAssets(); } else if (this.optionValue === "Rahat Adam") { // Set a global flag to track which character is selected selectedCharacter = "Rahat Adam"; // Update stickman with Rahat Adam assets updateCharacterAssets(); } else if (this.optionValue === "KEKO") { // Set a global flag to track which character is selected selectedCharacter = "KEKO"; // Update stickman with KEKO assets updateCharacterAssets(); } // Only close the small menu when a character is clicked characterMenu.hide(); secondaryMenuOpen = false; activeSecondaryMenu = null; }; }); // Track menu states var menuOpen = true; var secondaryMenuOpen = false; var activeSecondaryMenu = null; // Initialize game function initGame() { // ——— Dil bazlı soruları seç questions = questionsByLang[currentLang]; TOTAL_QUESTIONS = questions.length; score = 0; gameOver = false; currentQuestion = 0; secondChanceActive = false; indianMusicPlaying = false; // Reset jokers for (var i = 0; i < jokers.length; i++) { jokers[i].reset(); } // Update score text - starting prize is $0 before first question answered scoreText.setText("Score: " + 0); // Clear second chance text secondChanceText.setText(""); // Reset troll faces trollFaces.showHappy(); // Reset stickman stickman.showThinking(); // Start with first question loadQuestion(0); // Play background music LK.playMusic('backgroundMusic'); } // Initially hide game elements function hideGameElements() { // Hide all game UI elements theset.visible = false; mainQuestionBoard.visible = false; questionCard.visible = false; timerText.visible = false; scoreText.visible = false; counterText.visible = false; character.visible = false; stickman.visible = false; trollFaces.visible = false; secondChanceText.visible = false; // Hide answer buttons and jokers for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].visible = false; } for (var i = 0; i < jokers.length; i++) { jokers[i].visible = false; } } // Show game elements function showGameElements() { // Show all game UI elements theset.visible = true; mainQuestionBoard.visible = true; questionCard.visible = true; timerText.visible = true; scoreText.visible = true; counterText.visible = true; character.visible = true; stickman.visible = true; trollFaces.visible = true; // Show answer buttons and jokers for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].visible = true; } for (var i = 0; i < jokers.length; i++) { jokers[i].visible = true; } } // Initially hide game elements and show menu hideGameElements(); menuScreen.show(); // Function to open secondary menu function openSecondaryMenu(menu) { closeSecondaryMenus(); // Close any existing menu first menu.show(); // This now handles setting secondaryMenuOpen and activeSecondaryMenu } // Function to close all secondary menus function closeSecondaryMenus() { if (activeSecondaryMenu) { activeSecondaryMenu.hide(); activeSecondaryMenu = null; secondaryMenuOpen = false; } } // Add global click handler for game elements game.down = function (x, y, obj) { // Handle phone friend callback if active if (game.phoneFriendClickHandler) { game.phoneFriendClickHandler(x, y, obj); } }; // Modified initGame to show game elements var originalInitGame = initGame; initGame = function initGame() { showGameElements(); originalInitGame(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0,
totalPlayed: 0
});
/****
* Classes
****/
var Character = Container.expand(function () {
var self = Container.call(this);
var happyFace = self.attachAsset('characterHappy', {
anchorX: 0.5,
anchorY: 0.5
});
happyFace.visible = false;
var sadFace = self.attachAsset('characterSad', {
anchorX: 0.5,
anchorY: 0.5
});
sadFace.visible = false;
var excitedFace = self.attachAsset('characterExcited', {
anchorX: 0.5,
anchorY: 0.5
});
excitedFace.visible = false;
var neutralFace = self.attachAsset('characterNeutral', {
anchorX: 0.5,
anchorY: 0.5
});
neutralFace.visible = true;
self.showHappy = function () {
happyFace.visible = true;
sadFace.visible = false;
excitedFace.visible = false;
neutralFace.visible = false;
};
self.showSad = function () {
happyFace.visible = false;
sadFace.visible = true;
excitedFace.visible = false;
neutralFace.visible = false;
};
self.showExcited = function () {
happyFace.visible = false;
sadFace.visible = false;
excitedFace.visible = true;
neutralFace.visible = false;
};
self.showNeutral = function () {
happyFace.visible = false;
sadFace.visible = false;
excitedFace.visible = false;
neutralFace.visible = true;
};
return self;
});
var Joker = Container.expand(function (type, icon) {
var self = Container.call(this);
self.type = type;
self.used = false;
var background = self.attachAsset('jokerButton', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2(icon, {
size: 50,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 3
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.use = function () {
if (self.used) {
return false;
}
self.used = true;
tween(self, {
alpha: 0.4
}, {
duration: 100
});
return true;
};
self.reset = function () {
self.used = false;
self.alpha = 1;
};
self.down = function (x, y, obj) {
if (!self.used && !gameOver && !answerLocked && !menuOpen) {
activateJoker(self.type);
}
};
return self;
});
var MenuScreen = Container.expand(function () {
var self = Container.call(this);
// Menu background
// Mavi ve mor dalgalı şeritlerden oluşan kapak arka planı
var kapakWaves = new Container();
var waveColors = [0x3a1c71, 0x5e5ce6, 0x48a9e6, 0x9f5de2, 0x6a82fb, 0xfc5c7d];
var waveCount = 7;
var waveHeight = Math.ceil(2732 / waveCount);
for (var i = 0; i < waveCount; i++) {
// Dalga için yatay kaydırma ve yükseklik ayarı
var offset = Math.sin(i * 1.2) * 120;
var color = waveColors[i % waveColors.length];
var wave = kapakWaves.attachAsset('menuscreen', {
anchorX: 0.5,
anchorY: 0,
width: 2048 + 300,
height: waveHeight + 80,
color: color
});
wave.x = 0;
wave.y = i * waveHeight + Math.sin(i * 1.2) * 60;
wave.rotation = Math.sin(i * 0.7) * 0.08;
kapakWaves.addChild(wave);
}
kapakWaves.position.set(0, -1366); // Ortala (anchorY:0), menü ortası için
self.addChildAt(kapakWaves, 0);
// Add game title text to kapak (cover)
var kapakTitleText = new Text2("upit milyoner", {
size: 140,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 8
});
kapakTitleText.anchor.set(0.5, 0.5);
kapakTitleText.position.set(0, -900); // Centered horizontally, visually above the play button
kapakWaves.addChild(kapakTitleText);
var background = self.attachAsset('menuscreen', {
anchorX: 0.5,
anchorY: 0.5
});
// Play button
var playButtonContainer = new Container();
playButtonContainer.position.set(0, -100); // Moved 200 pixels down from original -300
self.addChild(playButtonContainer);
var playButtonBg = playButtonContainer.attachAsset('menu_play', {
anchorX: 0.5,
anchorY: 0.5
});
playButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent)
// Add "Play" text to play button
playText = new Text2(labels[currentLang].play, {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
playText.anchor.set(0.5, 0.5);
playButtonContainer.addChild(playText);
// How to play button
var howToPlayContainer = new Container();
howToPlayContainer.position.set(0, -1600); // Moved 1500 pixels up from original -100
self.addChild(howToPlayContainer);
var howToPlayButtonBg = howToPlayContainer.attachAsset('menu_howtoplay', {
anchorX: 0.5,
anchorY: 0.5
});
howToPlayButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent)
// Add "How To Play" text to how to play button
howToPlayText = new Text2(labels[currentLang].how, {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
howToPlayText.anchor.set(0.5, 0.5);
howToPlayContainer.addChild(howToPlayText);
// Language button
var languageContainer = new Container();
languageContainer.position.set(0, 102);
self.addChild(languageContainer);
var languageButtonBg = languageContainer.attachAsset('menu_language', {
anchorX: 0.5,
anchorY: 0.5
});
languageButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent)
// Add "Language" text to language button
languageText = new Text2(labels[currentLang].lang, {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
languageText.anchor.set(0.5, 0.5);
languageContainer.addChild(languageText);
// Stickman button
var stickmanContainer = new Container();
stickmanContainer.position.set(0, 303);
self.addChild(stickmanContainer);
var stickmanButtonBg = stickmanContainer.attachAsset('menu_stickman', {
anchorX: 0.5,
anchorY: 0.5
});
stickmanButtonBg.alpha = 0.9; // Set to 40% opacity (60% transparent)
// Add "Select Character" text to stickman button
stickmanText = new Text2(labels[currentLang]["char"], {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
stickmanText.anchor.set(0.5, 0.5);
stickmanContainer.addChild(stickmanText);
// Handle clicks on all buttons
playButtonContainer.interactive = true;
playButtonContainer.down = function () {
if (secondaryMenuOpen) {
return;
} // Don't do anything if secondary menu is open
self.hide();
initGame();
};
howToPlayContainer.interactive = true;
howToPlayContainer.down = function () {
if (secondaryMenuOpen) {
return;
} // Don't do anything if secondary menu is open
// For now just log
console.log("How To Play clicked");
};
languageContainer.interactive = true;
languageContainer.down = function () {
if (secondaryMenuOpen) {
return;
} // Don't do anything if secondary menu is open
openSecondaryMenu(languageMenu);
};
stickmanContainer.interactive = true;
stickmanContainer.down = function () {
if (secondaryMenuOpen) {
return;
} // Don't do anything if secondary menu is open
openSecondaryMenu(characterMenu);
};
// Show menu
self.show = function () {
self.visible = true;
menuOpen = true; // Set menu state to open
};
// Hide menu
self.hide = function () {
self.visible = false;
menuOpen = false; // Set menu state to closed
};
return self;
});
var PhoneFriendPopup = Container.expand(function () {
var self = Container.call(this);
// background card
var bg = self.attachAsset('phonejokerscreen', {
anchorX: 0.5,
anchorY: 0.5,
width: 1200,
height: 800
});
bg.tint = 0xF5F5F5;
// the single guess text
var guessText = new Text2("", {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
guessText.anchor.set(0.5, 0.5);
guessText.position.set(0, 0);
self.addChild(guessText);
self.visible = false;
// show with the correct answer inserted
self.show = function (answer) {
guessText.setText('Hmm, I guess the answer is "' + answer + '"!');
self.visible = true;
};
self.hide = function () {
self.visible = false;
};
return self;
});
var QuestionButton = Container.expand(function (index, text) {
var self = Container.call(this);
self.index = index;
self.isCorrect = false;
self.isSelected = false;
self.isEliminated = false;
self.isDisabled = false; // Added for second chance joker
// Apply additional 7% height increase while keeping width the same
var background = self.attachAsset('buttonBackground', {
anchorX: 0.5,
anchorY: 0.5,
width: 944,
// 924 + 20 = 944 (adding 10px on each side)
// Extended by 10 pixels on left and right
height: 234,
// 224 + 10 = 234 (adding 5px on top and 5px on bottom)
shape: 'ellipse' // More rounded shape
});
// Add outline to the button
var btnWidth = 944;
var btnHeight = 234;
var cornerRadius = 50;
// Create outline shape with same properties as button
var outline = self.attachAsset('buttonBackground', {
anchorX: 0.5,
anchorY: 0.5,
width: btnWidth + 10,
// Slightly larger than the button
height: btnHeight + 10,
shape: 'ellipse'
});
outline.tint = 0x000000; // Black outline
outline.alpha = 0.8;
// Make sure outline is rendered behind the button background
self.addChildAt(outline, 0);
var buttonText = new Text2(text, {
size: 60,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
buttonText.anchor.set(0.5, 0.5);
buttonText.position.set(10, 0); // Shift text 10 pixels to the right
self.addChild(buttonText);
var overlay = self.attachAsset('correctAnswerOverlay', {
anchorX: 0.5,
anchorY: 0.5,
width: 944,
// 924 + 20 = 944 (adding 10px on each side)
// Extended by 10 pixels on left and right
height: 234,
// 224 + 10 = 234 (adding 5px on top and 5px on bottom)
shape: 'ellipse' // More rounded shape for overlay
});
overlay.alpha = 0;
self.setText = function (newText) {
buttonText.setText(wrapText(newText, 35));
};
self.setCorrect = function (correct) {
self.isCorrect = correct;
};
self.markAsCorrect = function () {
overlay.tint = 0x00FF00;
tween(overlay, {
alpha: 0.5
}, {
duration: 500
});
};
self.markAsIncorrect = function () {
overlay.tint = 0xFF0000;
tween(overlay, {
alpha: 0.5
}, {
duration: 500
});
};
self.reset = function () {
overlay.alpha = 0;
self.isSelected = false;
self.isEliminated = false;
self.isDisabled = false; // Reset disabled state
self.alpha = 1; // Reset visual appearance back to fully visible
};
self.eliminate = function () {
if (self.isCorrect) {
return false;
}
self.isEliminated = true;
tween(self, {
alpha: 0.3
}, {
duration: 300
});
return true;
};
// New function for second chance joker
self.disable = function () {
self.isDisabled = true;
tween(self, {
alpha: 0.3
}, {
duration: 300
});
};
self.down = function (x, y, obj) {
if (!self.isEliminated && !self.isDisabled && !gameOver && !answerLocked && !menuOpen) {
self.isSelected = true;
submitAnswer(self.index);
}
};
return self;
});
var SecondarySmallMenu = Container.expand(function (title, options) {
var self = Container.call(this);
// Create full screen overlay that captures all clicks
var overlay = new Container();
overlay.width = 2048;
overlay.height = 2732;
overlay.position.set(-2048 / 2, -2732 / 2); // Position overlay to cover entire screen
overlay.hitArea = new Rectangle(0, 0, 2048, 2732);
overlay.interactive = true;
overlay.down = function (x, y, obj) {
closeSecondaryMenus();
};
self.addChild(overlay);
// Create background
var background = self.attachAsset('secondarysmallmenu', {
anchorX: 0.5,
anchorY: 0.5,
width: 1200,
height: 800
});
// Make background interactive to prevent click events from reaching overlay
background.hitArea = new Rectangle(-600, -400, 1200, 800);
background.interactive = true;
background.down = function (x, y, obj) {
// Stop propagation - do nothing when clicking the background
if (obj && obj.event && typeof obj.event.stopPropagation === 'function') {
obj.event.stopPropagation();
}
};
// Create title text
var titleText = new Text2(title, {
size: 80,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
titleText.anchor.set(0.5, 0);
titleText.position.set(0, -300);
self.addChild(titleText);
// Create options buttons
self.optionButtons = [];
for (var i = 0; i < options.length; i++) {
var optionContainer = new Container();
optionContainer.position.set(0, -150 + i * 120);
var optionBackground = optionContainer.attachAsset('buttonBackground', {
anchorX: 0.5,
anchorY: 0.5,
width: 800,
height: 100
});
var optionText = new Text2(options[i], {
size: 60,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 3
});
optionText.anchor.set(0.5, 0.5);
optionContainer.addChild(optionText);
optionContainer.optionValue = options[i];
// Handle button click
optionContainer.interactive = true;
optionContainer.down = function (x, y, obj) {
// Stop propagation to prevent menu from closing immediately
if (obj && obj.event && typeof obj.event.stopPropagation === 'function') {
obj.event.stopPropagation();
}
console.log("Selected option: " + obj.parent.optionValue);
self.hide();
secondaryMenuOpen = false;
activeSecondaryMenu = null;
};
self.optionButtons.push(optionContainer);
self.addChild(optionContainer);
}
self.visible = false;
self.show = function () {
self.visible = true;
secondaryMenuOpen = true;
activeSecondaryMenu = self;
};
self.hide = function () {
self.visible = false;
};
return self;
});
var Stickman = Container.expand(function () {
var self = Container.call(this);
// Create stickman assets
var stickmanhappy = self.attachAsset('stickmanhappy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var stickmanthinking = self.attachAsset('stickmanthinking', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var stickmandisappointed = self.attachAsset('stickmandisappointed', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var stickmanangry = self.attachAsset('stickmanagry', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var stickmanwinner = self.attachAsset('stickmanwinner', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
// Create Pepo assets
var pepohappy = self.attachAsset('pepohappy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var pepothinking = self.attachAsset('pepothinking', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var pepodisappointed = self.attachAsset('pepodisappointed', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var pepoangry = self.attachAsset('pepoangry', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var pepowin = self.attachAsset('pepowin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
// Create Chill Guy assets
var chillguyhappy = self.attachAsset('chillguyhappy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var chillguythinking = self.attachAsset('chillguythinking', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var chillguydisappointed = self.attachAsset('chillguydisappointed', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var chillguyangry = self.attachAsset('chillguyangry', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var chillguywin = self.attachAsset('chillguywin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
// Create at0m assets
var atomhappy = self.attachAsset('atomhappy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var atomthinking = self.attachAsset('atomthinking', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var atomdisappointed = self.attachAsset('atomdisappointed', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var atomangry = self.attachAsset('atomangry', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var atomwin = self.attachAsset('atomwin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
// Set all to same position
stickmanhappy.position.set(0, 0);
stickmanthinking.position.set(0, 0);
stickmandisappointed.position.set(0, 0);
stickmanangry.position.set(0, 0);
stickmanwinner.position.set(0, 0);
pepohappy.position.set(0, 0);
pepothinking.position.set(0, 0);
pepodisappointed.position.set(0, 0);
pepoangry.position.set(0, 0);
pepowin.position.set(0, 0);
chillguyhappy.position.set(0, 0);
chillguythinking.position.set(0, 0);
chillguydisappointed.position.set(0, 0);
chillguyangry.position.set(0, 0);
chillguywin.position.set(0, 0);
atomhappy.position.set(0, 0);
atomthinking.position.set(0, 0);
atomdisappointed.position.set(0, 0);
atomangry.position.set(0, 0);
atomwin.position.set(0, 0);
// Initially hide Pepo and Chill Guy assets
pepohappy.visible = false;
pepothinking.visible = false;
pepodisappointed.visible = false;
pepoangry.visible = false;
pepowin.visible = false;
chillguyhappy.visible = false;
chillguythinking.visible = false;
chillguydisappointed.visible = false;
chillguyangry.visible = false;
chillguywin.visible = false;
// Initially hide at0m assets
atomhappy.visible = false;
atomthinking.visible = false;
atomdisappointed.visible = false;
atomangry.visible = false;
atomwin.visible = false;
// Helper function to show only one state
function showOnly(target) {
if (self.currentCharacter === "Pepo") {
pepohappy.visible = target === 'happy';
pepothinking.visible = target === 'thinking';
pepodisappointed.visible = target === 'disappointed';
pepoangry.visible = target === 'angry';
pepowin.visible = target === 'winner';
// Hide all stickman, chillguy, and at0m assets
stickmanhappy.visible = false;
stickmanthinking.visible = false;
stickmandisappointed.visible = false;
stickmanangry.visible = false;
stickmanwinner.visible = false;
chillguyhappy.visible = false;
chillguythinking.visible = false;
chillguydisappointed.visible = false;
chillguyangry.visible = false;
chillguywin.visible = false;
atomhappy.visible = false;
atomthinking.visible = false;
atomdisappointed.visible = false;
atomangry.visible = false;
atomwin.visible = false;
} else if (self.currentCharacter === "Rahat Adam") {
chillguyhappy.visible = target === 'happy';
chillguythinking.visible = target === 'thinking';
chillguydisappointed.visible = target === 'disappointed';
chillguyangry.visible = target === 'angry';
chillguywin.visible = target === 'winner';
// Hide all stickman, pepo, and at0m assets
stickmanhappy.visible = false;
stickmanthinking.visible = false;
stickmandisappointed.visible = false;
stickmanangry.visible = false;
stickmanwinner.visible = false;
pepohappy.visible = false;
pepothinking.visible = false;
pepodisappointed.visible = false;
pepoangry.visible = false;
pepowin.visible = false;
atomhappy.visible = false;
atomthinking.visible = false;
atomdisappointed.visible = false;
atomangry.visible = false;
atomwin.visible = false;
} else if (self.currentCharacter === "KEKO") {
atomhappy.visible = target === 'happy';
atomthinking.visible = target === 'thinking';
atomdisappointed.visible = target === 'disappointed';
atomangry.visible = target === 'angry';
atomwin.visible = target === 'winner';
// Hide all stickman, pepo, and chillguy assets
stickmanhappy.visible = false;
stickmanthinking.visible = false;
stickmandisappointed.visible = false;
stickmanangry.visible = false;
stickmanwinner.visible = false;
pepohappy.visible = false;
pepothinking.visible = false;
pepodisappointed.visible = false;
pepoangry.visible = false;
pepowin.visible = false;
chillguyhappy.visible = false;
chillguythinking.visible = false;
chillguydisappointed.visible = false;
chillguyangry.visible = false;
chillguywin.visible = false;
} else {
stickmanhappy.visible = target === 'happy';
stickmanthinking.visible = target === 'thinking';
stickmandisappointed.visible = target === 'disappointed';
stickmanangry.visible = target === 'angry';
stickmanwinner.visible = target === 'winner';
// Hide all pepo, chillguy, and at0m assets
pepohappy.visible = false;
pepothinking.visible = false;
pepodisappointed.visible = false;
pepoangry.visible = false;
pepowin.visible = false;
chillguyhappy.visible = false;
chillguythinking.visible = false;
chillguydisappointed.visible = false;
chillguyangry.visible = false;
chillguywin.visible = false;
atomhappy.visible = false;
atomthinking.visible = false;
atomdisappointed.visible = false;
atomangry.visible = false;
atomwin.visible = false;
}
}
// Set default character
self.currentCharacter = "Stickman";
// Method to set character type
self.setCharacter = function (characterType) {
self.currentCharacter = characterType;
// Update current state
if (stickmanthinking.visible) {
showOnly('thinking');
} else if (stickmanhappy.visible || pepohappy.visible) {
showOnly('happy');
} else if (stickmandisappointed.visible || pepodisappointed.visible) {
showOnly('disappointed');
} else if (stickmanangry.visible || pepoangry.visible) {
showOnly('angry');
} else if (stickmanwinner.visible || pepowin.visible) {
showOnly('winner');
} else {
// Default to thinking
showOnly('thinking');
}
};
// Initialize with thinking visible
showOnly('thinking');
// Public methods to change stickman state
self.showHappy = function () {
showOnly('happy');
};
self.showThinking = function () {
showOnly('thinking');
};
self.showDisappointed = function () {
showOnly('disappointed');
};
self.showAngry = function () {
showOnly('angry');
};
self.showWinner = function () {
showOnly('winner');
};
return self;
});
var TrollFaces = Container.expand(function () {
var self = Container.call(this);
var trollFaceHappy = self.attachAsset('trollfacehappy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var trollFaceSad = self.attachAsset('trollfacesad', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var trollFaceSmile = self.attachAsset('trollfacesmile', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
var trollFaceAngry = self.attachAsset('trollfaceangry', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 3
});
// Set all faces to same position
trollFaceHappy.position.set(0, 0);
trollFaceSad.position.set(0, 0);
trollFaceSmile.position.set(0, 0);
trollFaceAngry.position.set(0, 0);
// Helper function to show only one face
function showOnly(target) {
trollFaceHappy.visible = target === 'happy';
trollFaceSad.visible = target === 'sad';
trollFaceSmile.visible = target === 'smile';
trollFaceAngry.visible = target === 'angry';
}
// Initially only show happy face
showOnly('happy');
self.showHappy = function () {
showOnly('happy');
};
self.showSad = function () {
showOnly('sad');
};
self.showSmile = function () {
showOnly('smile');
};
self.showAngry = function () {
showOnly('angry');
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Menüdeki buton metinlerini tutacak global referanslar
var playText, howToPlayText, languageText, stickmanText;
// Oyun başlığı (upit milyoner) - üstte ortalanmış şekilde
var gameTitleText = new Text2("upit milyoner", {
size: 110,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 7
});
gameTitleText.anchor.set(0.5, 0);
gameTitleText.position.set(2048 / 2, 10);
game.addChild(gameTitleText);
/**
* Uzun metni kelime bütünlüğünü bozmadan maxChars uzunluğunda parçalara ayırır.
* @param {string} text — Orijinal metin
* @param {number} maxChars — Bir satırdaki maksimum karakter sayısı
* @returns {string} Satır sonlarıyla (\n) bölünmüş metin
*/
function wrapText(text, maxChars) {
var lines = [];
var remainder = text;
while (remainder.length > maxChars) {
// İlk maxChars karakterlik bölümü al
var slice = remainder.slice(0, maxChars);
// Kelime bütünlüğü için son boşluğu bul
var lastSpace = slice.lastIndexOf(' ');
if (lastSpace > 0) {
lines.push(slice.slice(0, lastSpace));
remainder = remainder.slice(lastSpace + 1);
} else {
// Boşluk yoksa zorla kır
lines.push(slice);
remainder = remainder.slice(maxChars);
}
}
// Kalan küçük metni de ekle
if (remainder.length > 0) {
lines.push(remainder);
}
return lines.join('\n');
}
// ——— DİL SEÇİMİ & SORU VERİSİ ———
var currentLang = "tr"; // Başlangıçta Türkçe
var questions; // Sorular initGame'de atanacak
var questionsByLang = {
tr: [{
question: "1. Öğrencilerin en sevdiği ders hangisidir?",
answers: ["A) Matematik", "B) Coğrafya", "C) Fen Bilgisi", "D) Futbol"],
correctIndex: 3
}, {
question: "2. Çin Seddi nerededir?",
answers: ["A) Çin", "B) Meksika", "C) Moğolistan", "D) Mısır"],
correctIndex: 0
}, {
question: "3. Dinlediğiniz marş hangi ülkenin dilindedir?",
answers: ["A) İngilizce", "B) Rusça", "C) Almanca", "D) İspanyolca"],
correctIndex: 1
}, {
question: "4. Bogos binted?",
answers: ["A) Evet", "B) Hayır", "C) Belki", "D) Rusça"],
correctIndex: 1
}, {
question: "5. Hangi “gezegen” dünyayı ısıtır?",
answers: ["A) Güneş", "B) Jüpiter", "C) Ay", "D) Hiçbiri"],
correctIndex: 3
}, {
question: "6. İkincisinin gelmesi 6 yıl, üçüncüsünün gelmesi 13 yıl süren şey nedir?",
answers: ["A) Avatar", "B) GTA", "C) Kargocu’nun kargomu teslim etme süresi", "D) RDR3"],
correctIndex: 2
}, {
question: "7. Cyberpunk 2077’nin distopik geleceğinde karşılaşılan en korkunç şey hangisidir?",
answers: ["A) Beyne çip takılması", "B) Hâlâ trap dinlenmesi", "C) Göz kürenizi çıkarıp yerine vidalı, lazerli sensör takılması", "D) Çetelerin sokağı ele geçirmesi"],
correctIndex: 1
}, {
question: "8. Hayatımı düzene sokup spora başlamaya ne zaman karar veririm?",
answers: ["A) Akşam yemeği sırasında", "B) Günün en verimli saatinde", "C) Saat 12:00’de", "D) Gece saat 03:00’te, yataktayken"],
correctIndex: 3
}, {
question: "9. Tüm diyetler ne zaman başlar?",
answers: ["A) Pazar", "B) Pazartesi", "C) Salı", "D) Çarşamba"],
correctIndex: 1
}, {
question: "10. Kulakları en büyük hayvan hangisidir?",
answers: ["A) Yarasa", "B) Tavşan", "C) Fil", "D) Kedi"],
correctIndex: 2
}, {
question: "11. Türkiye'nin başkenti neresidir?",
answers: ["A) İstanbul", "B) Portekiz", "C) İzmir", "D) Bursa"],
correctIndex: 1
}]
};
// Menü butonları için Türkçe metinler
var labels = {
tr: {
play: "Oyna",
how: "Nasıl Oynanır",
lang: "Dil",
"char": "Karakter Seç"
}
};
// Game constants
// Character images for different emotions/states
var TOTAL_QUESTIONS = 10;
var TIME_PER_QUESTION = 30; // seconds
var BUTTON_SPACING = 180;
var selectedCharacter = "Stickman"; // Default character selection
// Function to update character assets based on selection
function updateCharacterAssets() {
if (selectedCharacter === "Pepo") {
// Replace stickman assets with pepo assets
stickman.setCharacter("Pepo");
} else if (selectedCharacter === "Rahat Adam") {
// Replace stickman assets with chillguy assets
stickman.setCharacter("Rahat Adam");
} else if (selectedCharacter === "KEKO") {
// Replace stickman assets with KEKO assets
stickman.setCharacter("KEKO");
} else {
// Default to stickman
stickman.setCharacter("Stickman");
}
}
// Game state variables
var currentQuestion = 0;
var score = 0;
var timeLeft = TIME_PER_QUESTION;
var gameOver = false;
var answerLocked = false;
var secondChanceActive = false; // Track if second chance is active for current question
var currentCorrectIndex = 0;
var indianMusicPlaying = false; // Flag to track if indian music is playing
// Quiz questions
var questions = [{
question: "1. Öğrencilerin en sevdiği ders hangisidir?",
answers: ["Matematik", "Coğrafya", "Fen Bilgisi", "Türkçe"],
correctIndex: 3
}, {
question: "2. Çin Seddi nerededir?",
answers: ["Çin", "Meksika", "Moğolistan", "Mısır"],
correctIndex: 0
}, {
question: "3. Dinlediğiniz marş hangi ülkenin dilindedir?",
answers: ["İngilizce", "Rusça", "Almanca", "İspanyolca"],
correctIndex: 1
}, {
question: "4. Bogos binted?",
answers: ["Evet", "Hayır", "Belki", "Rusça"],
correctIndex: 1
}, {
question: "5. Hangi “gezegen” dünyayı ısıtır?",
answers: ["Güneş", "Jüpiter", "Ay", "Hiçbiri"],
correctIndex: 3
}, {
question: "6. İkincisinin gelmesi 6 yıl, üçüncüsünün gelmesi 13 yıl süren şey nedir?",
answers: ["Avatar", "GTA", "Kargocu’nun kargomu teslim etme süresi", "RDR3"],
correctIndex: 2
}, {
question: "7. Cyberpunk 2077’nin distopik geleceğinde karşılaşılan en korkunç şey hangisidir?",
answers: ["Beyne çip takılması", "Hâlâ trap dinlenmesi", "Göz kürenizi çıkarıp yerine vidalı, lazerli sensör takılması", "Çetelerin sokağı ele geçirmesi"],
correctIndex: 1
}, {
question: "8. Hayatımı düzene sokup spora başlamaya ne zaman karar veririm?",
answers: ["Akşam yemeği sırasında", "Günün en verimli saatinde", "Saat 12:00’de", "Gece saat 03:00’te, yataktayken"],
correctIndex: 3
}, {
question: "9. Tüm diyetler ne zaman başlar?",
answers: ["Pazar", "Pazartesi", "Salı", "Çarşamba"],
correctIndex: 1
}, {
question: "10. Kulakları en büyük hayvan hangisidir?",
answers: ["Yarasa", "Tavşan", "Fil", "Kedi"],
correctIndex: 2
}, {
question: "11. Türkiye'nin başkenti neresidir?",
answers: ["İstanbul", "Adana", "İzmir", "Bursa"],
correctIndex: 1
}, {
question: "12. En hızlı koşan kara hayvanı hangisidir?",
answers: ["A) Aslan", "B) Çita", "C) Kanguru", "D) Tavşan"],
correctIndex: 1
}];
// Background colors for different questions
var backgroundColors = [0x87CEEB,
// Sky blue
0x98FB98,
// Pale green
0xFFB6C1,
// Light pink
0xFFD700,
// Gold
0xE6E6FA,
// Lavender
0xFFA07A,
// Light salmon
0xADD8E6,
// Light blue
0xF0E68C,
// Khaki
0xD8BFD8,
// Thistle
0xAFEEEE // Pale turquoise
];
// Create UI elements
var theset = game.addChild(LK.getAsset('theset', {
anchorX: 0.5,
anchorY: 0.5
}));
theset.position.set(2048 / 2 - 30 + 10, 2732 / 2 - 600 + 400 + 100);
var mainQuestionBoard = game.addChild(LK.getAsset('mainquestionboard', {
anchorX: 0.5,
anchorY: 0.5
}));
mainQuestionBoard.position.set(2048 / 2 + 135, 2732 / 2 + 430);
var questionCard = game.addChild(LK.getAsset('questionCard', {
anchorX: 0.5,
anchorY: -0.8
}));
questionCard.position.set(2048 / 2, 2732 / 2 - 500);
var questionText = new Text2("", {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
questionText.anchor.set(0.5, 0.5);
questionText.position.set(0, 920);
questionCard.addChild(questionText);
var answerButtons = [];
for (var i = 0; i < 4; i++) {
var button = new QuestionButton(i, "");
if (i === 0) {
// Move button A 500 pixels down and 215 pixels left
button.position.set(2048 / 2 - 515, 2732 / 2 - 100 + i * BUTTON_SPACING + 970);
} else if (i === 1) {
// Move button B 970 pixels down and 400 pixels right, then 20 pixels left
button.position.set(2048 / 2 + 510, 2732 / 2 - 100 + i * BUTTON_SPACING + 790);
} else if (i === 2) {
// Move button C 950 pixels down and 510 pixels left
button.position.set(2048 / 2 - 510, 2732 / 2 - 200 + i * BUTTON_SPACING + 1010);
} else {
button.position.set(2048 / 2 + 515, 2732 / 2 - 200 + i * BUTTON_SPACING + 830);
}
answerButtons.push(button);
game.addChild(button);
}
// Create jokers
var jokers = [];
var jokerTypes = ["fifty", "audience", "phone", "second"];
var jokerIcons = ["50/50", "👥", "📞", "🔄"];
for (var i = 0; i < 4; i++) {
var joker = new Joker(jokerTypes[i], jokerIcons[i]);
joker.position.set(280 + i * 150, 200);
jokers.push(joker);
game.addChild(joker);
}
// Create character
var character = new Character();
character.position.set(2048 / 2, 2732 - 300);
game.addChild(character);
// Create timer UI
var timerText = new Text2("", {
size: 100,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 5
});
timerText.anchor.set(0.5, 0.5);
timerText.position.set(2048 / 2, 150);
game.addChild(timerText);
// Create score display
var scoreText = new Text2("Score: 0", {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
scoreText.anchor.set(1, 0);
scoreText.position.set(2048 - 50, 50);
game.addChild(scoreText);
// Create question counter
var counterText = new Text2("Question: 1/" + TOTAL_QUESTIONS, {
size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
counterText.anchor.set(0, 0);
counterText.position.set(205, 50);
game.addChild(counterText);
// Second chance indicator text
var secondChanceText = new Text2("", {
size: 60,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 3
});
secondChanceText.anchor.set(0.5, 0.5);
secondChanceText.position.set(2048 / 2, 280);
game.addChild(secondChanceText);
// Create phone a friend popup
var phoneFriendPopup = new PhoneFriendPopup();
phoneFriendPopup.position.set(2048 / 2, 2732 / 2);
game.addChild(phoneFriendPopup);
// Create and add troll faces
var trollFaces = new TrollFaces();
trollFaces.position.set(2048 / 2 + 735, 2732 / 2 - 190);
game.addChild(trollFaces);
// Create and add stickman character
var stickman = new Stickman();
stickman.position.set(2048 / 2 - 725, 2732 / 2 - 150);
game.addChild(stickman);
// Game timer
var gameTimer = LK.setInterval(function () {
if (gameOver || answerLocked || menuOpen) {
return;
}
timeLeft--;
timerText.setText(timeLeft);
// Change character expression when time is running low
if (timeLeft <= 5) {
character.showExcited();
trollFaces.showSmile();
stickman.showAngry(); // Show angry stickman when 5 seconds left
}
if (timeLeft <= 0) {
timeExpired();
}
}, 1000);
// Game functions
function loadQuestion(index) {
if (index >= questions.length) {
endGame(true);
return;
}
// Change background color
game.setBackgroundColor(backgroundColors[index]);
var question = questions[index];
questionText.setText(wrapText(question.question, 45));
currentCorrectIndex = question.correctIndex;
for (var i = 0; i < 4; i++) {
answerButtons[i].setText(question.answers[i]);
answerButtons[i].setCorrect(i === question.correctIndex);
answerButtons[i].reset();
}
timeLeft = TIME_PER_QUESTION;
timerText.setText(timeLeft);
currentQuestion = index;
// Play Indian music when loading question 3
if (index === 2) {
// Question index 2 is the 3rd question (0-based indexing)
LK.playMusic('indian');
indianMusicPlaying = true;
}
// Play Russian short music once 3 seconds after question 4 loads
if (index === 3) {
LK.setTimeout(function () {
LK.playMusic('russianshort', {
loop: false
});
}, 3000);
}
// Play background music when 5th question is loaded
if (index === 4) {
LK.playMusic('backgroundMusic');
}
// Sayaç metni
var countLabel = {
tr: "Soru: ",
en: "Question: ",
es: "Pregunta: ",
de: "Frage: ",
fr: "Question : "
}[currentLang];
counterText.setText(countLabel + (index + 1) + "/" + TOTAL_QUESTIONS);
// Skor metni
var scoreLabel = currentLang === "tr" ? "Puan: " : "Score: ";
scoreText.setText(scoreLabel + score);
character.showNeutral();
stickman.showThinking(); // Reset stickman to thinking state for new question
secondChanceActive = false; // Reset second chance status for new question
secondChanceText.setText(""); // Clear second chance indicator
answerLocked = false;
}
function submitAnswer(index) {
if (answerLocked || menuOpen || secondaryMenuOpen) {
return;
}
var correct = index === currentCorrectIndex;
// Stop Indian music if it's playing (for 3rd question)
if (indianMusicPlaying) {
LK.stopMusic();
indianMusicPlaying = false;
}
// Special handling for second chance joker
if (secondChanceActive) {
if (correct) {
// If correct answer with second chance active, proceed normally
answerLocked = true;
LK.getSound('correctSound').play();
answerButtons[index].markAsCorrect();
character.showHappy();
trollFaces.showSad(); // Show sad troll face for correct answer
score++;
// Use millionaire prize tiers based on question number
var prizeMoney;
switch (currentQuestion) {
case 0:
prizeMoney = 250;
break;
case 1:
prizeMoney = 500;
break;
case 2:
prizeMoney = 1000;
break;
case 3:
prizeMoney = 2500;
break;
case 4:
prizeMoney = 25000;
break;
case 5:
prizeMoney = 50000;
break;
case 6:
prizeMoney = 100000;
break;
case 7:
prizeMoney = 250000;
break;
case 8:
prizeMoney = 500000;
break;
case 9:
prizeMoney = 1000000;
break;
default:
prizeMoney = 0;
}
scoreText.setText("Score: " + prizeMoney);
// Clear second chance indicator
secondChanceActive = false;
secondChanceText.setText("");
// Load next question after delay
LK.setTimeout(function () {
loadQuestion(currentQuestion + 1);
}, 1500);
} else {
// If wrong answer with second chance active, disable only that button
LK.getSound('incorrectSound').play();
answerButtons[index].disable(); // Make this button unclickable
// Deactivate second chance - one wrong answer protection used
secondChanceActive = false;
secondChanceText.setText(""); // Clear the indicator
// Player can still continue with this question, but will lose on next wrong answer
}
} else {
// Normal answer handling (no second chance active)
answerLocked = true;
if (correct) {
LK.getSound('correctSound').play();
answerButtons[index].markAsCorrect();
character.showHappy();
trollFaces.showSad(); // Show sad troll face for correct answer
stickman.showHappy(); // Show happy stickman for correct answer
score++;
// Use millionaire prize tiers based on question number
var prizeMoney;
switch (currentQuestion) {
case 0:
prizeMoney = 250;
break;
case 1:
prizeMoney = 500;
break;
case 2:
prizeMoney = 1000;
break;
case 3:
prizeMoney = 2500;
break;
case 4:
prizeMoney = 25000;
break;
case 5:
prizeMoney = 50000;
break;
case 6:
prizeMoney = 100000;
break;
case 7:
prizeMoney = 250000;
break;
case 8:
prizeMoney = 500000;
break;
case 9:
prizeMoney = 1000000;
break;
default:
prizeMoney = 0;
}
scoreText.setText("Score: " + prizeMoney);
LK.setTimeout(function () {
trollFaces.showHappy();
loadQuestion(currentQuestion + 1);
}, 2000);
} else {
LK.getSound('incorrectSound').play();
// Play hahaha sound with 0.2 second delay
LK.setTimeout(function () {
LK.getSound('hahaha').play(); // Play hahaha sound for wrong answer
}, 200);
answerButtons[index].markAsIncorrect();
character.showSad();
trollFaces.showHappy(); // Show happy troll face for wrong answer
stickman.showDisappointed(); // Show disappointed stickman for wrong answer
// Show correct answer and end game
answerButtons[currentCorrectIndex].markAsCorrect();
LK.setTimeout(function () {
LK.setTimeout(function () {
endGame(false);
}, 3000);
}, 3000);
}
}
}
function timeExpired() {
answerLocked = true;
character.showSad();
trollFaces.showHappy(); // Show happy troll face when time expires
stickman.showDisappointed(); // Show disappointed stickman when time expires
// Highlight correct answer
answerButtons[currentCorrectIndex].markAsCorrect();
// Stop Indian music if it's playing (for 3rd question)
if (indianMusicPlaying) {
LK.stopMusic();
indianMusicPlaying = false;
}
LK.setTimeout(function () {
endGame(false);
}, 3000);
}
function activateJoker(type) {
var joker = findJokerByType(type);
if (!joker || joker.used || menuOpen) {
return;
}
LK.getSound('jokerSound').play();
switch (type) {
case "fifty":
useFiftyFifty();
joker.use();
break;
case "audience":
useAudienceHelp();
joker.use();
break;
case "phone":
usePhoneFriend();
joker.use();
break;
case "second":
useSecondChance();
// For second chance, we don't mark the joker as used yet
// It will be marked as used when the player submits an answer
break;
}
}
function findJokerByType(type) {
for (var i = 0; i < jokers.length; i++) {
if (jokers[i].type === type) {
return jokers[i];
}
}
return null;
}
function useFiftyFifty() {
var eliminated = 0;
var attempts = 0;
// Try to eliminate two wrong answers
while (eliminated < 2 && attempts < 10) {
attempts++;
var randomIndex = Math.floor(Math.random() * 4);
if (answerButtons[randomIndex].eliminate()) {
eliminated++;
}
}
}
function useAudienceHelp() {
// Calculate audience accuracy based on question number
// Accuracy decreases as questions get harder
var baseAccuracy = 0.99 - currentQuestion * 0.05;
for (var i = 0; i < 4; i++) {
var percentage;
if (i === currentCorrectIndex) {
// Correct answer gets higher percentage based on accuracy
percentage = Math.floor(baseAccuracy * 100);
} else {
// Distribute remaining percentage among wrong answers
percentage = Math.floor((1 - baseAccuracy) * 33);
}
// Update button text to show percentage
var originalText = questions[currentQuestion].answers[i];
answerButtons[i].setText(originalText + " (" + percentage + "%)");
}
// Reset the text after 5 seconds
LK.setTimeout(function () {
for (var i = 0; i < 4; i++) {
answerButtons[i].setText(questions[currentQuestion].answers[i]);
}
}, 5000);
}
function usePhoneFriend() {
// hide the normal question card
questionCard.visible = false;
// show our new popup with the real answer
var correctAnswer = questions[currentQuestion].answers[currentCorrectIndex];
phoneFriendPopup.show(correctAnswer);
// mark the joker used
findJokerByType('phone').use();
// Add click handler to close popup when clicked anywhere
game.phoneFriendClickHandler = function (x, y, obj) {
phoneFriendPopup.hide();
questionCard.visible = true;
// Remove the handler by setting it to null
game.phoneFriendClickHandler = null;
};
// Assign the handler to game's down event
game.down = game.phoneFriendClickHandler;
// after 5 seconds, hide popup and go back
LK.setTimeout(function () {
phoneFriendPopup.hide();
questionCard.visible = true;
// Remove click handler if timer expires first
game.phoneFriendClickHandler = null;
}, 5000);
}
function useSecondChance() {
// Only activate if not already active
if (!secondChanceActive) {
// Mark second chance as active for the current question
secondChanceActive = true;
// Display second chance status
secondChanceText.setText("Second Chance Active 🔄");
secondChanceText.visible = true;
// Get the second chance joker
var secondChanceJoker = findJokerByType("second");
// Don't mark as used yet - will be used when player makes a selection
// We only want to mark it visually as active
tween(secondChanceJoker, {
alpha: 0.7
}, {
duration: 300
});
}
}
// Phone friend callback has been replaced by direct handling in usePhoneFriend
function endGame(completed) {
gameOver = true;
// Update high score
if (score > storage.highScore) {
storage.highScore = score;
}
// Update total games played
storage.totalPlayed = (storage.totalPlayed || 0) + 1;
// Show game over screen
if (completed) {
trollFaces.showAngry(); // Show angry troll face when completing all questions
stickman.showWinner(); // Show winner stickman when completing all questions
// Play yay sound when player wins
LK.getSound('yay').play();
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
} else {
LK.showGameOver();
}
}
// Create menu screen
var menuScreen = new MenuScreen();
menuScreen.position.set(2048 / 2, 2732 / 2);
game.addChild(menuScreen);
// ——— DİL MENÜSÜ ———
var languageMenu = new SecondarySmallMenu("Dil Seç / Select Language", ["Türkçe", "English", "Español", "Deutsch", "Français"]);
languageMenu.position.set(2048 / 2, 2732 / 2);
game.addChild(languageMenu);
languageMenu.optionButtons.forEach(function (btn) {
btn.down = function (x, y, obj) {
// Tıklama olayının menüyü tekrar kapatmaması için
if (obj && obj.event && typeof obj.event.stopPropagation === 'function') {
obj.event.stopPropagation();
}
// seçime göre currentLang
switch (this.optionValue) {
case "Türkçe":
currentLang = "tr";
break;
case "English":
currentLang = "en";
break;
case "Español":
currentLang = "es";
break;
case "Deutsch":
currentLang = "de";
break;
case "Français":
currentLang = "fr";
break;
}
// Sadece dil menüsünü kapat
closeSecondaryMenus();
// Menüdeki etiketleri (Play, Language vs) ve sayaç metnini güncelle
playText.setText(labels[currentLang].play);
howToPlayText.setText(labels[currentLang].how);
languageText.setText(labels[currentLang].lang);
stickmanText.setText(labels[currentLang]["char"]);
// Eğer ekranındaki başka metinler (counterText vb.) varsa, onları da güncelle:
counterText.setText({
tr: "Soru: ",
en: "Question: ",
es: "Pregunta: ",
de: "Frage: ",
fr: "Question : "
}[currentLang] + (currentQuestion + 1) + "/" + TOTAL_QUESTIONS);
scoreText.setText((currentLang === "tr" ? "Puan: " : "Score: ") + score);
};
});
var characterMenu = new SecondarySmallMenu("Select Character", ["Pepo", "Rahat Adam", "KEKO", "-", "-"]);
characterMenu.position.set(2048 / 2, 2732 / 2);
game.addChild(characterMenu);
// Override character menu option buttons to only close menu when clicked
characterMenu.optionButtons.forEach(function (btn) {
btn.down = function (x, y, obj) {
// Stop propagation to prevent menu from closing immediately
if (obj && obj.event && typeof obj.event.stopPropagation === 'function') {
obj.event.stopPropagation();
}
// Check which character was selected
if (this.optionValue === "Pepo") {
// Set a global flag to track which character is selected
selectedCharacter = "Pepo";
// Update stickman with Pepo assets
updateCharacterAssets();
} else if (this.optionValue === "Rahat Adam") {
// Set a global flag to track which character is selected
selectedCharacter = "Rahat Adam";
// Update stickman with Rahat Adam assets
updateCharacterAssets();
} else if (this.optionValue === "KEKO") {
// Set a global flag to track which character is selected
selectedCharacter = "KEKO";
// Update stickman with KEKO assets
updateCharacterAssets();
}
// Only close the small menu when a character is clicked
characterMenu.hide();
secondaryMenuOpen = false;
activeSecondaryMenu = null;
};
});
// Track menu states
var menuOpen = true;
var secondaryMenuOpen = false;
var activeSecondaryMenu = null;
// Initialize game
function initGame() {
// ——— Dil bazlı soruları seç
questions = questionsByLang[currentLang];
TOTAL_QUESTIONS = questions.length;
score = 0;
gameOver = false;
currentQuestion = 0;
secondChanceActive = false;
indianMusicPlaying = false;
// Reset jokers
for (var i = 0; i < jokers.length; i++) {
jokers[i].reset();
}
// Update score text - starting prize is $0 before first question answered
scoreText.setText("Score: " + 0);
// Clear second chance text
secondChanceText.setText("");
// Reset troll faces
trollFaces.showHappy();
// Reset stickman
stickman.showThinking();
// Start with first question
loadQuestion(0);
// Play background music
LK.playMusic('backgroundMusic');
}
// Initially hide game elements
function hideGameElements() {
// Hide all game UI elements
theset.visible = false;
mainQuestionBoard.visible = false;
questionCard.visible = false;
timerText.visible = false;
scoreText.visible = false;
counterText.visible = false;
character.visible = false;
stickman.visible = false;
trollFaces.visible = false;
secondChanceText.visible = false;
// Hide answer buttons and jokers
for (var i = 0; i < answerButtons.length; i++) {
answerButtons[i].visible = false;
}
for (var i = 0; i < jokers.length; i++) {
jokers[i].visible = false;
}
}
// Show game elements
function showGameElements() {
// Show all game UI elements
theset.visible = true;
mainQuestionBoard.visible = true;
questionCard.visible = true;
timerText.visible = true;
scoreText.visible = true;
counterText.visible = true;
character.visible = true;
stickman.visible = true;
trollFaces.visible = true;
// Show answer buttons and jokers
for (var i = 0; i < answerButtons.length; i++) {
answerButtons[i].visible = true;
}
for (var i = 0; i < jokers.length; i++) {
jokers[i].visible = true;
}
}
// Initially hide game elements and show menu
hideGameElements();
menuScreen.show();
// Function to open secondary menu
function openSecondaryMenu(menu) {
closeSecondaryMenus(); // Close any existing menu first
menu.show(); // This now handles setting secondaryMenuOpen and activeSecondaryMenu
}
// Function to close all secondary menus
function closeSecondaryMenus() {
if (activeSecondaryMenu) {
activeSecondaryMenu.hide();
activeSecondaryMenu = null;
secondaryMenuOpen = false;
}
}
// Add global click handler for game elements
game.down = function (x, y, obj) {
// Handle phone friend callback if active
if (game.phoneFriendClickHandler) {
game.phoneFriendClickHandler(x, y, obj);
}
};
// Modified initGame to show game elements
var originalInitGame = initGame;
initGame = function initGame() {
showGameElements();
originalInitGame();
};