User prompt
Move troll faces right by 50 pixels up 50 pixels right
User prompt
Move troll faces right by 350 pixels annd 100 pixel up
User prompt
move all troll faces right by 300 pixels
User prompt
Aşağıdaki gibi hem TrollFaces sınıfını hem de onu kullandığın yerlere yapılan çağrıları düzeltebilirsin: js Kopyala Düzenle // 1) TrollFaces sınıfı var TrollFaces = Container.expand(function () { var self = Container.call(this); var happy = self.attachAsset('trollfacehappy', { anchorX:0.5, anchorY:0.5 }); var sad = self.attachAsset('trollfacesad', { anchorX:0.5, anchorY:0.5 }); var smile = self.attachAsset('trollfacesmile', { anchorX:0.5, anchorY:0.5 }); var angry = self.attachAsset('trollfaceangry', { anchorX:0.5, anchorY:0.5 }); // hepsi aynı pozisyona happy.position.set(0,0); sad. position.set(0,0); smile.position.set(0,0); angry.position.set(0,0); // başlangıç: sadece happy görünsün function showOnly(target){ happy.visible = (target === 'happy'); sad.visible = (target === 'sad'); smile.visible = (target === 'smile'); angry.visible = (target === 'angry'); } self.showHappy = function(){ showOnly('happy'); }; self.showSad = function(){ showOnly('sad'); }; self.showSmile = function(){ showOnly('smile'); }; self.showAngry = function(){ showOnly('angry'); }; // ilk durumda happy showOnly('happy'); return self; }); // 2) Sahnede ekledikten sonra referansı tut var trollFaces = new TrollFaces(); trollFaces.position.set(2048/2, 2732/2); game.addChild(trollFaces); // 3) Zaman sayacı içinde 5 saniye kalınca smile: var gameTimer = LK.setInterval(function(){ if(gameOver||answerLocked) return; timeLeft--; timerText.setText(timeLeft); if(timeLeft <= 5){ trollFaces.showSmile(); } if(timeLeft <= 0){ timeExpired(); } }, 1000); // 4) submitAnswer içinde doğru/yanlış ta şu şekle çevir: // doğruysa sad, yanlışsa happy function submitAnswer(index) { if (answerLocked) return; var correct = index === currentCorrectIndex; // ikinci şans vb. atlandı, direkt normal akış: answerLocked = true; if (correct) { LK.getSound('correctSound').play(); trollFaces.showSad(); // ... puan arttırma, overlay, sonraki soru ... } else { LK.getSound('incorrectSound').play(); trollFaces.showHappy(); // ... yanlış animasyon, oyun sonu ... } } // 5) Tüm 10 soruyu doğru bitirince angry: function endGame(completed) { gameOver = true; if (completed) { trollFaces.showAngry(); LK.showYouWin(); } else { LK.showGameOver(); } // ... yüksek skor vs. ... } Özet: TrollFaces içindeki showOnly() fonksiyonu ile dördünden sadece istediğini görünür yapıyoruz. Sayaçta 5 sn kalınca showSmile(). Doğru cevabın işlendiği yerde showSad(), yanlışta showHappy(). Oyun bittiğinde (“You Win” durumunda) showAngry(). Böylece istediğin mantık doğru çalışacaktır.
User prompt
create a class named troll faces , troll faces class includes trollfacehappy trollfacesad trollfacesmile assets and place them middle of the screen mainly trollfacehappy visible the others invisible on the screen when there is 5 seconds left make trollfacesmile visible make the others invisible when player gets the question right make trollfacesad visible and the others invisible when player gets the question wrong make trollfacehappy visible and make the others invisible when player gets all 10 questions right make trollfaceangry visible and make others invisible ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Move question counter text 5 pixels to the right
User prompt
Move question counter text 20 pixels to the right
User prompt
move question 1/10 text to right by 30 pixels move joker visuals 30 pixel right
User prompt
question x/y text ini 30 birim sağa taşı ve jokerlerin hepsinin görselini 30 pixel sağa taşı
User prompt
Please fix the bug: 'Uncaught TypeError: LK.addEventListener is not a function' in or related to this line: 'var clickHandler = LK.addEventListener('down', function (obj) {' Line Number: 624
User prompt
when clickeda random place on the screen close the phonejokerscreen pop up
User prompt
Aşağıdaki gibi usePhoneFriend fonksiyonunu güncelleyerek, joker ekranı göründükten sonra ekranda herhangi bir yere tıklayınca kapanmasını sağlayabilirsin: js Kopyala Düzenle function usePhoneFriend() { // 1) Soru kartını gizle questionCard.visible = false; // 2) Doğru cevabı alıp popup'a gönder var correctAnswer = questions[currentQuestion].answers[currentCorrectIndex]; phoneFriendPopup.show(correctAnswer); // 3) Joker'ı kullanılmış olarak işaretle findJokerByType('phone').use(); // 4) Bir kereye mahsus tıklama dinleyicisi ekle // Olay tetiklendiğinde popup'ı gizle, soruyu geri getir ve dinleyiciyi kaldır var onAnyClick = function () { phoneFriendPopup.hide(); questionCard.visible = true; game.off('pointerdown', onAnyClick); // Dinleyiciyi kaldır }; // Oyun sahnesini interaktif hale getir (eğer değilse) game.interactive = true; game.on('pointerdown', onAnyClick); } Açıklama: questionCard.visible = false; ile normal soru kartını gizliyoruz. phoneFriendPopup.show(correctAnswer); ile tek satırlık “Hmm, I guess the answer is ‘...’!” popup’ını gösteriyoruz. Joker’ı kullandığımızı use() metodu ile işaretliyoruz. game.on('pointerdown', ...) ile oyun sahnesine bir kez tetiklenen tıklama dinleyicisi ekliyoruz. İlk tıklamada popup’ı kapatıp questionCard.visible = true; ile eski ekrana döner, ve game.off('pointerdown', ...) ile bu dinleyiciyi kaldırırız ki sonraki tıklamalarda tekrarlanmasın. Bu sayede joker ekranı çıktıktan sonra ekrandaki herhangi bir tıklama ile otomatik olarak kapanacak.
User prompt
Here’s a leaner Phone‐a‐Friend that skips choosing “Professor/Scientist/...” and just pops up the one line you asked for: js Kopyala Düzenle /**** * Phone‐a‐Friend Popup (simplified) ****/ var PhoneFriendPopup = Container.expand(function () { var self = Container.call(this); // background card var bg = self.attachAsset('questionCard', { 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; }); Then replace your old usePhoneFriend() (and remove phoneFriendCallback) with something like: js Kopyala Düzenle 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(); // after 5 seconds, hide popup and go back LK.setTimeout(function () { phoneFriendPopup.hide(); questionCard.visible = true; }, 5000); } With that, there’s no more “Professor/Scientist/Artist/Engineer” — just your “Hmm, I guess the answer is ‘...’!” message.
User prompt
phone a friend proffesor scientist artist engineer textlerini sil yerine text ile hmm i guess the answer is "the correct answer"! yazs
User prompt
phone a friend jokerinin içeriğini sil ve phonejokerscreen assetinin içine text ile hmm i guess the answer is "the correct answer"! desin
User prompt
Please fix the bug: 'Uncaught TypeError: self.selectFriend is not a function' in or related to this line: 'self.selectFriend(obj.index);' Line Number: 121
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'index')' in or related to this line: 'self.selectFriend(obj.parent.index);' Line Number: 168
User prompt
move phonejokerscreen asset 900 pixel up
User prompt
Phone a Friend jokeri kullanılınca question card asseti yerine phonejokerscreen assetini kullan
User prompt
second Chance Active textini 30 pixel aşağı taşı
User prompt
çok güzel tek sorun jokeri kullandıktan sonra bir kez yanlış seçeneği seçtim o seçenek karardıktan sonra diğer sorudada kararmış bir şekilde duruyordu o soru geçtikten sonra kararmasının sıfırlanması lazımdı
Code edit (1 edits merged)
Please save this source code
User prompt
second chance jokerine tıklandıktan sonra second chance jokeri bir daha kullanılamaz olsun,tıklanan şık eğer doğruysa hiçbir şey olmasın eğer yanlış şıkka tıklandıysa tıklanamaz olsun yanlış şıkka ve tıklanan şık kararsın bir daha asla o soru için tıklanamaz olsun,eğer yanlış şıkka bir daha basarsa basılır olsun oyuncu kaybetsin
User prompt
second chance jokerini oyuncu aktifleştirdiğinde ilk yanlış seçim tıklamamış olsun ve tıklanan şık kararsın ve bir daha tıklanamz olsun
Code edit (1 edits merged)
Please save this source code
/**** * 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: 300 }); return true; }; self.reset = function () { self.used = false; self.alpha = 1; }; self.down = function (x, y, obj) { if (!self.used && !gameOver && !answerLocked) { activateJoker(self.type); } }; 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 }); var buttonText = new Text2(text, { size: 60, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 4 }); buttonText.anchor.set(0.5, 0.5); 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(newText); }; 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) { self.isSelected = true; submitAnswer(self.index); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Character images for different emotions/states // Game constants var TOTAL_QUESTIONS = 10; var TIME_PER_QUESTION = 30; // seconds var BUTTON_SPACING = 180; // 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; // Quiz questions var questions = [{ question: "What is the capital of France?", answers: ["Paris", "London", "Berlin", "Madrid"], correctIndex: 0 }, { question: "Which planet is known as the Red Planet?", answers: ["Venus", "Mars", "Jupiter", "Saturn"], correctIndex: 1 }, { question: "What is the largest mammal on Earth?", answers: ["Elephant", "Giraffe", "Blue Whale", "Polar Bear"], correctIndex: 2 }, { question: "Which of these is not a programming language?", answers: ["Java", "Python", "Banana", "Ruby"], correctIndex: 2 }, { question: "What year did the Titanic sink?", answers: ["1912", "1905", "1920", "1931"], correctIndex: 0 }, { question: "Which element has the chemical symbol 'O'?", answers: ["Gold", "Oxygen", "Osmium", "Oganesson"], correctIndex: 1 }, { question: "Who painted the Mona Lisa?", answers: ["Van Gogh", "Picasso", "Michelangelo", "Leonardo da Vinci"], correctIndex: 3 }, { question: "What is the smallest prime number?", answers: ["0", "1", "2", "3"], correctIndex: 2 }, { question: "Which country is home to the kangaroo?", answers: ["New Zealand", "South Africa", "Australia", "Brazil"], correctIndex: 2 }, { question: "How many sides does a hexagon have?", answers: ["5", "6", "7", "8"], 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(250 + 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(150, 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); // Game timer var gameTimer = LK.setInterval(function () { if (gameOver || answerLocked) { return; } timeLeft--; timerText.setText(timeLeft); // Change character expression when time is running low if (timeLeft <= 5) { character.showExcited(); } 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(question.question); 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; counterText.setText("Question: " + (currentQuestion + 1) + "/" + TOTAL_QUESTIONS); character.showNeutral(); secondChanceActive = false; // Reset second chance status for new question secondChanceText.setText(""); // Clear second chance indicator answerLocked = false; } function submitAnswer(index) { if (answerLocked) { return; } var correct = index === currentCorrectIndex; // 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(); score++; scoreText.setText("Score: " + score); // 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(); score++; scoreText.setText("Score: " + score); LK.setTimeout(function () { loadQuestion(currentQuestion + 1); }, 1500); } else { LK.getSound('incorrectSound').play(); answerButtons[index].markAsIncorrect(); character.showSad(); // Show correct answer and end game answerButtons[currentCorrectIndex].markAsCorrect(); LK.setTimeout(function () { endGame(false); }, 2000); } } } function timeExpired() { answerLocked = true; character.showSad(); // Highlight correct answer answerButtons[currentCorrectIndex].markAsCorrect(); LK.setTimeout(function () { endGame(false); }, 2000); } function activateJoker(type) { var joker = findJokerByType(type); if (!joker || joker.used) { 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(); // after 5 seconds, hide popup and go back LK.setTimeout(function () { phoneFriendPopup.hide(); questionCard.visible = true; }, 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) { LK.showYouWin(); } else { LK.showGameOver(); } } // Initialize game function initGame() { score = 0; gameOver = false; currentQuestion = 0; secondChanceActive = false; // Reset jokers for (var i = 0; i < jokers.length; i++) { jokers[i].reset(); } // Update score text scoreText.setText("Score: " + score); // Clear second chance text secondChanceText.setText(""); // Start with first question loadQuestion(0); // Play background music LK.playMusic('backgroundMusic'); } // Start the game initGame();
===================================================================
--- original.js
+++ change.js
@@ -98,63 +98,35 @@
return self;
});
var PhoneFriendPopup = Container.expand(function () {
var self = Container.call(this);
- var background = self.attachAsset('questionCard', {
+ // background card
+ var bg = self.attachAsset('phonejokerscreen', {
anchorX: 0.5,
anchorY: 0.5,
width: 1200,
height: 800
});
- background.tint = 0xF5F5F5;
- var titleText = new Text2("Phone a Friend", {
- size: 80,
+ bg.tint = 0xF5F5F5;
+ // the single guess text
+ var guessText = new Text2("", {
+ size: 70,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4
});
- titleText.anchor.set(0.5, 0);
- titleText.position.set(0, -320);
- self.addChild(titleText);
- var friends = [];
- var friendNames = ["Professor", "Scientist", "Artist", "Engineer"];
- for (var i = 0; i < 4; i++) {
- var friendButton = new Container();
- var buttonBg = LK.getAsset('buttonBackground', {
- anchorX: 0.5,
- anchorY: 0.5,
- width: 500,
- height: 100
- });
- friendButton.addChild(buttonBg);
- var nameText = new Text2(friendNames[i], {
- size: 50,
- fill: 0xFFFFFF,
- stroke: 0x000000,
- strokeThickness: 3
- });
- nameText.anchor.set(0.5, 0.5);
- friendButton.addChild(nameText);
- friendButton.position.set(0, -150 + i * 150);
- friendButton.index = i;
- friendButton.interactive = true;
- friendButton.down = function (x, y, obj) {
- self.selectFriend(obj.parent.index);
- };
- self.addChild(friendButton);
- friends.push(friendButton);
- }
+ guessText.anchor.set(0.5, 0.5);
+ guessText.position.set(0, 0);
+ self.addChild(guessText);
self.visible = false;
- self.show = function () {
+ // 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;
};
- self.selectFriend = function (index) {
- self.hide();
- phoneFriendCallback(index);
- };
return self;
});
var QuestionButton = Container.expand(function (index, text) {
var self = Container.call(this);
@@ -613,23 +585,20 @@
}
}, 5000);
}
function usePhoneFriend() {
- // Hide question card and show phone joker screen
+ // hide the normal question card
questionCard.visible = false;
- // Create and position phone joker screen
- var phoneJokerScreen = LK.getAsset('phonejokerscreen', {
- anchorX: 0.5,
- anchorY: -0.8,
- width: 2000,
- height: 1000
- });
- phoneJokerScreen.position.set(2048 / 2, 2732 / 2 - 500);
- game.addChild(phoneJokerScreen);
- // Show phone friend popup
- phoneFriendPopup.show();
- // Store the phoneJokerScreen reference for later removal
- game.phoneJokerScreen = phoneJokerScreen;
+ // show our new popup with the real answer
+ var correctAnswer = questions[currentQuestion].answers[currentCorrectIndex];
+ phoneFriendPopup.show(correctAnswer);
+ // mark the joker used
+ findJokerByType('phone').use();
+ // after 5 seconds, hide popup and go back
+ LK.setTimeout(function () {
+ phoneFriendPopup.hide();
+ questionCard.visible = true;
+ }, 5000);
}
function useSecondChance() {
// Only activate if not already active
if (!secondChanceActive) {
@@ -648,34 +617,9 @@
duration: 300
});
}
}
-function phoneFriendCallback(friendIndex) {
- // Get the correct answer text
- var correctAnswer = questions[currentQuestion].answers[currentCorrectIndex];
- // Add text to phone joker screen if it exists
- if (game.phoneJokerScreen) {
- // Create text showing the answer
- var answerText = new Text2("Hmm, I guess the answer is \"" + correctAnswer + "\"!", {
- size: 70,
- fill: 0xFFFFFF,
- stroke: 0x000000,
- strokeThickness: 4
- });
- answerText.anchor.set(0.5, 0.5);
- answerText.position.set(0, 0);
- game.phoneJokerScreen.addChild(answerText);
- // Show for 5 seconds then return to normal question card
- LK.setTimeout(function () {
- // Remove phone joker screen and show question card again
- if (game.phoneJokerScreen) {
- game.removeChild(game.phoneJokerScreen);
- game.phoneJokerScreen = null;
- }
- questionCard.visible = true;
- }, 5000);
- }
-}
+// Phone friend callback has been replaced by direct handling in usePhoneFriend
function endGame(completed) {
gameOver = true;
// Update high score
if (score > storage.highScore) {