Code edit (1 edits merged)
Please save this source code
User prompt
Scratch & Guess: Mystery Card Quiz
Initial prompt
Toca jokes (2016). The powerpuff girls have cards. Scratch the back of the card with a text inside says “what is bliss’s favourite food?” Tap on the text says “carrots” that’s wrong, the text says “bananas” that’s wrong or the text says “blueberries” that’s correct.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var AnswerButton = Container.expand(function () { var self = Container.call(this); var buttonBg = self.attachAsset('answerButton', { anchorX: 0.5, anchorY: 0.5 }); self.buttonText = new Text2('', { size: 28, fill: '#ffffff' }); self.buttonText.anchor.set(0.5, 0.5); self.addChild(self.buttonText); self.isCorrect = false; self.isClicked = false; self.setText = function (text) { self.buttonText.setText(text); }; self.setCorrect = function (correct) { self.isCorrect = correct; }; self.showResult = function () { if (self.isCorrect) { self.removeChild(buttonBg); var correctBg = self.attachAsset('correctButton', { anchorX: 0.5, anchorY: 0.5 }); self.addChildAt(correctBg, 0); } else { self.removeChild(buttonBg); var wrongBg = self.attachAsset('wrongButton', { anchorX: 0.5, anchorY: 0.5 }); self.addChildAt(wrongBg, 0); } }; self.down = function (x, y, obj) { if (self.isClicked) return; self.isClicked = true; if (self.isCorrect) { LK.getSound('correct').play(); LK.setScore(LK.getScore() + 1); scoreText.setText('Score: ' + LK.getScore()); } else { LK.getSound('wrong').play(); } for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].showResult(); } LK.setTimeout(function () { nextCard(); }, 1500); }; return self; }); var ScratchCard = Container.expand(function () { var self = Container.call(this); var cardBack = self.attachAsset('cardBack', { anchorX: 0.5, anchorY: 0.5 }); var cardFront = self.attachAsset('cardFront', { anchorX: 0.5, anchorY: 0.5 }); var scratchOverlay = self.attachAsset('scratchOverlay', { anchorX: 0.5, anchorY: 0.5 }); self.questionText = new Text2('', { size: 32, fill: '#000000' }); self.questionText.anchor.set(0.5, 0.5); self.addChild(self.questionText); self.isScratched = false; self.scratchedAreas = []; self.question = ''; self.answers = []; self.correctAnswer = 0; self.isRevealed = false; self.setQuestion = function (question, answers, correctIndex) { self.question = question; self.answers = answers; self.correctAnswer = correctIndex; self.questionText.setText(question); self.questionText.alpha = 0; }; self.scratch = function (x, y) { if (self.isRevealed) return; var localPos = self.toLocal({ x: x, y: y }); if (Math.abs(localPos.x) < 300 && Math.abs(localPos.y) < 200) { self.scratchedAreas.push({ x: localPos.x, y: localPos.y }); if (self.scratchedAreas.length > 15) { self.revealQuestion(); } else { var scratchProgress = self.scratchedAreas.length / 15; scratchOverlay.alpha = 1 - scratchProgress; self.questionText.alpha = scratchProgress * 0.8; } LK.getSound('scratch').play(); } }; self.revealQuestion = function () { self.isRevealed = true; scratchOverlay.alpha = 0; self.questionText.alpha = 1; tween(self.questionText, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(self.questionText, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2196F3 }); /**** * Game Code ****/ var questions = [{ question: "What is the capital of France?", answers: ["London", "Paris", "Berlin"], correct: 1 }, { question: "Which planet is closest to the Sun?", answers: ["Venus", "Mercury", "Mars"], correct: 1 }, { question: "What is 2 + 2?", answers: ["3", "4", "5"], correct: 1 }, { question: "Which animal is known as the King of the Jungle?", answers: ["Tiger", "Lion", "Elephant"], correct: 1 }, { question: "What color do you get when you mix red and blue?", answers: ["Purple", "Green", "Orange"], correct: 0 }, { question: "How many continents are there?", answers: ["5", "6", "7"], correct: 2 }, { question: "Which is the largest ocean?", answers: ["Atlantic", "Pacific", "Indian"], correct: 1 }, { question: "What is the fastest land animal?", answers: ["Cheetah", "Lion", "Horse"], correct: 0 }]; var currentCard = null; var answerButtons = []; var currentQuestionIndex = 0; var isAnswering = false; var scoreText = new Text2('Score: 0', { size: 48, fill: '#ffffff' }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var instructionText = new Text2('Scratch the card to reveal the question!', { size: 36, fill: '#ffffff' }); instructionText.anchor.set(0.5, 0); instructionText.y = 100; LK.gui.top.addChild(instructionText); function createNewCard() { if (currentQuestionIndex >= questions.length) { LK.setTimeout(function () { LK.showYouWin(); }, 1000); return; } var questionData = questions[currentQuestionIndex]; currentCard = new ScratchCard(); currentCard.x = 2048 / 2; currentCard.y = 2732 / 2 - 100; currentCard.setQuestion(questionData.question, questionData.answers, questionData.correct); game.addChild(currentCard); isAnswering = false; instructionText.setText('Scratch the card to reveal the question!'); } function createAnswerButtons() { var questionData = questions[currentQuestionIndex]; for (var i = 0; i < 3; i++) { var button = new AnswerButton(); button.x = 2048 / 2; button.y = 2732 / 2 + 200 + i * 120; button.setText(questionData.answers[i]); button.setCorrect(i === questionData.correct); answerButtons.push(button); game.addChild(button); } isAnswering = true; instructionText.setText('Tap the correct answer!'); } function nextCard() { if (currentCard) { currentCard.destroy(); currentCard = null; } for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].destroy(); } answerButtons = []; currentQuestionIndex++; createNewCard(); } var isDragging = false; game.move = function (x, y, obj) { if (isDragging && currentCard && !currentCard.isRevealed) { currentCard.scratch(x, y); } }; game.down = function (x, y, obj) { if (currentCard && !currentCard.isRevealed && !isAnswering) { isDragging = true; currentCard.scratch(x, y); } }; game.up = function (x, y, obj) { isDragging = false; }; game.update = function () { if (currentCard && currentCard.isRevealed && answerButtons.length === 0 && !isAnswering) { createAnswerButtons(); } }; createNewCard();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,265 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var AnswerButton = Container.expand(function () {
+ var self = Container.call(this);
+ var buttonBg = self.attachAsset('answerButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.buttonText = new Text2('', {
+ size: 28,
+ fill: '#ffffff'
+ });
+ self.buttonText.anchor.set(0.5, 0.5);
+ self.addChild(self.buttonText);
+ self.isCorrect = false;
+ self.isClicked = false;
+ self.setText = function (text) {
+ self.buttonText.setText(text);
+ };
+ self.setCorrect = function (correct) {
+ self.isCorrect = correct;
+ };
+ self.showResult = function () {
+ if (self.isCorrect) {
+ self.removeChild(buttonBg);
+ var correctBg = self.attachAsset('correctButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChildAt(correctBg, 0);
+ } else {
+ self.removeChild(buttonBg);
+ var wrongBg = self.attachAsset('wrongButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChildAt(wrongBg, 0);
+ }
+ };
+ self.down = function (x, y, obj) {
+ if (self.isClicked) return;
+ self.isClicked = true;
+ if (self.isCorrect) {
+ LK.getSound('correct').play();
+ LK.setScore(LK.getScore() + 1);
+ scoreText.setText('Score: ' + LK.getScore());
+ } else {
+ LK.getSound('wrong').play();
+ }
+ for (var i = 0; i < answerButtons.length; i++) {
+ answerButtons[i].showResult();
+ }
+ LK.setTimeout(function () {
+ nextCard();
+ }, 1500);
+ };
+ return self;
+});
+var ScratchCard = Container.expand(function () {
+ var self = Container.call(this);
+ var cardBack = self.attachAsset('cardBack', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var cardFront = self.attachAsset('cardFront', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var scratchOverlay = self.attachAsset('scratchOverlay', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.questionText = new Text2('', {
+ size: 32,
+ fill: '#000000'
+ });
+ self.questionText.anchor.set(0.5, 0.5);
+ self.addChild(self.questionText);
+ self.isScratched = false;
+ self.scratchedAreas = [];
+ self.question = '';
+ self.answers = [];
+ self.correctAnswer = 0;
+ self.isRevealed = false;
+ self.setQuestion = function (question, answers, correctIndex) {
+ self.question = question;
+ self.answers = answers;
+ self.correctAnswer = correctIndex;
+ self.questionText.setText(question);
+ self.questionText.alpha = 0;
+ };
+ self.scratch = function (x, y) {
+ if (self.isRevealed) return;
+ var localPos = self.toLocal({
+ x: x,
+ y: y
+ });
+ if (Math.abs(localPos.x) < 300 && Math.abs(localPos.y) < 200) {
+ self.scratchedAreas.push({
+ x: localPos.x,
+ y: localPos.y
+ });
+ if (self.scratchedAreas.length > 15) {
+ self.revealQuestion();
+ } else {
+ var scratchProgress = self.scratchedAreas.length / 15;
+ scratchOverlay.alpha = 1 - scratchProgress;
+ self.questionText.alpha = scratchProgress * 0.8;
+ }
+ LK.getSound('scratch').play();
+ }
+ };
+ self.revealQuestion = function () {
+ self.isRevealed = true;
+ scratchOverlay.alpha = 0;
+ self.questionText.alpha = 1;
+ tween(self.questionText, {
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self.questionText, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeIn
+ });
+ }
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2196F3
+});
+
+/****
+* Game Code
+****/
+var questions = [{
+ question: "What is the capital of France?",
+ answers: ["London", "Paris", "Berlin"],
+ correct: 1
+}, {
+ question: "Which planet is closest to the Sun?",
+ answers: ["Venus", "Mercury", "Mars"],
+ correct: 1
+}, {
+ question: "What is 2 + 2?",
+ answers: ["3", "4", "5"],
+ correct: 1
+}, {
+ question: "Which animal is known as the King of the Jungle?",
+ answers: ["Tiger", "Lion", "Elephant"],
+ correct: 1
+}, {
+ question: "What color do you get when you mix red and blue?",
+ answers: ["Purple", "Green", "Orange"],
+ correct: 0
+}, {
+ question: "How many continents are there?",
+ answers: ["5", "6", "7"],
+ correct: 2
+}, {
+ question: "Which is the largest ocean?",
+ answers: ["Atlantic", "Pacific", "Indian"],
+ correct: 1
+}, {
+ question: "What is the fastest land animal?",
+ answers: ["Cheetah", "Lion", "Horse"],
+ correct: 0
+}];
+var currentCard = null;
+var answerButtons = [];
+var currentQuestionIndex = 0;
+var isAnswering = false;
+var scoreText = new Text2('Score: 0', {
+ size: 48,
+ fill: '#ffffff'
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var instructionText = new Text2('Scratch the card to reveal the question!', {
+ size: 36,
+ fill: '#ffffff'
+});
+instructionText.anchor.set(0.5, 0);
+instructionText.y = 100;
+LK.gui.top.addChild(instructionText);
+function createNewCard() {
+ if (currentQuestionIndex >= questions.length) {
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 1000);
+ return;
+ }
+ var questionData = questions[currentQuestionIndex];
+ currentCard = new ScratchCard();
+ currentCard.x = 2048 / 2;
+ currentCard.y = 2732 / 2 - 100;
+ currentCard.setQuestion(questionData.question, questionData.answers, questionData.correct);
+ game.addChild(currentCard);
+ isAnswering = false;
+ instructionText.setText('Scratch the card to reveal the question!');
+}
+function createAnswerButtons() {
+ var questionData = questions[currentQuestionIndex];
+ for (var i = 0; i < 3; i++) {
+ var button = new AnswerButton();
+ button.x = 2048 / 2;
+ button.y = 2732 / 2 + 200 + i * 120;
+ button.setText(questionData.answers[i]);
+ button.setCorrect(i === questionData.correct);
+ answerButtons.push(button);
+ game.addChild(button);
+ }
+ isAnswering = true;
+ instructionText.setText('Tap the correct answer!');
+}
+function nextCard() {
+ if (currentCard) {
+ currentCard.destroy();
+ currentCard = null;
+ }
+ for (var i = 0; i < answerButtons.length; i++) {
+ answerButtons[i].destroy();
+ }
+ answerButtons = [];
+ currentQuestionIndex++;
+ createNewCard();
+}
+var isDragging = false;
+game.move = function (x, y, obj) {
+ if (isDragging && currentCard && !currentCard.isRevealed) {
+ currentCard.scratch(x, y);
+ }
+};
+game.down = function (x, y, obj) {
+ if (currentCard && !currentCard.isRevealed && !isAnswering) {
+ isDragging = true;
+ currentCard.scratch(x, y);
+ }
+};
+game.up = function (x, y, obj) {
+ isDragging = false;
+};
+game.update = function () {
+ if (currentCard && currentCard.isRevealed && answerButtons.length === 0 && !isAnswering) {
+ createAnswerButtons();
+ }
+};
+createNewCard();
\ No newline at end of file