User prompt
Make it animation youwinWoman and youwinWoman2 changing 1 second
User prompt
Dublicate youwinWoman for make it a simple animation and name it youwinWoman2 and change it 2seconds time
Code edit (1 edits merged)
Please save this source code
User prompt
When the questions finished make a new screen and put a mini puzzle game in it with a new puzzleWoman asset. Divide the puzzleWoman asset to 9 and make it the whole picture. If you won continue to what and win screen all same.
User prompt
When the questions finished make a new screen and put a mini puzzle game in it with a new puzzleWoman asset. Make 9 pieces that asset and make the true picture for skip it. If you won continue to what and win screen all same.
User prompt
When the questions finished make a new screen and put a mini puzzle game in it with a new puzzleWoman asset. If you won continue to what and win screen all same.
User prompt
When the questions finished make a new screen and put a mini game in it with girl. Chose an exciting mini game. If you won continue to what and win screen
User prompt
When the questions finished make a new screen and put a SOS game in it with girl. If you won continue to what and win screen
User prompt
Move mute button 16px down
User prompt
Move Your score line 17px down
Code edit (1 edits merged)
Please save this source code
User prompt
Move Your score line 30px down
User prompt
Move mute button 30px down
User prompt
Please fix the bug: 'Uncaught TypeError: LK.muteAll is not a function' in or related to this line: 'LK.muteAll();' Line Number: 468
User prompt
Make a mute button for shut the sounds
User prompt
Make a mute button. But it shows after starting screen
User prompt
Move mute button up 50px
User prompt
Add mute button to bottom left after starting screen, toggling all music and sound
User prompt
add a mute button after starting screen. to bottom left corner. When you click it every music and sound silence, until click and open again
User prompt
Burada toplam 13 soru var. 13 sorudan karışık 6 soru görmek gerekiyor her oyunda. Kodda bir hata mı var? Son sorular hiç denk felmiyor. Düzeltelim
User prompt
Move mute button screens bottom left corner
User prompt
Move mute button right 80px
User prompt
Move mute button right 50px
User prompt
Move mute button left for 500px
User prompt
Move mute button left for 200px
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // PuzzleWoman class: 3x3 sliding puzzle var PuzzleWoman = Container.expand(function () { var self = Container.call(this); // Puzzle config var gridSize = 3; var pieceSize = 400; // 1200/3, since asset is 1200x1200 var pieces = []; var emptyPos = { x: gridSize - 1, y: gridSize - 1 }; // Start with last piece empty var solved = false; // Create pieces for (var y = 0; y < gridSize; y++) { for (var x = 0; x < gridSize; x++) { // Skip last piece (empty) if (x === gridSize - 1 && y === gridSize - 1) continue; var idx = y * gridSize + x; var piece = new Container(); // Attach puzzleWoman asset, crop to correct part var asset = piece.attachAsset('puzzleWoman', { anchorX: 0, anchorY: 0, width: pieceSize, height: pieceSize, x: 0, y: 0 }); // Mask/crop by shifting asset inside container asset.x = -x * pieceSize; asset.y = -y * pieceSize; piece.x = x * pieceSize; piece.y = y * pieceSize; piece.gridX = x; piece.gridY = y; piece.correctX = x; piece.correctY = y; piece.idx = idx; piece.interactive = true; // Store for move logic pieces.push(piece); self.addChild(piece); } } // Shuffle puzzle (simple random moves) function shufflePuzzle(moves) { for (var i = 0; i < moves; i++) { var neighbors = getMovableNeighbors(); var movePiece = neighbors[Math.floor(Math.random() * neighbors.length)]; if (movePiece) movePieceMove(movePiece); } } // Get pieces adjacent to empty function getMovableNeighbors() { var arr = []; for (var i = 0; i < pieces.length; i++) { var p = pieces[i]; if (Math.abs(p.gridX - emptyPos.x) === 1 && p.gridY === emptyPos.y || Math.abs(p.gridY - emptyPos.y) === 1 && p.gridX === emptyPos.x) { arr.push(p); } } return arr; } // Move a piece into the empty spot function movePieceMove(piece) { if (solved) return; // Only allow if adjacent if (Math.abs(piece.gridX - emptyPos.x) === 1 && piece.gridY === emptyPos.y || Math.abs(piece.gridY - emptyPos.y) === 1 && piece.gridX === emptyPos.x) { // Animate move var oldX = piece.gridX, oldY = piece.gridY; piece.gridX = emptyPos.x; piece.gridY = emptyPos.y; emptyPos.x = oldX; emptyPos.y = oldY; tween(piece, { x: piece.gridX * pieceSize, y: piece.gridY * pieceSize }, { duration: 120, easing: tween.easeInOut, onFinish: checkSolved }); } } // Piece tap handler function onPieceDown(piece) { return function (x, y, obj) { movePieceMove(piece); }; } for (var i = 0; i < pieces.length; i++) { pieces[i].down = onPieceDown(pieces[i]); } // Check if solved function checkSolved() { for (var i = 0; i < pieces.length; i++) { var p = pieces[i]; if (p.gridX !== p.correctX || p.gridY !== p.correctY) return; } // Only solved if empty is in last position if (emptyPos.x === gridSize - 1 && emptyPos.y === gridSize - 1) { solved = true; if (typeof self.onSolved === "function") self.onSolved(); } } // Shuffle on create shufflePuzzle(60); // Center puzzle self.x = 2048 / 2 - pieceSize * gridSize / 2; self.y = 2732 / 2 - pieceSize * gridSize / 2; // Expose for outside self.pieces = pieces; self.checkSolved = checkSolved; self.solved = function () { return solved; }; self.onSolved = null; return self; }); // Woman character class var Woman = Container.expand(function () { var self = Container.call(this); // State: 'happy', 'angry', 'surprised' self.state = 'happy'; // Attach face (default: happy) self.face = self.attachAsset('happyWoman', { anchorX: 0.5, anchorY: 0.5 }); // Attach mouth self.mouth = self.attachAsset('mouth', { anchorX: 0.5, anchorY: 0.5, x: -15, // move 3.75mm left (35px left from center, 5mm right from previous) // centered horizontally, but offset slightly left y: 40 // move up 1cm (40px from woman's center) }); // Animate mouth open/close self.mouthTalking = false; self.mouthTween = null; self.setState = function (state) { if (self.state === state) { return; } self.state = state; // Remove old face self.face.destroy(); // Add new face var faceId = 'happyWoman'; if (state === 'angry') { faceId = 'angryWoman'; } if (state === 'surprised') { faceId = 'surprisedWoman'; } self.face = self.attachAsset(faceId, { anchorX: 0.5, anchorY: 0.5 }); // Keep mouth on top if (self.mouth && typeof self.mouth.parent !== "undefined" && self.mouth.parent !== null) { if (typeof self.mouth.parent.removeChild === "function") { self.mouth.parent.removeChild(self.mouth); } } self.addChild(self.mouth); // Adjust mouth position based on state if (state === 'angry') { self.mouth.x = -25; // Move mouth 10px left from original position (-15 - 10 = -25) self.mouth.y = 0; // Move mouth 40px up from original position (40 - 40 = 0) } else { self.mouth.x = -15; // Reset X to original position self.mouth.y = 40; // Reset to original position } }; self.startTalking = function () { if (self.mouthTalking) { return; } self.mouthTalking = true; animateMouth(); }; self.stopTalking = function () { self.mouthTalking = false; if (self.mouthTween) { tween.stop(self.mouth); self.mouthTween = null; } // Reset mouth to closed self.mouth.scaleY = 1; }; function animateMouth() { if (!self.mouthTalking) { return; } // Play WomanTalk sound when mouth starts moving (only if not already playing) if (!womanTalkPlaying && typeof isMuted !== "undefined" && !isMuted) { womanTalkPlaying = true; var soundInstance = LK.getSound('WomanTalk'); soundInstance.play(); // Use sound's actual duration or a longer timeout to ensure sound finishes LK.setTimeout(function () { womanTalkPlaying = false; }, 2000); // Increased timeout to ensure sound completes } // Open self.mouthTween = tween(self.mouth, { scaleY: 2 }, { duration: 120, easing: tween.easeIn, onFinish: function onFinish() { // Close self.mouthTween = tween(self.mouth, { scaleY: 1 }, { duration: 120, easing: tween.easeOut, onFinish: function onFinish() { // Repeat if still talking animateMouth(); } }); } }); } return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf0f0f0 }); /**** * Game Code ****/ // New asset: 'background' (light gray, editable later) // New asset: 'What' (placeholder, 400x400, editable later) // Heart (for lives) // Mouth (Ellipse for talking) // Surprised Woman (Yellow Square) // Angry Woman (Purple Square) // Happy Woman (Red Square) // Questions and answers function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) { return t; } var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) { return i; } throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var questions = [{ text: "Do you know why you are here?", answers: [{ text: "Yes", correct: false }, { text: "Of course, baby!", correct: false }, { text: "Who am I?", correct: true }] }, { text: "Do you think I don’t know who you are?", answers: [{ text: "The Thunderstorm?", correct: false }, { text: "A helpless servant?", correct: false }, { text: "A curious caterpillar?", correct: true }] }, { text: "Are you curious about me?", answers: [{ text: "No, about who I am!", correct: true }, { text: "No, about my fate!", correct: false }, { text: "Yes!", correct: false }] }, { text: "What are you trying to understand?", answers: [{ text: "Who I am", correct: true }, { text: "The Quantum Theory", correct: false }, { text: "Meaning of life", correct: false }] }, { text: "Are you a valuable person?", answers: [{ text: "Am I a person?", correct: true }, { text: "Shine like a diamond", correct: false }, { text: "I am the ONE!", correct: false }] }, { text: "Who's playing you in this game?", answers: [{ text: "Someone acting like me", correct: true }, { text: "A finger on a screen", correct: false }, { text: "You, cunning trickster!", correct: false }] }, { text: "Are you a human?", answers: [{ text: "Who man?", correct: true }, { text: "I am BATMAN!", correct: false }, { text: "I am a chicken salad", correct: false }] }, { text: "What do you feel right now?", answers: [{ text: "Confused but curious", correct: true }, { text: "Need some Turkish Delight", correct: false }, { text: "Like a llama on a treadmill", correct: false }] }, { text: "Why do you keep answering?", answers: [{ text: "To learn who I am", correct: true }, { text: "Yes! Why?", correct: false }, { text: "It's fun!", correct: false }] }, { text: "Do you believe you're real?", answers: [{ text: "I hope so", correct: true }, { text: "Real! Madrid!", correct: false }, { text: "Not after this game", correct: false }] }, { text: "What is your greatest fear?", answers: [{ text: "Not to exist", correct: true }, { text: "Men made of spiders", correct: false }, { text: "Spiders", correct: false }] }, { text: "Are you kidding me?", answers: [{ text: "No!", correct: true }, { text: "You are god damn right!", correct: false }, { text: "I am the Joker!", correct: false }] }, { text: "Where do you think you began?", answers: [{ text: "I may not have started", correct: true }, { text: "In a hospital", correct: false }, { text: "at Camp Nou", correct: false }] }, { text: "Who can you fall in love with?", answers: [{ text: "Can I fall in love?", correct: true }, { text: "You!", correct: false }, { text: "To the hottest", correct: false }] }]; // Shuffle answers for each question function shuffle(arr) { for (var i = arr.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var t = arr[i]; arr[i] = arr[j]; arr[j] = t; } return arr; } // Randomly select 6 questions from the available questions var selectedQuestions = shuffle(questions.slice()).slice(0, 6); questions = selectedQuestions; for (var i = 0; i < questions.length; i++) { questions[i].answers = shuffle(questions[i].answers.slice()); } // Game state var currentQuestion = 0; var hearts = 3; var maxHearts = 3; var woman = null; var answerButtons = []; var questionText = null; var heartIcons = []; var angryTimeout = null; var surprisedShown = false; var gameTimer = 30; // Timer in seconds var timerText = null; var gameEnded = false; var showingStartScreen = true; var startingWomanAsset = null; var gameNameAsset = null; var finalScore = 0; var scoreText = null; var womanTalkPlaying = false; // Flag to prevent overlapping WomanTalk sounds // Layout constants var womanCenterX = 2048 / 2; var womanCenterY = 900; var questionY = 1500; var answerStartY = 1750; var answerSpacing = 220; // Add background asset (behind all elements) var backgroundAsset = LK.getAsset('background', { anchorX: 0.5, anchorY: 0, x: 2048 / 2, y: 0 }); game.addChild(backgroundAsset); // Add woman character woman = new Woman(); game.addChild(woman); woman.x = womanCenterX; woman.y = womanCenterY; // Add hearts (below answer buttons, centered) for (var h = 0; h < maxHearts; h++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); // Place below answer buttons, centered horizontally // Place hearts in a row, centered at 2048/2, below last answer button var totalWidth = (maxHearts - 1) * 200; heart.x = 2048 / 2 - totalWidth / 2 + h * 200; heart.y = answerStartY + 3 * answerSpacing + 150; // 150px below last answer button (moved down 50px) game.addChild(heart); heartIcons.push(heart); } // Add question text questionText = new Text2('', { size: 120, fill: 0xffffff, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); questionText.anchor.set(0.5, 0); questionText.x = 2048 / 2; questionText.y = questionY; game.addChild(questionText); // Add timer text in top right corner timerText = new Text2('0:30', { size: 80, fill: 0xFFFFFF, font: "Impact,'Comic Sans MS','Marker Felt','Chalkboard SE',fantasy" }); timerText.anchor.set(1, 0); // Right-aligned, top timerText.x = -50; // 50px from right edge (relative to topRight) timerText.y = 50; // 50px from top LK.gui.topRight.addChild(timerText); // --- Mute Button Implementation --- var isMuted = false; var muteBtn = new Container(); var muteBg = muteBtn.attachAsset('box', { width: 120, height: 120, color: 0x222222, anchorX: 0.5, anchorY: 0.5 }); var muteIcon = new Text2('🔊', { size: 80, fill: 0xffffff }); muteIcon.anchor.set(0.5, 0.5); muteIcon.x = 0; muteIcon.y = 0; muteBtn.addChild(muteIcon); // Place mute button at top right, below timer (avoid overlap) muteBtn.x = -50; muteBtn.y = 246; // moved 16px further down LK.gui.topRight.addChild(muteBtn); function updateMuteIcon() { muteIcon.setText(isMuted ? '🔇' : '🔊'); } muteBtn.down = function (x, y, obj) { isMuted = !isMuted; updateMuteIcon(); if (isMuted) { // Stop all music and prevent further sounds/music from playing LK.stopMusic(); } else { // Optionally, resume music if not muted and game is running if (!showingStartScreen) { LK.playMusic('Game'); } } }; updateMuteIcon(); // Answer button class function createAnswerButton(idx) { var btn = new Container(); // Button background var bg = btn.attachAsset('box', { width: 900, height: 160, color: 0x000000, anchorX: 0.5, anchorY: 0.5 }); // Button text var txt = new Text2('', { size: 70, fill: 0xffffff }); txt.anchor.set(0.5, 0.5); txt.x = 0; txt.y = 0; btn.addChild(txt); // Position btn.x = 2048 / 2; btn.y = answerStartY + idx * answerSpacing + 100; // Store for later btn.bg = bg; btn.txt = txt; btn.idx = idx; // Add to game game.addChild(btn); // Touch/click handler btn.down = function (x, y, obj) { handleAnswer(idx); }; return btn; } // Create answer buttons for (var i = 0; i < 3; i++) { var btn = createAnswerButton(i); answerButtons.push(btn); } // Update hearts display function updateHearts() { for (var i = 0; i < heartIcons.length; i++) { heartIcons[i].alpha = i < hearts ? 1 : 0.2; } } // Show question and answers function showQuestion() { if (currentQuestion >= questions.length) { // Show surprised woman showSurprised(); return; } var q = questions[currentQuestion]; questionText.setText(q.text); for (var i = 0; i < 3; i++) { var ans = q.answers[i]; answerButtons[i].txt.setText(ans ? ans.text : ''); answerButtons[i].visible = !!ans; answerButtons[i].bg.color = 0xf0f0f0; } // Woman happy woman.setState('happy'); woman.startTalking(); // Stop talking after 1.2s LK.setTimeout(function () { woman.stopTalking(); }, 1200); } // Handle answer selection function handleAnswer(idx) { if (gameEnded || currentQuestion >= questions.length) { return; } var q = questions[currentQuestion]; var ans = q.answers[idx]; if (!ans) { return; } // Disable buttons for now for (var i = 0; i < 3; i++) { answerButtons[i].down = null; } if (ans.correct) { // Correct: progress answerButtons[idx].bg.color = 0x83de44; // green // Play correct answer sound if (!isMuted) { LK.getSound('Correct').play(); } woman.setState('happy'); woman.startTalking(); LK.setTimeout(function () { woman.stopTalking(); currentQuestion++; showQuestion(); // Re-enable buttons for (var i = 0; i < 3; i++) { answerButtons[i].down = function (i) { return function (x, y, obj) { handleAnswer(i); }; }(i); } }, 900); } else { // Wrong: lose heart, angry woman, flash answerButtons[idx].bg.color = 0xff3b3b; // red // Play wrong answer sound if (!isMuted) { LK.getSound('Nein').play(); } hearts--; updateHearts(); woman.setState('angry'); woman.startTalking(); LK.effects.flashObject(woman, 0x8e44ad, 300); // After 3s, return to happy or end game if (angryTimeout) { LK.clearTimeout(angryTimeout); } angryTimeout = LK.setTimeout(function () { woman.stopTalking(); if (hearts <= 0) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } woman.setState('happy'); // Re-enable buttons for (var i = 0; i < 3; i++) { answerButtons[i].down = function (i) { return function (x, y, obj) { handleAnswer(i); }; }(i); } }, 3000); } } // Show surprised woman (win) function showSurprised() { if (surprisedShown) { return; } surprisedShown = true; gameEnded = true; // Stop timer when winning // Remove mouth if present and parent is not undefined/null if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) { if (typeof woman.mouth.parent.removeChild === "function") { woman.mouth.parent.removeChild(woman.mouth); } } // Show only surprisedWoman face woman.setState('surprised'); // Calculate final score var heartPoints = hearts * 100; var timePoints = gameTimer * 125; finalScore = heartPoints + timePoints; // Set the score in LK system for proper tracking LK.setScore(finalScore); // Hide answer buttons for (var i = 0; i < 3; i++) { answerButtons[i].visible = false; } // Hide hearts for (var i = 0; i < heartIcons.length; i++) { heartIcons[i].visible = false; } // Show message (optional, can be blank) questionText.setText(""); // Remove mouth if present and parent is not undefined/null if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) { if (typeof woman.mouth.parent.removeChild === "function") { woman.mouth.parent.removeChild(woman.mouth); } } // Show puzzle screen! var puzzleWoman = new PuzzleWoman(); game.addChild(puzzleWoman); // When puzzle is solved, show win screen as before puzzleWoman.onSolved = function () { // Remove puzzle puzzleWoman.destroy(); // Add 'What' asset under surprisedWoman var whatAsset = LK.getAsset('What', { anchorX: 0.5, anchorY: 0.5, x: womanCenterX, y: womanCenterY + 600 + 300 + 300 - 10 - 20 - 50 }); game.addChild(whatAsset); // Add score text under What asset scoreText = new Text2('YOUR SCORE: ' + finalScore, { size: 150, fill: 0xDAA520, font: "'GillSans-Bold','Arial Black Bold',Impact,'Arial Black',Tahoma" }); scoreText.anchor.set(0.5, 0); scoreText.x = womanCenterX; scoreText.y = womanCenterY + 600 + 300 + 300 + 247; game.addChild(scoreText); // Remove 'What' asset after 3s (when game finishes) LK.setTimeout(function () { if (whatAsset && typeof whatAsset.destroy === "function") { whatAsset.destroy(); } if (scoreText && typeof scoreText.destroy === "function") { scoreText.destroy(); } }, 3000); // After 3 seconds, show youwinWoman (no mouth) LK.setTimeout(function () { // Remove mouth if present (defensive) if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) { if (typeof woman.mouth.parent.removeChild === "function") { woman.mouth.parent.removeChild(woman.mouth); } } // Show FinalScreenAsset under youwinWoman var finalScreenAsset = LK.getAsset('FinalScreenAsset', { anchorX: 0.5, anchorY: 0.5, x: womanCenterX, y: womanCenterY + 600 + 250 + 400 + 100 - 9 - 19 - 19 - 26 - 26 - 26 - 46 - 26 }); game.addChild(finalScreenAsset); // Add score text at bottom of screen var youWinScoreText = new Text2('YOUR SCORE: ' + LK.getScore(), { size: 150, fill: 0xDAA520, font: "'GillSans-Bold','Arial Black Bold',Impact,'Arial Black',Tahoma" }); youWinScoreText.anchor.set(0.5, 1); // Bottom-center anchor youWinScoreText.x = womanCenterX; youWinScoreText.y = 2732 - 100; // 100px from bottom of screen game.addChild(youWinScoreText); // Swap to youwinWoman face (add asset if not present) if (woman.face) { woman.face.destroy(); } woman.face = woman.attachAsset('youwinWoman', { anchorX: 0.5, anchorY: 0.5, y: -100 }); // After 5 more seconds, finish the game LK.setTimeout(function () { LK.showYouWin(); }, 5000); }, 3000); }; } // Timer countdown function function updateTimer() { if (gameEnded || showingStartScreen) { return; } gameTimer--; var minutes = Math.floor(gameTimer / 60); var seconds = gameTimer % 60; var timeString = minutes + ':' + (seconds < 10 ? '0' : '') + seconds; timerText.setText(timeString); if (gameTimer <= 0) { gameEnded = true; questionText.setText("Time is up!"); woman.setState('angry'); LK.effects.flashScreen(0xff0000, 1000); LK.setTimeout(function () { LK.showGameOver(); }, 1000); } } // Timer interval will be started after starting screen var timerInterval = null; var tapToStartAsset = null; var tapToStartText = null; // Show starting screen first function showStartingScreen() { // Create starting woman asset startingWomanAsset = LK.getAsset('startingWoman', { anchorX: 0.5, anchorY: 0.5, x: womanCenterX, y: womanCenterY, alpha: 0, scaleX: 0.5, scaleY: 0.5 }); game.addChild(startingWomanAsset); // Animate starting woman entrance tween(startingWomanAsset, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.elasticOut }); // Create game name asset gameNameAsset = LK.getAsset('GameName', {}); game.addChild(gameNameAsset); // Animate game name entrance with delay LK.setTimeout(function () { tween(gameNameAsset, { alpha: 1, y: womanCenterY + 400 + 360 + 360 + 200 - 60 - 200 - 160 }, { duration: 600, easing: tween.easeOut }); }, 400); // Create tap to start asset tapToStartAsset = LK.getAsset('taptostart', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 + 400 + 80 + 89 - 50 - 50, y: womanCenterY + 400 + 360 + 360 + 200 + 200 - 60 - 80, alpha: 0, scaleX: 0.8, scaleY: 0.8 }); game.addChild(tapToStartAsset); // Animate tap to start entrance with delay and add pulsing effect LK.setTimeout(function () { if (tapToStartAsset) { tween(tapToStartAsset, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { // Start pulsing animation function pulse() { if (tapToStartAsset) { tween(tapToStartAsset, { scaleX: 1.1, scaleY: 1.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { if (tapToStartAsset) { tween(tapToStartAsset, { scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: pulse }); } } }); } } pulse(); } }); } }, 800); // Hide game elements during start screen woman.visible = false; questionText.visible = false; for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].visible = false; } for (var i = 0; i < heartIcons.length; i++) { heartIcons[i].visible = false; } } // Function to start the game function startGame() { if (!showingStartScreen) { return; } // Remove starting screen assets if (startingWomanAsset) { startingWomanAsset.destroy(); startingWomanAsset = null; } if (gameNameAsset) { gameNameAsset.destroy(); gameNameAsset = null; } if (tapToStartAsset) { tapToStartAsset.destroy(); tapToStartAsset = null; } if (tapToStartText) { tapToStartText.destroy(); tapToStartText = null; } // Show game elements woman.visible = true; questionText.visible = true; timerText.visible = true; for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].visible = true; } for (var i = 0; i < heartIcons.length; i++) { heartIcons[i].visible = true; } showingStartScreen = false; // Start the actual game updateHearts(); showQuestion(); // Start timer countdown timerInterval = LK.setInterval(updateTimer, 1000); // Play game music if (!isMuted) { LK.playMusic('Game'); } } // Add tap to start functionality game.down = function (x, y, obj) { if (showingStartScreen) { startGame(); } }; // Initial state - show starting screen showStartingScreen(); // Play game music at beginning screen if (!isMuted) { LK.playMusic('Game'); } // Make sure answer buttons are re-enabled after each question for (var i = 0; i < 3; i++) { answerButtons[i].down = function (i) { return function (x, y, obj) { handleAnswer(i); }; }(i); } // No dragging or move events needed for this game // No update loop needed
===================================================================
--- original.js
+++ change.js
@@ -5,158 +5,126 @@
/****
* Classes
****/
-// PuzzleWoman class for 9-piece puzzle mini-game
+// PuzzleWoman class: 3x3 sliding puzzle
var PuzzleWoman = Container.expand(function () {
var self = Container.call(this);
// Puzzle config
- var pieceCount = 3; // 3x3 grid
- var pieceSize = 400; // Each piece is 400x400 px (puzzleWoman asset is 1200x1200)
- var offsetX = 2048 / 2 - pieceCount * pieceSize / 2;
- var offsetY = 600; // Centered vertically, adjust as needed
- // Store pieces and their correct positions
- self.pieces = [];
- self.correctOrder = [];
- self.emptyIndex = pieceCount * pieceCount - 1; // Last piece is empty (for sliding puzzle)
- self.solved = false;
- // Create puzzle pieces
- for (var i = 0; i < pieceCount * pieceCount; i++) {
- var row = Math.floor(i / pieceCount);
- var col = i % pieceCount;
- var piece = LK.getAsset('puzzleWoman', {
- anchorX: 0,
- anchorY: 0,
- width: pieceSize,
- height: pieceSize,
- x: offsetX + col * pieceSize,
- y: offsetY + row * pieceSize,
- cropX: col * pieceSize,
- cropY: row * pieceSize,
- cropWidth: pieceSize,
- cropHeight: pieceSize,
- visible: i !== self.emptyIndex // Hide the last piece (empty slot)
- });
- self.addChild(piece);
- self.pieces.push(piece);
- self.correctOrder.push(i);
- piece._puzzleIndex = i;
- piece._row = row;
- piece._col = col;
- // Add touch/click handler
- (function (idx) {
- piece.down = function (x, y, obj) {
- if (self.solved) return;
- self.tryMove(idx);
- };
- })(i);
+ var gridSize = 3;
+ var pieceSize = 400; // 1200/3, since asset is 1200x1200
+ var pieces = [];
+ var emptyPos = {
+ x: gridSize - 1,
+ y: gridSize - 1
+ }; // Start with last piece empty
+ var solved = false;
+ // Create pieces
+ for (var y = 0; y < gridSize; y++) {
+ for (var x = 0; x < gridSize; x++) {
+ // Skip last piece (empty)
+ if (x === gridSize - 1 && y === gridSize - 1) continue;
+ var idx = y * gridSize + x;
+ var piece = new Container();
+ // Attach puzzleWoman asset, crop to correct part
+ var asset = piece.attachAsset('puzzleWoman', {
+ anchorX: 0,
+ anchorY: 0,
+ width: pieceSize,
+ height: pieceSize,
+ x: 0,
+ y: 0
+ });
+ // Mask/crop by shifting asset inside container
+ asset.x = -x * pieceSize;
+ asset.y = -y * pieceSize;
+ piece.x = x * pieceSize;
+ piece.y = y * pieceSize;
+ piece.gridX = x;
+ piece.gridY = y;
+ piece.correctX = x;
+ piece.correctY = y;
+ piece.idx = idx;
+ piece.interactive = true;
+ // Store for move logic
+ pieces.push(piece);
+ self.addChild(piece);
+ }
}
- // Shuffle puzzle (simple shuffle, but always solvable for 3x3)
- self.shuffle = function () {
- var moves = 100;
- for (var m = 0; m < moves; m++) {
- var neighbors = self.getMovableNeighbors(self.emptyIndex);
- var moveIdx = neighbors[Math.floor(Math.random() * neighbors.length)];
- self.swapPieces(self.emptyIndex, moveIdx);
- self.emptyIndex = moveIdx;
+ // Shuffle puzzle (simple random moves)
+ function shufflePuzzle(moves) {
+ for (var i = 0; i < moves; i++) {
+ var neighbors = getMovableNeighbors();
+ var movePiece = neighbors[Math.floor(Math.random() * neighbors.length)];
+ if (movePiece) movePieceMove(movePiece);
}
- self.updatePiecePositions();
- };
- // Get indices of pieces that can move into the empty slot
- self.getMovableNeighbors = function (emptyIdx) {
- var neighbors = [];
- var row = Math.floor(emptyIdx / pieceCount);
- var col = emptyIdx % pieceCount;
- var dirs = [{
- dr: -1,
- dc: 0
- },
- // up
- {
- dr: 1,
- dc: 0
- },
- // down
- {
- dr: 0,
- dc: -1
- },
- // left
- {
- dr: 0,
- dc: 1
- } // right
- ];
- for (var d = 0; d < dirs.length; d++) {
- var nr = row + dirs[d].dr;
- var nc = col + dirs[d].dc;
- if (nr >= 0 && nr < pieceCount && nc >= 0 && nc < pieceCount) {
- neighbors.push(nr * pieceCount + nc);
+ }
+ // Get pieces adjacent to empty
+ function getMovableNeighbors() {
+ var arr = [];
+ for (var i = 0; i < pieces.length; i++) {
+ var p = pieces[i];
+ if (Math.abs(p.gridX - emptyPos.x) === 1 && p.gridY === emptyPos.y || Math.abs(p.gridY - emptyPos.y) === 1 && p.gridX === emptyPos.x) {
+ arr.push(p);
}
}
- return neighbors;
- };
- // Try to move a piece into the empty slot
- self.tryMove = function (idx) {
- if (self.isNeighbor(idx, self.emptyIndex)) {
- self.swapPieces(idx, self.emptyIndex);
- self.updatePiecePositions();
- self.emptyIndex = idx;
- if (self.checkSolved()) {
- self.solved = true;
- if (typeof self.onSolved === "function") {
- self.onSolved();
- }
- }
+ return arr;
+ }
+ // Move a piece into the empty spot
+ function movePieceMove(piece) {
+ if (solved) return;
+ // Only allow if adjacent
+ if (Math.abs(piece.gridX - emptyPos.x) === 1 && piece.gridY === emptyPos.y || Math.abs(piece.gridY - emptyPos.y) === 1 && piece.gridX === emptyPos.x) {
+ // Animate move
+ var oldX = piece.gridX,
+ oldY = piece.gridY;
+ piece.gridX = emptyPos.x;
+ piece.gridY = emptyPos.y;
+ emptyPos.x = oldX;
+ emptyPos.y = oldY;
+ tween(piece, {
+ x: piece.gridX * pieceSize,
+ y: piece.gridY * pieceSize
+ }, {
+ duration: 120,
+ easing: tween.easeInOut,
+ onFinish: checkSolved
+ });
}
- };
- // Check if two indices are neighbors (can swap)
- self.isNeighbor = function (idx1, idx2) {
- var r1 = Math.floor(idx1 / pieceCount),
- c1 = idx1 % pieceCount;
- var r2 = Math.floor(idx2 / pieceCount),
- c2 = idx2 % pieceCount;
- return Math.abs(r1 - r2) + Math.abs(c1 - c2) === 1;
- };
- // Swap two pieces in the array
- self.swapPieces = function (idx1, idx2) {
- var tmp = self.pieces[idx1];
- self.pieces[idx1] = self.pieces[idx2];
- self.pieces[idx2] = tmp;
- };
- // Update the visual positions of all pieces
- self.updatePiecePositions = function () {
- for (var i = 0; i < self.pieces.length; i++) {
- var row = Math.floor(i / pieceCount);
- var col = i % pieceCount;
- var piece = self.pieces[i];
- piece.x = offsetX + col * pieceSize;
- piece.y = offsetY + row * pieceSize;
- piece.visible = i !== self.emptyIndex;
+ }
+ // Piece tap handler
+ function onPieceDown(piece) {
+ return function (x, y, obj) {
+ movePieceMove(piece);
+ };
+ }
+ for (var i = 0; i < pieces.length; i++) {
+ pieces[i].down = onPieceDown(pieces[i]);
+ }
+ // Check if solved
+ function checkSolved() {
+ for (var i = 0; i < pieces.length; i++) {
+ var p = pieces[i];
+ if (p.gridX !== p.correctX || p.gridY !== p.correctY) return;
}
- };
- // Check if puzzle is solved
- self.checkSolved = function () {
- for (var i = 0; i < self.pieces.length; i++) {
- if (self.pieces[i]._puzzleIndex !== i) return false;
+ // Only solved if empty is in last position
+ if (emptyPos.x === gridSize - 1 && emptyPos.y === gridSize - 1) {
+ solved = true;
+ if (typeof self.onSolved === "function") self.onSolved();
}
- return true;
+ }
+ // Shuffle on create
+ shufflePuzzle(60);
+ // Center puzzle
+ self.x = 2048 / 2 - pieceSize * gridSize / 2;
+ self.y = 2732 / 2 - pieceSize * gridSize / 2;
+ // Expose for outside
+ self.pieces = pieces;
+ self.checkSolved = checkSolved;
+ self.solved = function () {
+ return solved;
};
- // Show the solved image (for skip)
- self.showSolved = function () {
- for (var i = 0; i < self.pieces.length; i++) {
- self.pieces[i].x = offsetX + i % pieceCount * pieceSize;
- self.pieces[i].y = offsetY + Math.floor(i / pieceCount) * pieceSize;
- self.pieces[i].visible = true;
- }
- self.emptyIndex = -1;
- self.solved = true;
- if (typeof self.onSolved === "function") {
- self.onSolved();
- }
- };
- // Shuffle on creation
- self.shuffle();
+ self.onSolved = null;
return self;
});
// Woman character class
var Woman = Container.expand(function () {
@@ -763,54 +731,45 @@
return;
}
surprisedShown = true;
gameEnded = true; // Stop timer when winning
- // Hide all quiz UI
- for (var i = 0; i < 3; i++) answerButtons[i].visible = false;
- for (var i = 0; i < heartIcons.length; i++) heartIcons[i].visible = false;
+ // Remove mouth if present and parent is not undefined/null
+ if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) {
+ if (typeof woman.mouth.parent.removeChild === "function") {
+ woman.mouth.parent.removeChild(woman.mouth);
+ }
+ }
+ // Show only surprisedWoman face
+ woman.setState('surprised');
+ // Calculate final score
+ var heartPoints = hearts * 100;
+ var timePoints = gameTimer * 125;
+ finalScore = heartPoints + timePoints;
+ // Set the score in LK system for proper tracking
+ LK.setScore(finalScore);
+ // Hide answer buttons
+ for (var i = 0; i < 3; i++) {
+ answerButtons[i].visible = false;
+ }
+ // Hide hearts
+ for (var i = 0; i < heartIcons.length; i++) {
+ heartIcons[i].visible = false;
+ }
+ // Show message (optional, can be blank)
questionText.setText("");
- woman.visible = false;
- // Add puzzle mini-game screen
- var puzzleScreen = new Container();
- game.addChild(puzzleScreen);
- // Add PuzzleWoman puzzle
- var puzzle = new PuzzleWoman();
- puzzleScreen.addChild(puzzle);
- // Add skip button (shows solved image)
- var skipBtn = new Container();
- var skipBg = skipBtn.attachAsset('box', {
- width: 320,
- height: 120,
- color: 0x333333,
- anchorX: 0.5,
- anchorY: 0.5
- });
- var skipTxt = new Text2('SKIP', {
- size: 70,
- fill: 0xffffff
- });
- skipTxt.anchor.set(0.5, 0.5);
- skipTxt.x = 0;
- skipTxt.y = 0;
- skipBtn.addChild(skipTxt);
- skipBtn.x = 2048 / 2;
- skipBtn.y = 1800;
- puzzleScreen.addChild(skipBtn);
- skipBtn.down = function () {
- puzzle.showSolved();
- };
- // When puzzle is solved, continue to What and win screen
- puzzle.onSolved = function () {
- // Remove puzzle screen
- puzzleScreen.destroy();
- // Show only surprisedWoman face
- woman.visible = true;
- woman.setState('surprised');
- // Calculate final score
- var heartPoints = hearts * 100;
- var timePoints = gameTimer * 125;
- finalScore = heartPoints + timePoints;
- LK.setScore(finalScore);
+ // Remove mouth if present and parent is not undefined/null
+ if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) {
+ if (typeof woman.mouth.parent.removeChild === "function") {
+ woman.mouth.parent.removeChild(woman.mouth);
+ }
+ }
+ // Show puzzle screen!
+ var puzzleWoman = new PuzzleWoman();
+ game.addChild(puzzleWoman);
+ // When puzzle is solved, show win screen as before
+ puzzleWoman.onSolved = function () {
+ // Remove puzzle
+ puzzleWoman.destroy();
// Add 'What' asset under surprisedWoman
var whatAsset = LK.getAsset('What', {
anchorX: 0.5,
anchorY: 0.5,
@@ -858,11 +817,11 @@
size: 150,
fill: 0xDAA520,
font: "'GillSans-Bold','Arial Black Bold',Impact,'Arial Black',Tahoma"
});
- youWinScoreText.anchor.set(0.5, 1);
+ youWinScoreText.anchor.set(0.5, 1); // Bottom-center anchor
youWinScoreText.x = womanCenterX;
- youWinScoreText.y = 2732 - 100;
+ youWinScoreText.y = 2732 - 100; // 100px from bottom of screen
game.addChild(youWinScoreText);
// Swap to youwinWoman face (add asset if not present)
if (woman.face) {
woman.face.destroy();
@@ -871,26 +830,8 @@
anchorX: 0.5,
anchorY: 0.5,
y: -100
});
- }, 3000);
- // After 3 seconds, show youwinWoman (no mouth)
- LK.setTimeout(function () {
- // Remove mouth if present (defensive)
- if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) {
- if (typeof woman.mouth.parent.removeChild === "function") {
- woman.mouth.parent.removeChild(woman.mouth);
- }
- }
- // Swap to youwinWoman face (add asset if not present)
- if (woman.face) {
- woman.face.destroy();
- }
- woman.face = woman.attachAsset('youwinWoman', {
- anchorX: 0.5,
- anchorY: 0.5,
- y: -100
- });
// After 5 more seconds, finish the game
LK.setTimeout(function () {
LK.showYouWin();
}, 5000);
Delete the mouth. Woman have no mouth. Just same skin color.
An anime womans mouth. Just mouth.. In-Game asset. 2d. High contrast. No shadows
Fill it red. Its a red rectangle. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Delete the mouth. Woman have no mouth. Just same skin color.
Make her shy and seksier
Show her from a little further away and make a victory sign with her hand and smiley face
same photo but make a victory sign with her hand and smile
Same style bu write: DON'T YOU KNOW WHO YOU ARE
Write "TAP TO START" with a comic font. In-Game asset. 2d. High contrast. No shadows
Write comics style What? in golden color. In-Game asset. 2d. High contrast. No shadows
make same heath like a woman
delete blacks