/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var SurpriseEgg = Container.expand(function (eggType, eggColor) { var self = Container.call(this); self.isOpened = false; self.eggType = eggType; self.contents = []; // Create egg base var eggBase = self.attachAsset(eggColor, { anchorX: 0.5, anchorY: 0.5 }); // Create egg top half var eggTopHalf = self.attachAsset('eggTop', { anchorX: 0.5, anchorY: 1.0, y: 0 }); // Create egg bottom half var eggBottomHalf = self.attachAsset('eggBottom', { anchorX: 0.5, anchorY: 0.0, y: 0 }); // Hide base initially, show halves eggBase.visible = false; eggTopHalf.visible = true; eggBottomHalf.visible = true; self.generateContents = function () { self.contents = []; var numItems = Math.floor(Math.random() * 3) + 2; // 2-4 items for (var i = 0; i < numItems; i++) { var itemType = Math.floor(Math.random() * 4); var item; switch (itemType) { case 0: item = { type: 'blossom', asset: 'blossomToy' }; break; case 1: item = { type: 'bubbles', asset: 'bubblesToy' }; break; case 2: item = { type: 'buttercup', asset: 'buttercupToy' }; break; case 3: item = { type: 'sticker', asset: 'sticker' }; break; } self.contents.push(item); } }; self.openEgg = function () { if (self.isOpened) return; self.isOpened = true; // Play crack sound LK.getSound('eggCrack').play(); // Animate egg opening tween(eggTopHalf, { y: -100, rotation: -0.3 }, { duration: 800, easing: tween.bounceOut }); tween(eggBottomHalf, { y: 100, rotation: 0.2 }, { duration: 800, easing: tween.bounceOut }); // Show contents after opening animation LK.setTimeout(function () { self.showContents(); }, 400); }; self.showContents = function () { LK.getSound('surprise').play(); for (var i = 0; i < self.contents.length; i++) { var item = self.contents[i]; var itemGraphic = LK.getAsset(item.asset, { anchorX: 0.5, anchorY: 0.5, alpha: 0, scaleX: 0, scaleY: 0 }); // Position items in a circular pattern var angle = i / self.contents.length * Math.PI * 2; var radius = 80; itemGraphic.x = Math.cos(angle) * radius; itemGraphic.y = Math.sin(angle) * radius; self.addChild(itemGraphic); // Animate item appearance tween(itemGraphic, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 600, easing: tween.elasticOut }); // Add floating animation var floatDelay = i * 200; LK.setTimeout(function (graphic) { return function () { tween(graphic, { y: graphic.y - 20 }, { duration: 1000, easing: tween.easeInOut }); }; }(itemGraphic), floatDelay); } // Flash effect LK.effects.flashObject(self, 0xFFFFFF, 500); // Auto-reset after showing contents LK.setTimeout(function () { self.resetEgg(); }, 3000); }; self.resetEgg = function () { // Remove all content items for (var i = self.children.length - 1; i >= 0; i--) { var child = self.children[i]; if (child !== eggTopHalf && child !== eggBottomHalf && child !== eggBase) { child.destroy(); } } // Reset egg halves position tween(eggTopHalf, { y: 0, rotation: 0 }, { duration: 800, easing: tween.easeInOut }); tween(eggBottomHalf, { y: 0, rotation: 0 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { self.isOpened = false; self.generateContents(); } }); }; self.down = function (x, y, obj) { if (!self.isOpened) { self.openEgg(); LK.getSound('collect').play(); } }; // Generate initial contents self.generateContents(); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Create title text var titleText = new Text2('Powerpuff Girls Surprise Eggs', { size: 80, fill: 0xFF1493 }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); titleText.y = 50; // Create instruction text var instructionText = new Text2('Tap the eggs to discover surprises!', { size: 50, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); instructionText.y = 150; // Create surprise eggs var eggs = []; var eggTypes = ['egg1', 'egg2', 'egg3', 'egg4']; var eggPositions = [{ x: 512, y: 900 }, // Top left { x: 1536, y: 900 }, // Top right { x: 512, y: 1600 }, // Bottom left { x: 1536, y: 1600 } // Bottom right ]; for (var i = 0; i < 4; i++) { var egg = new SurpriseEgg(i, eggTypes[i]); egg.x = eggPositions[i].x; egg.y = eggPositions[i].y; eggs.push(egg); game.addChild(egg); } // Add sparkle effects var sparkleTimer = 0; game.update = function () { sparkleTimer++; // Add random sparkles around eggs if (sparkleTimer % 60 === 0) { for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; if (!egg.isOpened) { var sparkle = LK.getAsset('sticker', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, alpha: 0.8 }); sparkle.x = egg.x + (Math.random() - 0.5) * 300; sparkle.y = egg.y + (Math.random() - 0.5) * 300; game.addChild(sparkle); // Animate sparkle tween(sparkle, { alpha: 0, scaleX: 0, scaleY: 0, y: sparkle.y - 100 }, { duration: 1500, easing: tween.easeOut, onFinish: function onFinish() { sparkle.destroy(); } }); } } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var SurpriseEgg = Container.expand(function (eggType, eggColor) {
var self = Container.call(this);
self.isOpened = false;
self.eggType = eggType;
self.contents = [];
// Create egg base
var eggBase = self.attachAsset(eggColor, {
anchorX: 0.5,
anchorY: 0.5
});
// Create egg top half
var eggTopHalf = self.attachAsset('eggTop', {
anchorX: 0.5,
anchorY: 1.0,
y: 0
});
// Create egg bottom half
var eggBottomHalf = self.attachAsset('eggBottom', {
anchorX: 0.5,
anchorY: 0.0,
y: 0
});
// Hide base initially, show halves
eggBase.visible = false;
eggTopHalf.visible = true;
eggBottomHalf.visible = true;
self.generateContents = function () {
self.contents = [];
var numItems = Math.floor(Math.random() * 3) + 2; // 2-4 items
for (var i = 0; i < numItems; i++) {
var itemType = Math.floor(Math.random() * 4);
var item;
switch (itemType) {
case 0:
item = {
type: 'blossom',
asset: 'blossomToy'
};
break;
case 1:
item = {
type: 'bubbles',
asset: 'bubblesToy'
};
break;
case 2:
item = {
type: 'buttercup',
asset: 'buttercupToy'
};
break;
case 3:
item = {
type: 'sticker',
asset: 'sticker'
};
break;
}
self.contents.push(item);
}
};
self.openEgg = function () {
if (self.isOpened) return;
self.isOpened = true;
// Play crack sound
LK.getSound('eggCrack').play();
// Animate egg opening
tween(eggTopHalf, {
y: -100,
rotation: -0.3
}, {
duration: 800,
easing: tween.bounceOut
});
tween(eggBottomHalf, {
y: 100,
rotation: 0.2
}, {
duration: 800,
easing: tween.bounceOut
});
// Show contents after opening animation
LK.setTimeout(function () {
self.showContents();
}, 400);
};
self.showContents = function () {
LK.getSound('surprise').play();
for (var i = 0; i < self.contents.length; i++) {
var item = self.contents[i];
var itemGraphic = LK.getAsset(item.asset, {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0,
scaleX: 0,
scaleY: 0
});
// Position items in a circular pattern
var angle = i / self.contents.length * Math.PI * 2;
var radius = 80;
itemGraphic.x = Math.cos(angle) * radius;
itemGraphic.y = Math.sin(angle) * radius;
self.addChild(itemGraphic);
// Animate item appearance
tween(itemGraphic, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
// Add floating animation
var floatDelay = i * 200;
LK.setTimeout(function (graphic) {
return function () {
tween(graphic, {
y: graphic.y - 20
}, {
duration: 1000,
easing: tween.easeInOut
});
};
}(itemGraphic), floatDelay);
}
// Flash effect
LK.effects.flashObject(self, 0xFFFFFF, 500);
// Auto-reset after showing contents
LK.setTimeout(function () {
self.resetEgg();
}, 3000);
};
self.resetEgg = function () {
// Remove all content items
for (var i = self.children.length - 1; i >= 0; i--) {
var child = self.children[i];
if (child !== eggTopHalf && child !== eggBottomHalf && child !== eggBase) {
child.destroy();
}
}
// Reset egg halves position
tween(eggTopHalf, {
y: 0,
rotation: 0
}, {
duration: 800,
easing: tween.easeInOut
});
tween(eggBottomHalf, {
y: 0,
rotation: 0
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.isOpened = false;
self.generateContents();
}
});
};
self.down = function (x, y, obj) {
if (!self.isOpened) {
self.openEgg();
LK.getSound('collect').play();
}
};
// Generate initial contents
self.generateContents();
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Create title text
var titleText = new Text2('Powerpuff Girls Surprise Eggs', {
size: 80,
fill: 0xFF1493
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
// Create instruction text
var instructionText = new Text2('Tap the eggs to discover surprises!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 150;
// Create surprise eggs
var eggs = [];
var eggTypes = ['egg1', 'egg2', 'egg3', 'egg4'];
var eggPositions = [{
x: 512,
y: 900
},
// Top left
{
x: 1536,
y: 900
},
// Top right
{
x: 512,
y: 1600
},
// Bottom left
{
x: 1536,
y: 1600
} // Bottom right
];
for (var i = 0; i < 4; i++) {
var egg = new SurpriseEgg(i, eggTypes[i]);
egg.x = eggPositions[i].x;
egg.y = eggPositions[i].y;
eggs.push(egg);
game.addChild(egg);
}
// Add sparkle effects
var sparkleTimer = 0;
game.update = function () {
sparkleTimer++;
// Add random sparkles around eggs
if (sparkleTimer % 60 === 0) {
for (var i = 0; i < eggs.length; i++) {
var egg = eggs[i];
if (!egg.isOpened) {
var sparkle = LK.getAsset('sticker', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.3,
scaleY: 0.3,
alpha: 0.8
});
sparkle.x = egg.x + (Math.random() - 0.5) * 300;
sparkle.y = egg.y + (Math.random() - 0.5) * 300;
game.addChild(sparkle);
// Animate sparkle
tween(sparkle, {
alpha: 0,
scaleX: 0,
scaleY: 0,
y: sparkle.y - 100
}, {
duration: 1500,
easing: tween.easeOut,
onFinish: function onFinish() {
sparkle.destroy();
}
});
}
}
}
};