Code edit (1 edits merged)
Please save this source code
User prompt
Surprise Egg Toys - Powerpuff Girls Edition
Initial prompt
Toca playing toys (2005). The powerpuff girls have 6 surprise eggs. Tap on a surprise egg to shake and then tap it to open. It will be a toy Violet cat, or toy frog, or toy monkey, or party blower, or jelly, or radio inside.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var SurpriseEgg = Container.expand(function (eggType, toyType) {
var self = Container.call(this);
self.eggType = eggType;
self.toyType = toyType;
self.state = 'closed'; // closed, shaking, cracked, opened
self.shakeCount = 0;
self.maxShakes = 3;
// Create egg graphics
var eggGraphics = self.attachAsset('egg' + eggType, {
anchorX: 0.5,
anchorY: 0.5
});
// Create toy (hidden initially)
var toyAssets = ['cat', 'frog', 'monkey', 'blower', 'jelly', 'radio'];
var toyGraphics = self.attachAsset(toyAssets[toyType], {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
// Create cracked egg pieces (hidden initially)
var eggTop = self.attachAsset('eggTop', {
anchorX: 0.5,
anchorY: 1.0,
alpha: 0,
tint: eggGraphics.tint
});
var eggBottom = self.attachAsset('eggBottom', {
anchorX: 0.5,
anchorY: 0.0,
alpha: 0,
tint: eggGraphics.tint
});
self.shake = function () {
if (self.state !== 'closed') return;
self.state = 'shaking';
self.shakeCount++;
LK.getSound('shake').play();
// Shake animation
var originalX = self.x;
tween(self, {
x: originalX - 15
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX + 15
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX - 10
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX + 10
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX
}, {
duration: 50,
onFinish: function onFinish() {
if (self.shakeCount >= self.maxShakes) {
self.state = 'ready_to_crack';
} else {
self.state = 'closed';
}
}
});
}
});
}
});
}
});
}
});
};
self.crack = function () {
if (self.state !== 'ready_to_crack') return;
self.state = 'cracked';
LK.getSound('crack').play();
// Hide original egg
eggGraphics.alpha = 0;
// Show cracked pieces
eggTop.alpha = 1;
eggBottom.alpha = 1;
// Animate cracked pieces
tween(eggTop, {
y: eggTop.y - 100,
rotation: -0.3
}, {
duration: 500
});
tween(eggBottom, {
y: eggBottom.y + 100,
rotation: 0.3
}, {
duration: 500
});
// Reveal toy
setTimeout(function () {
LK.getSound('reveal').play();
toyGraphics.alpha = 1;
tween(toyGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(toyGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
self.state = 'opened';
}, 300);
};
self.down = function (x, y, obj) {
if (self.state === 'closed' || self.state === 'ready_to_crack') {
if (self.state === 'closed') {
self.shake();
} else if (self.state === 'ready_to_crack') {
self.crack();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFB6C1
});
/****
* Game Code
****/
var eggs = [];
var toys = [0, 1, 2, 3, 4, 5]; // Will be shuffled
var eggsOpened = 0;
// Shuffle toys array
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
shuffleArray(toys);
// Create title text
var titleText = new Text2('Powerpuff Girls Surprise Eggs', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
// Create instruction text
var instructionText = new Text2('Tap eggs to shake, then tap again to open!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
game.addChild(instructionText);
instructionText.x = 2048 / 2;
instructionText.y = 300;
// Create eggs in 2x3 grid
var startX = 2048 / 2 - 450;
var startY = 800;
var spacingX = 300;
var spacingY = 350;
for (var i = 0; i < 6; i++) {
var row = Math.floor(i / 3);
var col = i % 3;
var egg = new SurpriseEgg(i + 1, toys[i]);
egg.x = startX + col * spacingX;
egg.y = startY + row * spacingY;
eggs.push(egg);
game.addChild(egg);
}
// Create restart button (hidden initially)
var restartText = new Text2('Tap to Play Again!', {
size: 60,
fill: 0xFFFFFF
});
restartText.anchor.set(0.5, 0.5);
restartText.alpha = 0;
game.addChild(restartText);
restartText.x = 2048 / 2;
restartText.y = 2400;
game.update = function () {
// Check if all eggs are opened
var openedCount = 0;
for (var i = 0; i < eggs.length; i++) {
if (eggs[i].state === 'opened') {
openedCount++;
}
}
// Show restart option when all eggs are opened
if (openedCount === 6 && restartText.alpha === 0) {
tween(restartText, {
alpha: 1
}, {
duration: 500
});
// Make restart text clickable
restartText.down = function (x, y, obj) {
// Reset game
eggsOpened = 0;
shuffleArray(toys);
// Remove all eggs
for (var i = 0; i < eggs.length; i++) {
eggs[i].destroy();
}
eggs = [];
// Recreate eggs
for (var i = 0; i < 6; i++) {
var row = Math.floor(i / 3);
var col = i % 3;
var egg = new SurpriseEgg(i + 1, toys[i]);
egg.x = startX + col * spacingX;
egg.y = startY + row * spacingY;
eggs.push(egg);
game.addChild(egg);
}
// Hide restart text
restartText.alpha = 0;
};
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var SurpriseEgg = Container.expand(function (eggType, toyType) {
var self = Container.call(this);
self.eggType = eggType;
self.toyType = toyType;
self.state = 'closed'; // closed, shaking, cracked, opened
self.shakeCount = 0;
self.maxShakes = 3;
// Create egg graphics
var eggGraphics = self.attachAsset('egg' + eggType, {
anchorX: 0.5,
anchorY: 0.5
});
// Create toy (hidden initially)
var toyAssets = ['cat', 'frog', 'monkey', 'blower', 'jelly', 'radio'];
var toyGraphics = self.attachAsset(toyAssets[toyType], {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
// Create cracked egg pieces (hidden initially)
var eggTop = self.attachAsset('eggTop', {
anchorX: 0.5,
anchorY: 1.0,
alpha: 0,
tint: eggGraphics.tint
});
var eggBottom = self.attachAsset('eggBottom', {
anchorX: 0.5,
anchorY: 0.0,
alpha: 0,
tint: eggGraphics.tint
});
self.shake = function () {
if (self.state !== 'closed') return;
self.state = 'shaking';
self.shakeCount++;
LK.getSound('shake').play();
// Shake animation
var originalX = self.x;
tween(self, {
x: originalX - 15
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX + 15
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX - 10
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX + 10
}, {
duration: 50,
onFinish: function onFinish() {
tween(self, {
x: originalX
}, {
duration: 50,
onFinish: function onFinish() {
if (self.shakeCount >= self.maxShakes) {
self.state = 'ready_to_crack';
} else {
self.state = 'closed';
}
}
});
}
});
}
});
}
});
}
});
};
self.crack = function () {
if (self.state !== 'ready_to_crack') return;
self.state = 'cracked';
LK.getSound('crack').play();
// Hide original egg
eggGraphics.alpha = 0;
// Show cracked pieces
eggTop.alpha = 1;
eggBottom.alpha = 1;
// Animate cracked pieces
tween(eggTop, {
y: eggTop.y - 100,
rotation: -0.3
}, {
duration: 500
});
tween(eggBottom, {
y: eggBottom.y + 100,
rotation: 0.3
}, {
duration: 500
});
// Reveal toy
setTimeout(function () {
LK.getSound('reveal').play();
toyGraphics.alpha = 1;
tween(toyGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(toyGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
self.state = 'opened';
}, 300);
};
self.down = function (x, y, obj) {
if (self.state === 'closed' || self.state === 'ready_to_crack') {
if (self.state === 'closed') {
self.shake();
} else if (self.state === 'ready_to_crack') {
self.crack();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFB6C1
});
/****
* Game Code
****/
var eggs = [];
var toys = [0, 1, 2, 3, 4, 5]; // Will be shuffled
var eggsOpened = 0;
// Shuffle toys array
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
shuffleArray(toys);
// Create title text
var titleText = new Text2('Powerpuff Girls Surprise Eggs', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
// Create instruction text
var instructionText = new Text2('Tap eggs to shake, then tap again to open!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
game.addChild(instructionText);
instructionText.x = 2048 / 2;
instructionText.y = 300;
// Create eggs in 2x3 grid
var startX = 2048 / 2 - 450;
var startY = 800;
var spacingX = 300;
var spacingY = 350;
for (var i = 0; i < 6; i++) {
var row = Math.floor(i / 3);
var col = i % 3;
var egg = new SurpriseEgg(i + 1, toys[i]);
egg.x = startX + col * spacingX;
egg.y = startY + row * spacingY;
eggs.push(egg);
game.addChild(egg);
}
// Create restart button (hidden initially)
var restartText = new Text2('Tap to Play Again!', {
size: 60,
fill: 0xFFFFFF
});
restartText.anchor.set(0.5, 0.5);
restartText.alpha = 0;
game.addChild(restartText);
restartText.x = 2048 / 2;
restartText.y = 2400;
game.update = function () {
// Check if all eggs are opened
var openedCount = 0;
for (var i = 0; i < eggs.length; i++) {
if (eggs[i].state === 'opened') {
openedCount++;
}
}
// Show restart option when all eggs are opened
if (openedCount === 6 && restartText.alpha === 0) {
tween(restartText, {
alpha: 1
}, {
duration: 500
});
// Make restart text clickable
restartText.down = function (x, y, obj) {
// Reset game
eggsOpened = 0;
shuffleArray(toys);
// Remove all eggs
for (var i = 0; i < eggs.length; i++) {
eggs[i].destroy();
}
eggs = [];
// Recreate eggs
for (var i = 0; i < 6; i++) {
var row = Math.floor(i / 3);
var col = i % 3;
var egg = new SurpriseEgg(i + 1, toys[i]);
egg.x = startX + col * spacingX;
egg.y = startY + row * spacingY;
eggs.push(egg);
game.addChild(egg);
}
// Hide restart text
restartText.alpha = 0;
};
}
};