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