/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var NumberDisplay = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('numberDisplay', { anchorX: 0.5, anchorY: 0.5 }); var numberText = new Text2('?', { size: 80, fill: 0xFFFFFF }); numberText.anchor.set(0.5, 0.5); self.addChild(numberText); self.currentNumber = 0; self.generateNumber = function () { self.currentNumber = Math.floor(Math.random() * 100) + 1; numberText.setText(self.currentNumber.toString()); // Enhanced pulse with color flash tween(self, { scaleX: 1.3, scaleY: 1.3 }, { duration: 200, easing: tween.easeOut }); tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 300, easing: tween.bounceOut }); // Color flash effect tween(bg, { tint: 0xffffff }, { duration: 100, easing: tween.easeOut }); tween(bg, { tint: 0x4a90e2 }, { duration: 200, easing: tween.easeIn }); }; return self; }); var StreakDisplay = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('streakBg', { anchorX: 0.5, anchorY: 0.5 }); var streakText = new Text2('Streak: 0', { size: 30, fill: 0x000000 }); streakText.anchor.set(0.5, 0.5); self.addChild(streakText); self.currentStreak = 0; self.updateStreak = function (streak) { self.currentStreak = streak; streakText.setText('Streak: ' + streak); if (streak > 0) { // Flash animation for streak tween(bg, { tint: 0xffffff }, { duration: 200 }); tween(bg, { tint: 0xffd700 }, { duration: 200 }); } }; return self; }); var TargetPattern = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('targetPattern', { anchorX: 0.5, anchorY: 0.5 }); var patternText = new Text2('Target: 50-60', { size: 40, fill: 0xFFFFFF }); patternText.anchor.set(0.5, 0.5); self.addChild(patternText); self.targetMin = 50; self.targetMax = 60; self.points = 10; self.generatePattern = function (difficulty) { // Slide out animation tween(self, { scaleX: 0.8, scaleY: 0.8, alpha: 0.5 }, { duration: 150, easing: tween.easeIn, onFinish: function onFinish() { var patternType = Math.floor(Math.random() * 3); if (patternType === 0) { // Range pattern var center = Math.floor(Math.random() * 80) + 10; var range = Math.max(5, 20 - difficulty * 2); self.targetMin = center - Math.floor(range / 2); self.targetMax = center + Math.floor(range / 2); patternText.setText('Target: ' + self.targetMin + '-' + self.targetMax); self.points = 10 + difficulty * 2; } else if (patternType === 1) { // Even/Odd pattern var isEven = Math.random() < 0.5; self.targetMin = isEven ? 2 : 1; self.targetMax = isEven ? 100 : 99; patternText.setText(isEven ? 'Target: EVEN' : 'Target: ODD'); self.points = 5 + difficulty; } else { // Divisible pattern var divisor = [3, 5, 7, 11][Math.floor(Math.random() * 4)]; self.targetMin = divisor; self.targetMax = divisor; patternText.setText('Target: ÷' + divisor); self.points = 15 + difficulty * 3; } // Slide in animation tween(self, { scaleX: 1.0, scaleY: 1.0, alpha: 1.0 }, { duration: 300, easing: tween.bounceOut }); } }); }; self.checkMatch = function (number) { if (self.targetMin === self.targetMax) { // Divisible pattern return number % self.targetMin === 0; } else if (self.targetMin === 1 || self.targetMin === 2) { // Even/Odd pattern return number % 2 === 0 && self.targetMin === 2 || number % 2 === 1 && self.targetMin === 1; } else { // Range pattern return number >= self.targetMin && number <= self.targetMax; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ // Game state variables var gameTime = 60000; // 60 seconds var timeRemaining = gameTime; var difficulty = 1; var currentStreak = 0; var multiplier = 1; var gameActive = true; // UI Elements var scoreTxt = new Text2('0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); scoreTxt.alpha = 0; scoreTxt.y = -50; LK.gui.top.addChild(scoreTxt); // Animate score entrance tween(scoreTxt, { alpha: 1, y: 0 }, { duration: 600, easing: tween.bounceOut }); var timeTxt = new Text2('60', { size: 50, fill: 0xFF6B6B }); timeTxt.anchor.set(1, 0); timeTxt.x = -20; timeTxt.y = 20; timeTxt.alpha = 0; timeTxt.scaleX = 0; timeTxt.scaleY = 0; LK.gui.topRight.addChild(timeTxt); // Animate timer entrance LK.setTimeout(function () { tween(timeTxt, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 500, easing: tween.bounceOut }); }, 200); var difficultyTxt = new Text2('Level 1', { size: 40, fill: 0x4ECDC4 }); difficultyTxt.anchor.set(0, 0); difficultyTxt.x = 20; difficultyTxt.y = 20; difficultyTxt.alpha = 0; difficultyTxt.x = -100; LK.gui.topLeft.addChild(difficultyTxt); // Animate difficulty entrance LK.setTimeout(function () { tween(difficultyTxt, { alpha: 1, x: 20 }, { duration: 700, easing: tween.easeOut }); }, 400); // Game objects var tapArea = game.attachAsset('tapArea', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, alpha: 0 }); // Fade in tap area tween(tapArea, { alpha: 0.1 }, { duration: 1000, easing: tween.easeIn }); var numberDisplay = game.addChild(new NumberDisplay()); numberDisplay.x = 1024; numberDisplay.y = 800; numberDisplay.alpha = 0; numberDisplay.scaleX = 0.3; numberDisplay.scaleY = 0.3; // Animate number display entrance LK.setTimeout(function () { tween(numberDisplay, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.bounceOut }); }, 600); var targetPattern = game.addChild(new TargetPattern()); targetPattern.x = 1024; targetPattern.y = 400; targetPattern.alpha = 0; targetPattern.y = 300; // Animate target pattern entrance LK.setTimeout(function () { tween(targetPattern, { alpha: 1, y: 400 }, { duration: 600, easing: tween.easeOut }); }, 800); var streakDisplay = game.addChild(new StreakDisplay()); streakDisplay.x = 1024; streakDisplay.y = 1200; streakDisplay.alpha = 0; streakDisplay.y = 1300; // Animate streak display entrance LK.setTimeout(function () { tween(streakDisplay, { alpha: 1, y: 1200 }, { duration: 500, easing: tween.easeOut }); }, 1000); // Initialize first pattern after animations LK.setTimeout(function () { targetPattern.generatePattern(difficulty); }, 1200); // Instructions var instructionText = new Text2('TAP TO GENERATE NUMBERS!', { size: 50, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 600; instructionText.alpha = 0; game.addChild(instructionText); // Entrance animation for instructions tween(instructionText, { alpha: 1, y: 580 }, { duration: 800, easing: tween.bounceOut }); // Floating animation var _floatInstructions = function floatInstructions() { tween(instructionText, { y: 620 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(instructionText, { y: 580 }, { duration: 2000, easing: tween.easeInOut, onFinish: _floatInstructions }); } }); }; LK.setTimeout(_floatInstructions, 800); // Fade out instructions after 3 seconds LK.setTimeout(function () { tween(instructionText, { alpha: 0, y: 550 }, { duration: 1000, easing: tween.easeIn }); }, 3000); // Game timer var gameTimer = LK.setInterval(function () { if (!gameActive) return; timeRemaining -= 100; var seconds = Math.ceil(timeRemaining / 1000); timeTxt.setText(seconds.toString()); if (timeRemaining <= 0) { gameActive = false; LK.clearInterval(gameTimer); if (LK.getScore() >= 500) { LK.showYouWin(); } else { LK.showGameOver(); } } }, 100); // Difficulty progression var difficultyTimer = LK.setInterval(function () { if (!gameActive) return; difficulty = Math.min(10, Math.floor((gameTime - timeRemaining) / 10000) + 1); difficultyTxt.setText('Level ' + difficulty); // Generate new pattern every 5 seconds if ((gameTime - timeRemaining) % 5000 < 100) { targetPattern.generatePattern(difficulty); } }, 100); // Touch handling game.down = function (x, y, obj) { if (!gameActive) return; numberDisplay.generateNumber(); LK.getSound('numberGenerate').play(); // Check for match if (targetPattern.checkMatch(numberDisplay.currentNumber)) { // Match found! currentStreak++; multiplier = Math.min(5, 1 + Math.floor(currentStreak / 3)); var points = targetPattern.points * multiplier; LK.setScore(LK.getScore() + points); scoreTxt.setText(LK.getScore().toString()); // Animate score update tween(scoreTxt, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(scoreTxt, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.bounceOut }); } }); streakDisplay.updateStreak(currentStreak); // Visual feedback LK.effects.flashObject(targetPattern, 0x00ff00, 500); if (currentStreak > 1) { LK.getSound('streak').play(); } else { LK.getSound('match').play(); } // Generate new pattern targetPattern.generatePattern(difficulty); } else { // No match, reset streak if (currentStreak > 0) { currentStreak = 0; multiplier = 1; streakDisplay.updateStreak(currentStreak); // Flash red for missed match LK.effects.flashObject(numberDisplay, 0xff0000, 300); } } }; // Multiplier display var multiplierTxt = new Text2('x1', { size: 40, fill: 0xFFD700 }); multiplierTxt.anchor.set(0.5, 1); multiplierTxt.alpha = 0; multiplierTxt.y = 50; LK.gui.bottom.addChild(multiplierTxt); // Animate multiplier entrance LK.setTimeout(function () { tween(multiplierTxt, { alpha: 1, y: 0 }, { duration: 500, easing: tween.bounceOut }); }, 1200); game.update = function () { if (!gameActive) return; // Update multiplier display multiplierTxt.setText('x' + multiplier); // Pulse multiplier when active if (multiplier > 1) { var pulse = Math.sin(LK.ticks * 0.1) * 0.1 + 1; multiplierTxt.scaleX = pulse; multiplierTxt.scaleY = pulse; } else { multiplierTxt.scaleX = 1; multiplierTxt.scaleY = 1; } // Time warning effect if (timeRemaining < 10000) { var flash = Math.sin(LK.ticks * 0.3) * 0.3 + 0.7; timeTxt.alpha = flash; } };
===================================================================
--- original.js
+++ change.js
@@ -21,21 +21,34 @@
self.currentNumber = 0;
self.generateNumber = function () {
self.currentNumber = Math.floor(Math.random() * 100) + 1;
numberText.setText(self.currentNumber.toString());
- // Pulse animation
+ // Enhanced pulse with color flash
tween(self, {
- scaleX: 1.2,
- scaleY: 1.2
+ scaleX: 1.3,
+ scaleY: 1.3
}, {
- duration: 150,
+ duration: 200,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
- duration: 150,
+ duration: 300,
+ easing: tween.bounceOut
+ });
+ // Color flash effect
+ tween(bg, {
+ tint: 0xffffff
+ }, {
+ duration: 100,
+ easing: tween.easeOut
+ });
+ tween(bg, {
+ tint: 0x4a90e2
+ }, {
+ duration: 200,
easing: tween.easeIn
});
};
return self;
@@ -87,32 +100,52 @@
self.targetMin = 50;
self.targetMax = 60;
self.points = 10;
self.generatePattern = function (difficulty) {
- var patternType = Math.floor(Math.random() * 3);
- if (patternType === 0) {
- // Range pattern
- var center = Math.floor(Math.random() * 80) + 10;
- var range = Math.max(5, 20 - difficulty * 2);
- self.targetMin = center - Math.floor(range / 2);
- self.targetMax = center + Math.floor(range / 2);
- patternText.setText('Target: ' + self.targetMin + '-' + self.targetMax);
- self.points = 10 + difficulty * 2;
- } else if (patternType === 1) {
- // Even/Odd pattern
- var isEven = Math.random() < 0.5;
- self.targetMin = isEven ? 2 : 1;
- self.targetMax = isEven ? 100 : 99;
- patternText.setText(isEven ? 'Target: EVEN' : 'Target: ODD');
- self.points = 5 + difficulty;
- } else {
- // Divisible pattern
- var divisor = [3, 5, 7, 11][Math.floor(Math.random() * 4)];
- self.targetMin = divisor;
- self.targetMax = divisor;
- patternText.setText('Target: ÷' + divisor);
- self.points = 15 + difficulty * 3;
- }
+ // Slide out animation
+ tween(self, {
+ scaleX: 0.8,
+ scaleY: 0.8,
+ alpha: 0.5
+ }, {
+ duration: 150,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ var patternType = Math.floor(Math.random() * 3);
+ if (patternType === 0) {
+ // Range pattern
+ var center = Math.floor(Math.random() * 80) + 10;
+ var range = Math.max(5, 20 - difficulty * 2);
+ self.targetMin = center - Math.floor(range / 2);
+ self.targetMax = center + Math.floor(range / 2);
+ patternText.setText('Target: ' + self.targetMin + '-' + self.targetMax);
+ self.points = 10 + difficulty * 2;
+ } else if (patternType === 1) {
+ // Even/Odd pattern
+ var isEven = Math.random() < 0.5;
+ self.targetMin = isEven ? 2 : 1;
+ self.targetMax = isEven ? 100 : 99;
+ patternText.setText(isEven ? 'Target: EVEN' : 'Target: ODD');
+ self.points = 5 + difficulty;
+ } else {
+ // Divisible pattern
+ var divisor = [3, 5, 7, 11][Math.floor(Math.random() * 4)];
+ self.targetMin = divisor;
+ self.targetMax = divisor;
+ patternText.setText('Target: ÷' + divisor);
+ self.points = 15 + difficulty * 3;
+ }
+ // Slide in animation
+ tween(self, {
+ scaleX: 1.0,
+ scaleY: 1.0,
+ alpha: 1.0
+ }, {
+ duration: 300,
+ easing: tween.bounceOut
+ });
+ }
+ });
};
self.checkMatch = function (number) {
if (self.targetMin === self.targetMax) {
// Divisible pattern
@@ -150,59 +183,172 @@
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
+scoreTxt.alpha = 0;
+scoreTxt.y = -50;
LK.gui.top.addChild(scoreTxt);
+// Animate score entrance
+tween(scoreTxt, {
+ alpha: 1,
+ y: 0
+}, {
+ duration: 600,
+ easing: tween.bounceOut
+});
var timeTxt = new Text2('60', {
size: 50,
fill: 0xFF6B6B
});
timeTxt.anchor.set(1, 0);
timeTxt.x = -20;
timeTxt.y = 20;
+timeTxt.alpha = 0;
+timeTxt.scaleX = 0;
+timeTxt.scaleY = 0;
LK.gui.topRight.addChild(timeTxt);
+// Animate timer entrance
+LK.setTimeout(function () {
+ tween(timeTxt, {
+ alpha: 1,
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 500,
+ easing: tween.bounceOut
+ });
+}, 200);
var difficultyTxt = new Text2('Level 1', {
size: 40,
fill: 0x4ECDC4
});
difficultyTxt.anchor.set(0, 0);
difficultyTxt.x = 20;
difficultyTxt.y = 20;
+difficultyTxt.alpha = 0;
+difficultyTxt.x = -100;
LK.gui.topLeft.addChild(difficultyTxt);
+// Animate difficulty entrance
+LK.setTimeout(function () {
+ tween(difficultyTxt, {
+ alpha: 1,
+ x: 20
+ }, {
+ duration: 700,
+ easing: tween.easeOut
+ });
+}, 400);
// Game objects
var tapArea = game.attachAsset('tapArea', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
+ alpha: 0
+});
+// Fade in tap area
+tween(tapArea, {
alpha: 0.1
+}, {
+ duration: 1000,
+ easing: tween.easeIn
});
var numberDisplay = game.addChild(new NumberDisplay());
numberDisplay.x = 1024;
numberDisplay.y = 800;
+numberDisplay.alpha = 0;
+numberDisplay.scaleX = 0.3;
+numberDisplay.scaleY = 0.3;
+// Animate number display entrance
+LK.setTimeout(function () {
+ tween(numberDisplay, {
+ alpha: 1,
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 800,
+ easing: tween.bounceOut
+ });
+}, 600);
var targetPattern = game.addChild(new TargetPattern());
targetPattern.x = 1024;
targetPattern.y = 400;
+targetPattern.alpha = 0;
+targetPattern.y = 300;
+// Animate target pattern entrance
+LK.setTimeout(function () {
+ tween(targetPattern, {
+ alpha: 1,
+ y: 400
+ }, {
+ duration: 600,
+ easing: tween.easeOut
+ });
+}, 800);
var streakDisplay = game.addChild(new StreakDisplay());
streakDisplay.x = 1024;
streakDisplay.y = 1200;
-// Initialize first pattern
-targetPattern.generatePattern(difficulty);
+streakDisplay.alpha = 0;
+streakDisplay.y = 1300;
+// Animate streak display entrance
+LK.setTimeout(function () {
+ tween(streakDisplay, {
+ alpha: 1,
+ y: 1200
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+}, 1000);
+// Initialize first pattern after animations
+LK.setTimeout(function () {
+ targetPattern.generatePattern(difficulty);
+}, 1200);
// Instructions
var instructionText = new Text2('TAP TO GENERATE NUMBERS!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 600;
+instructionText.alpha = 0;
game.addChild(instructionText);
+// Entrance animation for instructions
+tween(instructionText, {
+ alpha: 1,
+ y: 580
+}, {
+ duration: 800,
+ easing: tween.bounceOut
+});
+// Floating animation
+var _floatInstructions = function floatInstructions() {
+ tween(instructionText, {
+ y: 620
+ }, {
+ duration: 2000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(instructionText, {
+ y: 580
+ }, {
+ duration: 2000,
+ easing: tween.easeInOut,
+ onFinish: _floatInstructions
+ });
+ }
+ });
+};
+LK.setTimeout(_floatInstructions, 800);
// Fade out instructions after 3 seconds
LK.setTimeout(function () {
tween(instructionText, {
- alpha: 0
+ alpha: 0,
+ y: 550
}, {
- duration: 1000
+ duration: 1000,
+ easing: tween.easeIn
});
}, 3000);
// Game timer
var gameTimer = LK.setInterval(function () {
@@ -242,8 +388,25 @@
multiplier = Math.min(5, 1 + Math.floor(currentStreak / 3));
var points = targetPattern.points * multiplier;
LK.setScore(LK.getScore() + points);
scoreTxt.setText(LK.getScore().toString());
+ // Animate score update
+ tween(scoreTxt, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(scoreTxt, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.bounceOut
+ });
+ }
+ });
streakDisplay.updateStreak(currentStreak);
// Visual feedback
LK.effects.flashObject(targetPattern, 0x00ff00, 500);
if (currentStreak > 1) {
@@ -269,9 +432,21 @@
size: 40,
fill: 0xFFD700
});
multiplierTxt.anchor.set(0.5, 1);
+multiplierTxt.alpha = 0;
+multiplierTxt.y = 50;
LK.gui.bottom.addChild(multiplierTxt);
+// Animate multiplier entrance
+LK.setTimeout(function () {
+ tween(multiplierTxt, {
+ alpha: 1,
+ y: 0
+ }, {
+ duration: 500,
+ easing: tween.bounceOut
+ });
+}, 1200);
game.update = function () {
if (!gameActive) return;
// Update multiplier display
multiplierTxt.setText('x' + multiplier);