/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var AnswerButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('answerButton', { anchorX: 0.5, anchorY: 0.5 }); self.answer = 0; self.isCorrect = false; self.answerText = new Text2('', { size: 32, fill: 0x000000 }); self.answerText.anchor.set(0.5, 0.5); self.addChild(self.answerText); self.setAnswer = function (answer) { self.answer = answer; self.answerText.setText(answer.toString()); }; self.flashCorrect = function () { var correctGraphics = self.attachAsset('correctButton', { anchorX: 0.5, anchorY: 0.5 }); tween(correctGraphics, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { if (correctGraphics.parent) { correctGraphics.parent.removeChild(correctGraphics); } } }); }; self.flashWrong = function () { var wrongGraphics = self.attachAsset('wrongButton', { anchorX: 0.5, anchorY: 0.5 }); tween(wrongGraphics, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { if (wrongGraphics.parent) { wrongGraphics.parent.removeChild(wrongGraphics); } } }); }; self.down = function (x, y, obj) { checkAnswer(self.answer); }; return self; }); var FallingNumber = Container.expand(function () { var self = Container.call(this); var numberGraphics = self.attachAsset('fallingNumber', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.equation = ""; self.correctAnswer = 0; self.answered = false; self.equationText = new Text2('', { size: 24, fill: 0xFFFFFF }); self.equationText.anchor.set(0.5, 0.5); self.addChild(self.equationText); self.setEquation = function (equation, answer) { self.equation = equation; self.correctAnswer = answer; self.equationText.setText(equation); }; self.destroy = function () { if (self.parent) { self.parent.removeChild(self); } }; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var fallingNumbers = []; var answerButtons = []; var currentEquation = null; var currentAnswers = []; var score = 0; var health = 100; var maxHealth = 100; var difficulty = 1; var gameSpeed = 1; var nextNumberTimer = 0; var numberSpawnRate = 180; // frames between spawns // Create base var base = game.addChild(LK.getAsset('base', { anchorX: 0.5, anchorY: 0.5 })); base.x = 2048 / 2; base.y = 2732 - 60; // Create health bar background var healthBarBg = LK.getAsset('healthBar', { anchorX: 0, anchorY: 0, color: 0x333333 }); healthBarBg.x = 50; healthBarBg.y = 50; LK.gui.topLeft.addChild(healthBarBg); // Create health bar var healthBar = LK.getAsset('healthBar', { anchorX: 0, anchorY: 0 }); healthBar.x = 50; healthBar.y = 50; LK.gui.topLeft.addChild(healthBar); // Create score text var scoreTxt = new Text2('Score: 0', { size: 48, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Create answer buttons for (var i = 0; i < 4; i++) { var button = new AnswerButton(); button.x = 400 + i * 300; button.y = 2732 - 150; answerButtons.push(button); game.addChild(button); } // Math operations var operations = ['+', '-', '*', '/']; function generateEquation() { var operation = operations[Math.floor(Math.random() * Math.min(difficulty, operations.length))]; var num1, num2, answer; switch (operation) { case '+': num1 = Math.floor(Math.random() * 20) + 1; num2 = Math.floor(Math.random() * 20) + 1; answer = num1 + num2; break; case '-': num1 = Math.floor(Math.random() * 20) + 10; num2 = Math.floor(Math.random() * num1) + 1; answer = num1 - num2; break; case '*': num1 = Math.floor(Math.random() * 10) + 1; num2 = Math.floor(Math.random() * 10) + 1; answer = num1 * num2; break; case '/': answer = Math.floor(Math.random() * 10) + 1; num2 = Math.floor(Math.random() * 5) + 1; num1 = answer * num2; break; } return { equation: num1 + ' ' + operation + ' ' + num2 + ' = ?', answer: answer }; } function generateAnswers(correctAnswer) { var answers = [correctAnswer]; var wrongAnswers = []; // Generate 3 wrong answers for (var i = 0; i < 3; i++) { var wrongAnswer; do { wrongAnswer = correctAnswer + Math.floor(Math.random() * 20) - 10; } while (wrongAnswer === correctAnswer || wrongAnswers.indexOf(wrongAnswer) !== -1 || wrongAnswer < 0); wrongAnswers.push(wrongAnswer); } answers = answers.concat(wrongAnswers); // Shuffle answers for (var i = answers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = answers[i]; answers[i] = answers[j]; answers[j] = temp; } return answers; } function spawnFallingNumber() { var equationData = generateEquation(); var fallingNumber = new FallingNumber(); fallingNumber.x = Math.random() * (2048 - 200) + 100; fallingNumber.y = -50; fallingNumber.speed = 1 + difficulty * 0.5; fallingNumber.setEquation(equationData.equation, equationData.answer); fallingNumbers.push(fallingNumber); game.addChild(fallingNumber); currentEquation = fallingNumber; currentAnswers = generateAnswers(equationData.answer); // Update answer buttons for (var i = 0; i < 4; i++) { answerButtons[i].setAnswer(currentAnswers[i]); answerButtons[i].isCorrect = currentAnswers[i] === equationData.answer; } } function checkAnswer(selectedAnswer) { if (!currentEquation || currentEquation.answered) return; currentEquation.answered = true; if (selectedAnswer === currentEquation.correctAnswer) { // Correct answer LK.getSound('correct').play(); score += 10 * difficulty; LK.setScore(score); scoreTxt.setText('Score: ' + score); // Flash correct button for (var i = 0; i < answerButtons.length; i++) { if (answerButtons[i].answer === selectedAnswer) { answerButtons[i].flashCorrect(); break; } } // Remove the number var index = fallingNumbers.indexOf(currentEquation); if (index !== -1) { fallingNumbers.splice(index, 1); currentEquation.destroy(); } LK.effects.flashObject(currentEquation, 0x00FF00, 300); } else { // Wrong answer LK.getSound('wrong').play(); health -= 10; // Flash wrong button for (var i = 0; i < answerButtons.length; i++) { if (answerButtons[i].answer === selectedAnswer) { answerButtons[i].flashWrong(); break; } } LK.effects.flashScreen(0xFF0000, 500); } updateHealthBar(); currentEquation = null; } function updateHealthBar() { var healthPercent = health / maxHealth; healthBar.width = 300 * healthPercent; if (health <= 0) { LK.showGameOver(); } } function increaseDifficulty() { if (score > 0 && score % 100 === 0) { difficulty = Math.min(4, Math.floor(score / 100) + 1); numberSpawnRate = Math.max(60, 180 - difficulty * 30); } } game.update = function () { nextNumberTimer++; // Spawn new numbers if (nextNumberTimer >= numberSpawnRate && !currentEquation) { spawnFallingNumber(); nextNumberTimer = 0; } // Update falling numbers for (var i = fallingNumbers.length - 1; i >= 0; i--) { var number = fallingNumbers[i]; if (number.lastY === undefined) number.lastY = number.y; // Check if number reached the base if (number.lastY < base.y - 50 && number.y >= base.y - 50 && !number.answered) { LK.getSound('hit').play(); health -= 15; updateHealthBar(); fallingNumbers.splice(i, 1); number.destroy(); if (number === currentEquation) { currentEquation = null; } LK.effects.flashScreen(0xFF4500, 400); } // Remove numbers that are off screen if (number.y > 2732 + 100) { fallingNumbers.splice(i, 1); number.destroy(); if (number === currentEquation) { currentEquation = null; } } number.lastY = number.y; } increaseDifficulty(); };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,312 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var AnswerButton = Container.expand(function () {
+ var self = Container.call(this);
+ var buttonGraphics = self.attachAsset('answerButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.answer = 0;
+ self.isCorrect = false;
+ self.answerText = new Text2('', {
+ size: 32,
+ fill: 0x000000
+ });
+ self.answerText.anchor.set(0.5, 0.5);
+ self.addChild(self.answerText);
+ self.setAnswer = function (answer) {
+ self.answer = answer;
+ self.answerText.setText(answer.toString());
+ };
+ self.flashCorrect = function () {
+ var correctGraphics = self.attachAsset('correctButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ tween(correctGraphics, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ if (correctGraphics.parent) {
+ correctGraphics.parent.removeChild(correctGraphics);
+ }
+ }
+ });
+ };
+ self.flashWrong = function () {
+ var wrongGraphics = self.attachAsset('wrongButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ tween(wrongGraphics, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ if (wrongGraphics.parent) {
+ wrongGraphics.parent.removeChild(wrongGraphics);
+ }
+ }
+ });
+ };
+ self.down = function (x, y, obj) {
+ checkAnswer(self.answer);
+ };
+ return self;
+});
+var FallingNumber = Container.expand(function () {
+ var self = Container.call(this);
+ var numberGraphics = self.attachAsset('fallingNumber', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.equation = "";
+ self.correctAnswer = 0;
+ self.answered = false;
+ self.equationText = new Text2('', {
+ size: 24,
+ fill: 0xFFFFFF
+ });
+ self.equationText.anchor.set(0.5, 0.5);
+ self.addChild(self.equationText);
+ self.setEquation = function (equation, answer) {
+ self.equation = equation;
+ self.correctAnswer = answer;
+ self.equationText.setText(equation);
+ };
+ self.destroy = function () {
+ if (self.parent) {
+ self.parent.removeChild(self);
+ }
+ };
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+var fallingNumbers = [];
+var answerButtons = [];
+var currentEquation = null;
+var currentAnswers = [];
+var score = 0;
+var health = 100;
+var maxHealth = 100;
+var difficulty = 1;
+var gameSpeed = 1;
+var nextNumberTimer = 0;
+var numberSpawnRate = 180; // frames between spawns
+// Create base
+var base = game.addChild(LK.getAsset('base', {
+ anchorX: 0.5,
+ anchorY: 0.5
+}));
+base.x = 2048 / 2;
+base.y = 2732 - 60;
+// Create health bar background
+var healthBarBg = LK.getAsset('healthBar', {
+ anchorX: 0,
+ anchorY: 0,
+ color: 0x333333
+});
+healthBarBg.x = 50;
+healthBarBg.y = 50;
+LK.gui.topLeft.addChild(healthBarBg);
+// Create health bar
+var healthBar = LK.getAsset('healthBar', {
+ anchorX: 0,
+ anchorY: 0
+});
+healthBar.x = 50;
+healthBar.y = 50;
+LK.gui.topLeft.addChild(healthBar);
+// Create score text
+var scoreTxt = new Text2('Score: 0', {
+ size: 48,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Create answer buttons
+for (var i = 0; i < 4; i++) {
+ var button = new AnswerButton();
+ button.x = 400 + i * 300;
+ button.y = 2732 - 150;
+ answerButtons.push(button);
+ game.addChild(button);
+}
+// Math operations
+var operations = ['+', '-', '*', '/'];
+function generateEquation() {
+ var operation = operations[Math.floor(Math.random() * Math.min(difficulty, operations.length))];
+ var num1, num2, answer;
+ switch (operation) {
+ case '+':
+ num1 = Math.floor(Math.random() * 20) + 1;
+ num2 = Math.floor(Math.random() * 20) + 1;
+ answer = num1 + num2;
+ break;
+ case '-':
+ num1 = Math.floor(Math.random() * 20) + 10;
+ num2 = Math.floor(Math.random() * num1) + 1;
+ answer = num1 - num2;
+ break;
+ case '*':
+ num1 = Math.floor(Math.random() * 10) + 1;
+ num2 = Math.floor(Math.random() * 10) + 1;
+ answer = num1 * num2;
+ break;
+ case '/':
+ answer = Math.floor(Math.random() * 10) + 1;
+ num2 = Math.floor(Math.random() * 5) + 1;
+ num1 = answer * num2;
+ break;
+ }
+ return {
+ equation: num1 + ' ' + operation + ' ' + num2 + ' = ?',
+ answer: answer
+ };
+}
+function generateAnswers(correctAnswer) {
+ var answers = [correctAnswer];
+ var wrongAnswers = [];
+ // Generate 3 wrong answers
+ for (var i = 0; i < 3; i++) {
+ var wrongAnswer;
+ do {
+ wrongAnswer = correctAnswer + Math.floor(Math.random() * 20) - 10;
+ } while (wrongAnswer === correctAnswer || wrongAnswers.indexOf(wrongAnswer) !== -1 || wrongAnswer < 0);
+ wrongAnswers.push(wrongAnswer);
+ }
+ answers = answers.concat(wrongAnswers);
+ // Shuffle answers
+ for (var i = answers.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = answers[i];
+ answers[i] = answers[j];
+ answers[j] = temp;
+ }
+ return answers;
+}
+function spawnFallingNumber() {
+ var equationData = generateEquation();
+ var fallingNumber = new FallingNumber();
+ fallingNumber.x = Math.random() * (2048 - 200) + 100;
+ fallingNumber.y = -50;
+ fallingNumber.speed = 1 + difficulty * 0.5;
+ fallingNumber.setEquation(equationData.equation, equationData.answer);
+ fallingNumbers.push(fallingNumber);
+ game.addChild(fallingNumber);
+ currentEquation = fallingNumber;
+ currentAnswers = generateAnswers(equationData.answer);
+ // Update answer buttons
+ for (var i = 0; i < 4; i++) {
+ answerButtons[i].setAnswer(currentAnswers[i]);
+ answerButtons[i].isCorrect = currentAnswers[i] === equationData.answer;
+ }
+}
+function checkAnswer(selectedAnswer) {
+ if (!currentEquation || currentEquation.answered) return;
+ currentEquation.answered = true;
+ if (selectedAnswer === currentEquation.correctAnswer) {
+ // Correct answer
+ LK.getSound('correct').play();
+ score += 10 * difficulty;
+ LK.setScore(score);
+ scoreTxt.setText('Score: ' + score);
+ // Flash correct button
+ for (var i = 0; i < answerButtons.length; i++) {
+ if (answerButtons[i].answer === selectedAnswer) {
+ answerButtons[i].flashCorrect();
+ break;
+ }
+ }
+ // Remove the number
+ var index = fallingNumbers.indexOf(currentEquation);
+ if (index !== -1) {
+ fallingNumbers.splice(index, 1);
+ currentEquation.destroy();
+ }
+ LK.effects.flashObject(currentEquation, 0x00FF00, 300);
+ } else {
+ // Wrong answer
+ LK.getSound('wrong').play();
+ health -= 10;
+ // Flash wrong button
+ for (var i = 0; i < answerButtons.length; i++) {
+ if (answerButtons[i].answer === selectedAnswer) {
+ answerButtons[i].flashWrong();
+ break;
+ }
+ }
+ LK.effects.flashScreen(0xFF0000, 500);
+ }
+ updateHealthBar();
+ currentEquation = null;
+}
+function updateHealthBar() {
+ var healthPercent = health / maxHealth;
+ healthBar.width = 300 * healthPercent;
+ if (health <= 0) {
+ LK.showGameOver();
+ }
+}
+function increaseDifficulty() {
+ if (score > 0 && score % 100 === 0) {
+ difficulty = Math.min(4, Math.floor(score / 100) + 1);
+ numberSpawnRate = Math.max(60, 180 - difficulty * 30);
+ }
+}
+game.update = function () {
+ nextNumberTimer++;
+ // Spawn new numbers
+ if (nextNumberTimer >= numberSpawnRate && !currentEquation) {
+ spawnFallingNumber();
+ nextNumberTimer = 0;
+ }
+ // Update falling numbers
+ for (var i = fallingNumbers.length - 1; i >= 0; i--) {
+ var number = fallingNumbers[i];
+ if (number.lastY === undefined) number.lastY = number.y;
+ // Check if number reached the base
+ if (number.lastY < base.y - 50 && number.y >= base.y - 50 && !number.answered) {
+ LK.getSound('hit').play();
+ health -= 15;
+ updateHealthBar();
+ fallingNumbers.splice(i, 1);
+ number.destroy();
+ if (number === currentEquation) {
+ currentEquation = null;
+ }
+ LK.effects.flashScreen(0xFF4500, 400);
+ }
+ // Remove numbers that are off screen
+ if (number.y > 2732 + 100) {
+ fallingNumbers.splice(i, 1);
+ number.destroy();
+ if (number === currentEquation) {
+ currentEquation = null;
+ }
+ }
+ number.lastY = number.y;
+ }
+ increaseDifficulty();
+};
\ No newline at end of file