Code edit (1 edits merged)
Please save this source code
User prompt
Christmas Tree Decorator
Initial prompt
Toca tree maker 🌲 (2017). Tap on ginger 🐱 to collect pink baubles with her hands 10 times, tap on the gold tinsel to make it sparkle ✨ 10 times, tap on the rose gold snowglobe baubles to make them shake 10 times. Till stars falling 10 times
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var FallingStar = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.speed = Math.random() * 3 + 2; self.rotationSpeed = (Math.random() - 0.5) * 0.2; self.update = function () { self.y += self.speed; graphics.rotation += self.rotationSpeed; if (self.y > 2732 + 50) { self.destroy(); var index = fallingStars.indexOf(self); if (index > -1) { fallingStars.splice(index, 1); } } }; return self; }); var GingerCharacter = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('gingerCharacter', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (gingerTaps < 10) { gingerTaps++; updateProgress(); // Animate hand movement tween(graphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(graphics, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn }); } }); LK.getSound('decorateSound').play(); if (gingerTaps === 10) { LK.getSound('completeSound').play(); } } }; return self; }); var GoldTinsel = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('goldTinsel', { anchorX: 0.5, anchorY: 0.5 }); self.sparkled = false; self.down = function (x, y, obj) { if (!self.sparkled && goldTinselTaps < 10) { self.sparkled = true; goldTinselTaps++; updateProgress(); // Create sparkle effect createSparkleEffect(self.x, self.y); // Flash tinsel tween(graphics, { tint: 0xffffff }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(graphics, { tint: 0xffd700 }, { duration: 300, easing: tween.easeIn }); } }); LK.getSound('decorateSound').play(); if (goldTinselTaps === 10) { LK.getSound('completeSound').play(); } } }; return self; }); var PinkBauble = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('pinkBauble', { anchorX: 0.5, anchorY: 0.5 }); self.collected = false; self.down = function (x, y, obj) { if (!self.collected && pinkBaubleCollections < 10) { self.collected = true; pinkBaubleCollections++; updateProgress(); // Animate collection tween(graphics, { scaleX: 0, scaleY: 0, alpha: 0 }, { duration: 500, easing: tween.easeOut }); LK.getSound('decorateSound').play(); if (pinkBaubleCollections === 10) { LK.getSound('completeSound').play(); } } }; return self; }); var RoseGoldSnowglobe = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('roseGoldSnowglobe', { anchorX: 0.5, anchorY: 0.5 }); self.shaken = false; self.down = function (x, y, obj) { if (!self.shaken && roseGoldTaps < 10) { self.shaken = true; roseGoldTaps++; updateProgress(); // Shake animation var originalX = self.x; tween(self, { x: originalX - 10 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { x: originalX + 10 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { x: originalX }, { duration: 100, easing: tween.easeOut }); } }); } }); // Shimmer effect tween(graphics, { alpha: 0.5 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(graphics, { alpha: 1 }, { duration: 300, easing: tween.easeIn }); } }); LK.getSound('decorateSound').play(); if (roseGoldTaps === 10) { LK.getSound('completeSound').play(); } } }; return self; }); var SparkleParticle = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('sparkleParticle', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = { x: (Math.random() - 0.5) * 4, y: (Math.random() - 0.5) * 4 }; self.life = 60; self.update = function () { self.x += self.velocity.x; self.y += self.velocity.y; self.life--; graphics.alpha = self.life / 60; if (self.life <= 0) { self.destroy(); var index = sparkleParticles.indexOf(self); if (index > -1) { sparkleParticles.splice(index, 1); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x001122 }); /**** * Game Code ****/ // Game state variables var pinkBaubleCollections = 0; var gingerTaps = 0; var goldTinselTaps = 0; var roseGoldTaps = 0; var starTaps = 0; var pinkBaubles = []; var goldTinsels = []; var roseGoldSnowglobes = []; var fallingStars = []; var sparkleParticles = []; // Create Christmas tree var tree = game.addChild(LK.getAsset('christmasTree', { anchorX: 0.5, anchorY: 1 })); tree.x = 2048 / 2; tree.y = 2732 - 200; // Create ginger character var gingerChar = game.addChild(new GingerCharacter()); gingerChar.x = 2048 / 2 - 200; gingerChar.y = 2732 - 400; // Create pink baubles for (var i = 0; i < 6; i++) { var bauble = game.addChild(new PinkBauble()); bauble.x = 2048 / 2 + (Math.random() - 0.5) * 300; bauble.y = 2732 - 600 + Math.random() * 200; pinkBaubles.push(bauble); } // Create gold tinsel for (var i = 0; i < 4; i++) { var tinsel = game.addChild(new GoldTinsel()); tinsel.x = 2048 / 2 + (Math.random() - 0.5) * 250; tinsel.y = 2732 - 500 + i * 80; goldTinsels.push(tinsel); } // Create rose gold snowglobes for (var i = 0; i < 5; i++) { var snowglobe = game.addChild(new RoseGoldSnowglobe()); snowglobe.x = 2048 / 2 + (Math.random() - 0.5) * 280; snowglobe.y = 2732 - 550 + Math.random() * 150; roseGoldSnowglobes.push(snowglobe); } // UI Elements var progressText = new Text2('Progress: 0/40', { size: 60, fill: 0xFFFFFF }); progressText.anchor.set(0.5, 0); LK.gui.top.addChild(progressText); progressText.y = 100; var taskText = new Text2('Pink: 0/10 Ginger: 0/10 Gold: 0/10 Rose: 0/10 Stars: 0/10', { size: 40, fill: 0xFFFFFF }); taskText.anchor.set(0.5, 0); LK.gui.top.addChild(taskText); taskText.y = 180; function updateProgress() { var totalProgress = pinkBaubleCollections + gingerTaps + goldTinselTaps + roseGoldTaps + starTaps; progressText.setText('Progress: ' + totalProgress + '/50'); taskText.setText('Pink: ' + pinkBaubleCollections + '/10 Ginger: ' + gingerTaps + '/10 Gold: ' + goldTinselTaps + '/10 Rose: ' + roseGoldTaps + '/10 Stars: ' + starTaps + '/10'); // Check for victory if (totalProgress >= 50) { LK.showYouWin(); } } function createSparkleEffect(x, y) { for (var i = 0; i < 8; i++) { var particle = game.addChild(new SparkleParticle()); particle.x = x; particle.y = y; sparkleParticles.push(particle); } } function createFallingStar() { var star = game.addChild(new FallingStar()); star.x = Math.random() * 2048; star.y = -50; fallingStars.push(star); } // Star tap area (invisible tap zone) game.down = function (x, y, obj) { if (starTaps < 10) { starTaps++; updateProgress(); // Create falling stars createFallingStar(); createFallingStar(); LK.getSound('decorateSound').play(); if (starTaps === 10) { LK.getSound('completeSound').play(); } } }; game.update = function () { // Reset sparkled and shaken states periodically if (LK.ticks % 180 === 0) { for (var i = 0; i < goldTinsels.length; i++) { goldTinsels[i].sparkled = false; } for (var i = 0; i < roseGoldSnowglobes.length; i++) { roseGoldSnowglobes[i].shaken = false; } } // Reset collected state for pink baubles if (LK.ticks % 300 === 0) { for (var i = 0; i < pinkBaubles.length; i++) { if (pinkBaubles[i].collected) { pinkBaubles[i].collected = false; var graphics = pinkBaubles[i].children[0]; graphics.scaleX = 1; graphics.scaleY = 1; graphics.alpha = 1; } } } }; // Initialize progress display updateProgress();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,346 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var FallingStar = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('star', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = Math.random() * 3 + 2;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.2;
+ self.update = function () {
+ self.y += self.speed;
+ graphics.rotation += self.rotationSpeed;
+ if (self.y > 2732 + 50) {
+ self.destroy();
+ var index = fallingStars.indexOf(self);
+ if (index > -1) {
+ fallingStars.splice(index, 1);
+ }
+ }
+ };
+ return self;
+});
+var GingerCharacter = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('gingerCharacter', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.down = function (x, y, obj) {
+ if (gingerTaps < 10) {
+ gingerTaps++;
+ updateProgress();
+ // Animate hand movement
+ tween(graphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(graphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeIn
+ });
+ }
+ });
+ LK.getSound('decorateSound').play();
+ if (gingerTaps === 10) {
+ LK.getSound('completeSound').play();
+ }
+ }
+ };
+ return self;
+});
+var GoldTinsel = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('goldTinsel', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.sparkled = false;
+ self.down = function (x, y, obj) {
+ if (!self.sparkled && goldTinselTaps < 10) {
+ self.sparkled = true;
+ goldTinselTaps++;
+ updateProgress();
+ // Create sparkle effect
+ createSparkleEffect(self.x, self.y);
+ // Flash tinsel
+ tween(graphics, {
+ tint: 0xffffff
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(graphics, {
+ tint: 0xffd700
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ }
+ });
+ LK.getSound('decorateSound').play();
+ if (goldTinselTaps === 10) {
+ LK.getSound('completeSound').play();
+ }
+ }
+ };
+ return self;
+});
+var PinkBauble = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('pinkBauble', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.collected = false;
+ self.down = function (x, y, obj) {
+ if (!self.collected && pinkBaubleCollections < 10) {
+ self.collected = true;
+ pinkBaubleCollections++;
+ updateProgress();
+ // Animate collection
+ tween(graphics, {
+ scaleX: 0,
+ scaleY: 0,
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ LK.getSound('decorateSound').play();
+ if (pinkBaubleCollections === 10) {
+ LK.getSound('completeSound').play();
+ }
+ }
+ };
+ return self;
+});
+var RoseGoldSnowglobe = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('roseGoldSnowglobe', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.shaken = false;
+ self.down = function (x, y, obj) {
+ if (!self.shaken && roseGoldTaps < 10) {
+ self.shaken = true;
+ roseGoldTaps++;
+ updateProgress();
+ // Shake animation
+ var originalX = self.x;
+ tween(self, {
+ x: originalX - 10
+ }, {
+ duration: 100,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX + 10
+ }, {
+ duration: 100,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX
+ }, {
+ duration: 100,
+ easing: tween.easeOut
+ });
+ }
+ });
+ }
+ });
+ // Shimmer effect
+ tween(graphics, {
+ alpha: 0.5
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(graphics, {
+ alpha: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ }
+ });
+ LK.getSound('decorateSound').play();
+ if (roseGoldTaps === 10) {
+ LK.getSound('completeSound').play();
+ }
+ }
+ };
+ return self;
+});
+var SparkleParticle = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('sparkleParticle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocity = {
+ x: (Math.random() - 0.5) * 4,
+ y: (Math.random() - 0.5) * 4
+ };
+ self.life = 60;
+ self.update = function () {
+ self.x += self.velocity.x;
+ self.y += self.velocity.y;
+ self.life--;
+ graphics.alpha = self.life / 60;
+ if (self.life <= 0) {
+ self.destroy();
+ var index = sparkleParticles.indexOf(self);
+ if (index > -1) {
+ sparkleParticles.splice(index, 1);
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x001122
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var pinkBaubleCollections = 0;
+var gingerTaps = 0;
+var goldTinselTaps = 0;
+var roseGoldTaps = 0;
+var starTaps = 0;
+var pinkBaubles = [];
+var goldTinsels = [];
+var roseGoldSnowglobes = [];
+var fallingStars = [];
+var sparkleParticles = [];
+// Create Christmas tree
+var tree = game.addChild(LK.getAsset('christmasTree', {
+ anchorX: 0.5,
+ anchorY: 1
+}));
+tree.x = 2048 / 2;
+tree.y = 2732 - 200;
+// Create ginger character
+var gingerChar = game.addChild(new GingerCharacter());
+gingerChar.x = 2048 / 2 - 200;
+gingerChar.y = 2732 - 400;
+// Create pink baubles
+for (var i = 0; i < 6; i++) {
+ var bauble = game.addChild(new PinkBauble());
+ bauble.x = 2048 / 2 + (Math.random() - 0.5) * 300;
+ bauble.y = 2732 - 600 + Math.random() * 200;
+ pinkBaubles.push(bauble);
+}
+// Create gold tinsel
+for (var i = 0; i < 4; i++) {
+ var tinsel = game.addChild(new GoldTinsel());
+ tinsel.x = 2048 / 2 + (Math.random() - 0.5) * 250;
+ tinsel.y = 2732 - 500 + i * 80;
+ goldTinsels.push(tinsel);
+}
+// Create rose gold snowglobes
+for (var i = 0; i < 5; i++) {
+ var snowglobe = game.addChild(new RoseGoldSnowglobe());
+ snowglobe.x = 2048 / 2 + (Math.random() - 0.5) * 280;
+ snowglobe.y = 2732 - 550 + Math.random() * 150;
+ roseGoldSnowglobes.push(snowglobe);
+}
+// UI Elements
+var progressText = new Text2('Progress: 0/40', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+progressText.anchor.set(0.5, 0);
+LK.gui.top.addChild(progressText);
+progressText.y = 100;
+var taskText = new Text2('Pink: 0/10 Ginger: 0/10 Gold: 0/10 Rose: 0/10 Stars: 0/10', {
+ size: 40,
+ fill: 0xFFFFFF
+});
+taskText.anchor.set(0.5, 0);
+LK.gui.top.addChild(taskText);
+taskText.y = 180;
+function updateProgress() {
+ var totalProgress = pinkBaubleCollections + gingerTaps + goldTinselTaps + roseGoldTaps + starTaps;
+ progressText.setText('Progress: ' + totalProgress + '/50');
+ taskText.setText('Pink: ' + pinkBaubleCollections + '/10 Ginger: ' + gingerTaps + '/10 Gold: ' + goldTinselTaps + '/10 Rose: ' + roseGoldTaps + '/10 Stars: ' + starTaps + '/10');
+ // Check for victory
+ if (totalProgress >= 50) {
+ LK.showYouWin();
+ }
+}
+function createSparkleEffect(x, y) {
+ for (var i = 0; i < 8; i++) {
+ var particle = game.addChild(new SparkleParticle());
+ particle.x = x;
+ particle.y = y;
+ sparkleParticles.push(particle);
+ }
+}
+function createFallingStar() {
+ var star = game.addChild(new FallingStar());
+ star.x = Math.random() * 2048;
+ star.y = -50;
+ fallingStars.push(star);
+}
+// Star tap area (invisible tap zone)
+game.down = function (x, y, obj) {
+ if (starTaps < 10) {
+ starTaps++;
+ updateProgress();
+ // Create falling stars
+ createFallingStar();
+ createFallingStar();
+ LK.getSound('decorateSound').play();
+ if (starTaps === 10) {
+ LK.getSound('completeSound').play();
+ }
+ }
+};
+game.update = function () {
+ // Reset sparkled and shaken states periodically
+ if (LK.ticks % 180 === 0) {
+ for (var i = 0; i < goldTinsels.length; i++) {
+ goldTinsels[i].sparkled = false;
+ }
+ for (var i = 0; i < roseGoldSnowglobes.length; i++) {
+ roseGoldSnowglobes[i].shaken = false;
+ }
+ }
+ // Reset collected state for pink baubles
+ if (LK.ticks % 300 === 0) {
+ for (var i = 0; i < pinkBaubles.length; i++) {
+ if (pinkBaubles[i].collected) {
+ pinkBaubles[i].collected = false;
+ var graphics = pinkBaubles[i].children[0];
+ graphics.scaleX = 1;
+ graphics.scaleY = 1;
+ graphics.alpha = 1;
+ }
+ }
+ }
+};
+// Initialize progress display
+updateProgress();
\ No newline at end of file