/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { savedEggs: [] }); /**** * Classes ****/ var BrushStroke = Container.expand(function (color, size) { var self = Container.call(this); var stroke = self.attachAsset('brushStroke', { anchorX: 0.5, anchorY: 0.5, scaleX: size / 30, scaleY: size / 30 }); stroke.tint = color; return self; }); var Button = Container.expand(function (label, color) { var self = Container.call(this); var background = self.attachAsset('buttonBg', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2(label, { size: 30, fill: 0xFFFFFF }); text.anchor.set(0.5, 0.5); self.addChild(text); if (color !== undefined) { background.tint = color; } self.down = function () { tween(background, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; self.up = function () { tween(background, { scaleX: 1, scaleY: 1 }, { duration: 100 }); }; return self; }); var ColorButton = Container.expand(function (color) { var self = Container.call(this); var button = self.attachAsset('colorButton', { anchorX: 0.5, anchorY: 0.5 }); button.tint = color; self.color = color; self.down = function () { tween(button, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; self.up = function () { tween(button, { scaleX: 1, scaleY: 1 }, { duration: 100 }); }; return self; }); var CompletedEgg = Container.expand(function (baseColor) { var self = Container.call(this); var eggGraphic = self.attachAsset('completedEgg', { anchorX: 0.5, anchorY: 0.5 }); eggGraphic.tint = baseColor || 0xFFFFFF; // Add some random decoration to make each egg look unique for (var i = 0; i < 5; i++) { var glitter = self.attachAsset('glitter', { anchorX: 0.5, anchorY: 0.5, x: (Math.random() - 0.5) * 80, y: (Math.random() - 0.5) * 120 }); glitter.tint = 0xFFD700 + Math.floor(Math.random() * 0x555555); } return self; }); var EasterEgg = Container.expand(function () { var self = Container.call(this); var eggBase = self.attachAsset('eggBase', { anchorX: 0.5, anchorY: 0.5 }); var designContainer = new Container(); self.addChild(designContainer); self.addDesign = function (x, y, designElement) { var localPosition = designContainer.toLocal({ x: x, y: y }, game); designElement.x = localPosition.x; designElement.y = localPosition.y; designContainer.addChild(designElement); }; self.clearDesigns = function () { while (designContainer.children.length > 0) { designContainer.removeChild(designContainer.children[0]); } }; self.rotate = function (angle) { eggBase.rotation += angle; designContainer.rotation += angle; }; self.captureDesign = function () { // In a real implementation, this would create a snapshot of the egg // For this simplified version, we just create a new completed egg with the same tint var completedEgg = new CompletedEgg(eggBase.tint); return completedEgg; }; return self; }); var Sticker = Container.expand(function (type, scale) { var self = Container.call(this); var stickerAsset; if (type === 'star') { stickerAsset = self.attachAsset('stickerStar', { anchorX: 0.5, anchorY: 0.5, scaleX: scale, scaleY: scale }); } else if (type === 'heart') { stickerAsset = self.attachAsset('stickerHeart', { anchorX: 0.5, anchorY: 0.5, scaleX: scale, scaleY: scale }); } self.down = function () { tween(stickerAsset, { scaleX: scale * 0.9, scaleY: scale * 0.9 }, { duration: 100 }); }; self.up = function () { tween(stickerAsset, { scaleX: scale, scaleY: scale }, { duration: 100 }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xAFEEEE // Light turquoise background color }); /**** * Game Code ****/ // Define color palette var colors = [0xFF0000, // Red 0xFF7F00, // Orange 0xFFFF00, // Yellow 0x00FF00, // Green 0x0000FF, // Blue 0x4B0082, // Indigo 0x9400D3, // Violet 0xFFFFFF, // White 0x000000 // Black ]; // Define brush sizes var brushSizes = [10, 20, 30]; // Initialize game variables var currentColor = colors[0]; var currentBrushSize = brushSizes[1]; var currentTool = 'brush'; var isPainting = false; var lastX, lastY; var savedEggs = storage.savedEggs || []; // Create main egg var easterEgg = new EasterEgg(); easterEgg.x = 2048 / 2; easterEgg.y = 2732 / 2 - 200; game.addChild(easterEgg); // Create UI components // Tool panel var toolPanel = LK.getAsset('toolPanel', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 180 }); game.addChild(toolPanel); // Color panel var colorPanel = LK.getAsset('colorPanel', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 320 }); game.addChild(colorPanel); // Add color buttons var colorButtons = []; for (var i = 0; i < colors.length; i++) { var colorButton = new ColorButton(colors[i]); colorButton.x = i * 70 + 490; colorButton.y = 2732 - 320; game.addChild(colorButton); colorButtons.push(colorButton); // Add click handler (function (color) { colorButton.down = function () { tween(colorButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); currentColor = color; }; colorButton.up = function () { tween(colorButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); }; })(colors[i]); } // Create tool buttons var brushButton = new Button("Brush", 0x6495ED); brushButton.x = 400; brushButton.y = 2732 - 180; game.addChild(brushButton); brushButton.down = function () { tween(brushButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; brushButton.up = function () { tween(brushButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); currentTool = 'brush'; }; var stickerStarButton = new Button("Star", 0xFFD700); stickerStarButton.x = 550; stickerStarButton.y = 2732 - 180; game.addChild(stickerStarButton); stickerStarButton.down = function () { tween(stickerStarButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; stickerStarButton.up = function () { tween(stickerStarButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); currentTool = 'star'; }; var stickerHeartButton = new Button("Heart", 0xFF0000); stickerHeartButton.x = 700; stickerHeartButton.y = 2732 - 180; game.addChild(stickerHeartButton); stickerHeartButton.down = function () { tween(stickerHeartButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; stickerHeartButton.up = function () { tween(stickerHeartButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); currentTool = 'heart'; }; var rotateLeftButton = new Button("< Rotate", 0x9370DB); rotateLeftButton.x = 850; rotateLeftButton.y = 2732 - 180; game.addChild(rotateLeftButton); rotateLeftButton.down = function () { tween(rotateLeftButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; rotateLeftButton.up = function () { tween(rotateLeftButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); easterEgg.rotate(-Math.PI / 8); }; var rotateRightButton = new Button("Rotate >", 0x9370DB); rotateRightButton.x = 1000; rotateRightButton.y = 2732 - 180; game.addChild(rotateRightButton); rotateRightButton.down = function () { tween(rotateRightButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; rotateRightButton.up = function () { tween(rotateRightButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); easterEgg.rotate(Math.PI / 8); }; var saveButton = new Button("Save", 0x32CD32); saveButton.x = 1150; saveButton.y = 2732 - 180; game.addChild(saveButton); saveButton.down = function () { tween(saveButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; saveButton.up = function () { tween(saveButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); // Save the current egg design var completedEgg = easterEgg.captureDesign(); // Add to saved eggs var newEggData = { x: 150 + savedEggs.length % 4 * 180, y: 2732 - 600 - Math.floor(savedEggs.length / 4) * 220, color: currentColor }; savedEggs.push(newEggData); // Update storage storage.savedEggs = savedEggs; // Play save sound LK.getSound('saveSound').play(); // Add the egg to the basket display displaySavedEggs(); // Increment score LK.setScore(LK.getScore() + 1); // Clear the current egg for a new design easterEgg.clearDesigns(); }; var clearButton = new Button("Clear", 0xFF6347); clearButton.x = 1300; clearButton.y = 2732 - 180; game.addChild(clearButton); clearButton.down = function () { tween(clearButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; clearButton.up = function () { tween(clearButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); easterEgg.clearDesigns(); LK.getSound('clearSound').play(); }; // Create basket display var basket = LK.getAsset('basket', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 540 }); game.addChild(basket); // Title text var titleText = new Text2("Easter Egg Artist", { size: 100, fill: 0x8B4513 // Dark brown }); titleText.anchor.set(0.5, 0); titleText.x = 2048 / 2; titleText.y = 50; game.addChild(titleText); // Score display var scoreText = new Text2("Eggs: 0", { size: 60, fill: 0x4B0082 // Indigo }); scoreText.anchor.set(0, 0); scoreText.x = 120; scoreText.y = 120; game.addChild(scoreText); // Function to display saved eggs function displaySavedEggs() { // Remove any existing displayed eggs for (var i = game.children.length - 1; i >= 0; i--) { if (game.children[i].isCompletedEgg) { game.removeChild(game.children[i]); } } // Display saved eggs for (var i = 0; i < savedEggs.length; i++) { var eggData = savedEggs[i]; var displayedEgg = new CompletedEgg(eggData.color); displayedEgg.x = eggData.x; displayedEgg.y = eggData.y; displayedEgg.isCompletedEgg = true; game.addChild(displayedEgg); } } // Display any saved eggs displaySavedEggs(); // Game event handlers game.down = function (x, y) { if (y < 2732 - 350) { isPainting = true; lastX = x; lastY = y; if (currentTool === 'brush') { var brushStroke = new BrushStroke(currentColor, currentBrushSize); easterEgg.addDesign(x, y, brushStroke); LK.getSound('brushSound').play(); } else if (currentTool === 'star' || currentTool === 'heart') { var sticker = new Sticker(currentTool, 1.2); easterEgg.addDesign(x, y, sticker); LK.getSound('stickerSound').play(); } } }; game.move = function (x, y) { if (isPainting && currentTool === 'brush') { // Calculate distance between last point and current point var dx = x - lastX; var dy = y - lastY; var distance = Math.sqrt(dx * dx + dy * dy); // If distance is greater than half the brush size, add intermediate points if (distance > currentBrushSize / 2) { var steps = Math.ceil(distance / (currentBrushSize / 2)); for (var i = 1; i <= steps; i++) { var pointX = lastX + dx * i / steps; var pointY = lastY + dy * i / steps; var brushStroke = new BrushStroke(currentColor, currentBrushSize); easterEgg.addDesign(pointX, pointY, brushStroke); } } else { var brushStroke = new BrushStroke(currentColor, currentBrushSize); easterEgg.addDesign(x, y, brushStroke); } lastX = x; lastY = y; } }; game.up = function () { isPainting = false; }; // Update function game.update = function () { // Update score display scoreText.setText("Eggs: " + LK.getScore()); }; // Start background music LK.playMusic('easterMusic', { fade: { start: 0, end: 0.2, duration: 1000 } });
===================================================================
--- original.js
+++ change.js
@@ -385,13 +385,14 @@
});
// Save the current egg design
var completedEgg = easterEgg.captureDesign();
// Add to saved eggs
- savedEggs.push({
+ var newEggData = {
x: 150 + savedEggs.length % 4 * 180,
y: 2732 - 600 - Math.floor(savedEggs.length / 4) * 220,
color: currentColor
- });
+ };
+ savedEggs.push(newEggData);
// Update storage
storage.savedEggs = savedEggs;
// Play save sound
LK.getSound('saveSound').play();