Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls Surprise Toy Basket
Initial prompt
Toca presents 3 (2003). The powerpuff girls have a toy basket. Tap on 6 gifts to open. It will be a toy Violet cat, or toy frog, or toy monkey, or party blower, or maraca, or toy dinosaur inside. Tap on your present to see what it does. Tap on your present and see what happens.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var GiftBox = Container.expand(function (toyType, boxColor) { var self = Container.call(this); self.toyType = toyType; self.isOpened = false; self.toy = null; var boxGraphics = self.attachAsset(boxColor, { anchorX: 0.5, anchorY: 0.5 }); // Ribbon decoration var ribbon = self.attachAsset('sparkle', { anchorX: 0.5, anchorY: 0.5, scaleX: 5, scaleY: 0.5, y: -20 }); self.down = function (x, y, obj) { if (!self.isOpened) { self.openGift(); } }; self.openGift = function () { self.isOpened = true; // Play unwrap sound LK.getSound('unwrap').play(); // Box opening animation tween(boxGraphics, { scaleX: 1.3, scaleY: 1.3, alpha: 0.3 }, { duration: 300 }); tween(ribbon, { alpha: 0 }, { duration: 200 }); // Create and show toy var toyAsset; switch (self.toyType) { case 'violetCat': toyAsset = 'violetCat'; break; case 'frog': toyAsset = 'frog'; break; case 'monkey': toyAsset = 'monkey'; break; case 'partyBlower': toyAsset = 'partyBlower'; break; case 'maraca': toyAsset = 'maraca'; break; case 'dinosaur': toyAsset = 'dinosaur'; break; } self.toy = self.attachAsset(toyAsset, { anchorX: 0.5, anchorY: 0.5, alpha: 0, scaleX: 0.3, scaleY: 0.3 }); // Toy reveal animation tween(self.toy, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 500, easing: tween.elasticOut, onFinish: function onFinish() { checkAllBoxesOpened(); } }); // Sparkle effects createSparkles(self.x, self.y); }; return self; }); var Toy = Container.expand(function (toyType, originalX, originalY) { var self = Container.call(this); self.toyType = toyType; self.originalX = originalX; self.originalY = originalY; self.isAnimating = false; var toyAsset; switch (toyType) { case 'violetCat': toyAsset = 'violetCat'; break; case 'frog': toyAsset = 'frog'; break; case 'monkey': toyAsset = 'monkey'; break; case 'partyBlower': toyAsset = 'partyBlower'; break; case 'maraca': toyAsset = 'maraca'; break; case 'dinosaur': toyAsset = 'dinosaur'; break; } var toyGraphics = self.attachAsset(toyAsset, { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (!self.isAnimating) { self.playAnimation(); } }; self.playAnimation = function () { self.isAnimating = true; switch (self.toyType) { case 'violetCat': LK.getSound('catPurr').play(); // Purr and wiggle animation tween(toyGraphics, { rotation: 0.2 }, { duration: 200 }); tween(toyGraphics, { rotation: -0.2 }, { duration: 200 }); tween(toyGraphics, { rotation: 0 }, { duration: 200, onFinish: function onFinish() { self.isAnimating = false; } }); break; case 'frog': LK.getSound('frogHop').play(); // Hop animation tween(toyGraphics, { y: -50, scaleY: 1.2 }, { duration: 300, easing: tween.easeOut }); tween(toyGraphics, { y: 0, scaleY: 1 }, { duration: 300, easing: tween.bounceOut, onFinish: function onFinish() { self.isAnimating = false; } }); break; case 'monkey': LK.getSound('monkeyChatter').play(); // Flip animation tween(toyGraphics, { rotation: Math.PI * 2, scaleX: 1.3 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { toyGraphics.rotation = 0; toyGraphics.scaleX = 1; self.isAnimating = false; } }); break; case 'partyBlower': LK.getSound('partyBlower').play(); // Extend animation tween(toyGraphics, { scaleX: 2, tint: 0xFF69B4 }, { duration: 400 }); tween(toyGraphics, { scaleX: 1, tint: 0xFFFFFF }, { duration: 400, onFinish: function onFinish() { self.isAnimating = false; } }); break; case 'maraca': LK.getSound('maracaShake').play(); // Shake animation var shakeCount = 0; var shakeInterval = LK.setInterval(function () { toyGraphics.x = (Math.random() - 0.5) * 20; shakeCount++; if (shakeCount > 10) { LK.clearInterval(shakeInterval); toyGraphics.x = 0; self.isAnimating = false; } }, 50); break; case 'dinosaur': LK.getSound('dinosaurRoar').play(); // Roar and stomp animation tween(toyGraphics, { scaleX: 1.4, scaleY: 1.4, tint: 0xFF0000 }, { duration: 300 }); tween(toyGraphics, { scaleX: 1, scaleY: 1, tint: 0xFFFFFF }, { duration: 500, onFinish: function onFinish() { // Screen shake effect LK.effects.flashScreen(0x666666, 200); self.isAnimating = false; } }); break; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Sounds // Sparkle effect // Toys // Gift boxes and basket // Game variables var giftBoxes = []; var toys = []; var allBoxesOpened = false; var toyTypes = ['violetCat', 'frog', 'monkey', 'partyBlower', 'maraca', 'dinosaur']; var boxColors = ['giftBox', 'giftBoxBlue', 'giftBoxGreen', 'giftBoxYellow', 'giftBoxPurple', 'giftBoxOrange']; // Shuffle toy types for random assignment function shuffleArray(array) { var shuffled = array.slice(); for (var i = shuffled.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = shuffled[i]; shuffled[i] = shuffled[j]; shuffled[j] = temp; } return shuffled; } var shuffledToys = shuffleArray(toyTypes); // Create basket var basket = game.attachAsset('basket', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 800 }); // Title text var titleText = new Text2('Powerpuff Girls Surprise Toy Basket', { size: 80, fill: 0xFF1493 }); titleText.anchor.set(0.5, 0); titleText.x = 1024; titleText.y = 100; game.addChild(titleText); // Instruction text var instructionText = new Text2('Tap the gift boxes to discover surprise toys!', { size: 50, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0); instructionText.x = 1024; instructionText.y = 200; game.addChild(instructionText); // Create gift boxes in basket formation var boxPositions = [{ x: 724, y: 700 }, { x: 924, y: 650 }, { x: 1124, y: 650 }, { x: 1324, y: 700 }, { x: 824, y: 850 }, { x: 1224, y: 850 }]; for (var i = 0; i < 6; i++) { var giftBox = new GiftBox(shuffledToys[i], boxColors[i]); giftBox.x = boxPositions[i].x; giftBox.y = boxPositions[i].y; giftBoxes.push(giftBox); game.addChild(giftBox); } // Function to create sparkle effects function createSparkles(x, y) { for (var i = 0; i < 8; i++) { var sparkle = game.attachAsset('sparkle', { anchorX: 0.5, anchorY: 0.5, x: x + (Math.random() - 0.5) * 100, y: y + (Math.random() - 0.5) * 100, scaleX: Math.random() * 2 + 0.5, scaleY: Math.random() * 2 + 0.5 }); tween(sparkle, { alpha: 0, scaleX: 0, scaleY: 0 }, { duration: 1000, onFinish: function onFinish() { sparkle.destroy(); } }); } } // Function to check if all boxes are opened function checkAllBoxesOpened() { var openedCount = 0; for (var i = 0; i < giftBoxes.length; i++) { if (giftBoxes[i].isOpened) { openedCount++; } } if (openedCount === 6 && !allBoxesOpened) { allBoxesOpened = true; // Hide instruction text and show play instruction tween(instructionText, { alpha: 0 }, { duration: 500 }); var playText = new Text2('Tap your toys to see them come alive!', { size: 50, fill: 0xFFFF00 }); playText.anchor.set(0.5, 0); playText.x = 1024; playText.y = 200; playText.alpha = 0; game.addChild(playText); tween(playText, { alpha: 1 }, { duration: 500 }); // Move toys to play area LK.setTimeout(function () { moveToysToPlayArea(); }, 1000); } } // Function to move toys to play area function moveToysToPlayArea() { var playPositions = [{ x: 400, y: 1400 }, { x: 700, y: 1300 }, { x: 1000, y: 1300 }, { x: 1300, y: 1400 }, { x: 1600, y: 1300 }, { x: 850, y: 1500 }]; for (var i = 0; i < giftBoxes.length; i++) { if (giftBoxes[i].toy) { var toy = new Toy(giftBoxes[i].toyType, playPositions[i].x, playPositions[i].y); toy.x = giftBoxes[i].x; toy.y = giftBoxes[i].y; toys.push(toy); game.addChild(toy); // Animate to play position tween(toy, { x: playPositions[i].x, y: playPositions[i].y }, { duration: 1000, easing: tween.easeInOut }); } } // Hide basket and gift boxes tween(basket, { alpha: 0.3 }, { duration: 1000 }); for (var j = 0; j < giftBoxes.length; j++) { tween(giftBoxes[j], { alpha: 0.2 }, { duration: 1000 }); } } // Game update loop game.update = function () { // No continuous updates needed for this game };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var GiftBox = Container.expand(function (toyType, boxColor) {
var self = Container.call(this);
self.toyType = toyType;
self.isOpened = false;
self.toy = null;
var boxGraphics = self.attachAsset(boxColor, {
anchorX: 0.5,
anchorY: 0.5
});
// Ribbon decoration
var ribbon = self.attachAsset('sparkle', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 5,
scaleY: 0.5,
y: -20
});
self.down = function (x, y, obj) {
if (!self.isOpened) {
self.openGift();
}
};
self.openGift = function () {
self.isOpened = true;
// Play unwrap sound
LK.getSound('unwrap').play();
// Box opening animation
tween(boxGraphics, {
scaleX: 1.3,
scaleY: 1.3,
alpha: 0.3
}, {
duration: 300
});
tween(ribbon, {
alpha: 0
}, {
duration: 200
});
// Create and show toy
var toyAsset;
switch (self.toyType) {
case 'violetCat':
toyAsset = 'violetCat';
break;
case 'frog':
toyAsset = 'frog';
break;
case 'monkey':
toyAsset = 'monkey';
break;
case 'partyBlower':
toyAsset = 'partyBlower';
break;
case 'maraca':
toyAsset = 'maraca';
break;
case 'dinosaur':
toyAsset = 'dinosaur';
break;
}
self.toy = self.attachAsset(toyAsset, {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0,
scaleX: 0.3,
scaleY: 0.3
});
// Toy reveal animation
tween(self.toy, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.elasticOut,
onFinish: function onFinish() {
checkAllBoxesOpened();
}
});
// Sparkle effects
createSparkles(self.x, self.y);
};
return self;
});
var Toy = Container.expand(function (toyType, originalX, originalY) {
var self = Container.call(this);
self.toyType = toyType;
self.originalX = originalX;
self.originalY = originalY;
self.isAnimating = false;
var toyAsset;
switch (toyType) {
case 'violetCat':
toyAsset = 'violetCat';
break;
case 'frog':
toyAsset = 'frog';
break;
case 'monkey':
toyAsset = 'monkey';
break;
case 'partyBlower':
toyAsset = 'partyBlower';
break;
case 'maraca':
toyAsset = 'maraca';
break;
case 'dinosaur':
toyAsset = 'dinosaur';
break;
}
var toyGraphics = self.attachAsset(toyAsset, {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (!self.isAnimating) {
self.playAnimation();
}
};
self.playAnimation = function () {
self.isAnimating = true;
switch (self.toyType) {
case 'violetCat':
LK.getSound('catPurr').play();
// Purr and wiggle animation
tween(toyGraphics, {
rotation: 0.2
}, {
duration: 200
});
tween(toyGraphics, {
rotation: -0.2
}, {
duration: 200
});
tween(toyGraphics, {
rotation: 0
}, {
duration: 200,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'frog':
LK.getSound('frogHop').play();
// Hop animation
tween(toyGraphics, {
y: -50,
scaleY: 1.2
}, {
duration: 300,
easing: tween.easeOut
});
tween(toyGraphics, {
y: 0,
scaleY: 1
}, {
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'monkey':
LK.getSound('monkeyChatter').play();
// Flip animation
tween(toyGraphics, {
rotation: Math.PI * 2,
scaleX: 1.3
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
toyGraphics.rotation = 0;
toyGraphics.scaleX = 1;
self.isAnimating = false;
}
});
break;
case 'partyBlower':
LK.getSound('partyBlower').play();
// Extend animation
tween(toyGraphics, {
scaleX: 2,
tint: 0xFF69B4
}, {
duration: 400
});
tween(toyGraphics, {
scaleX: 1,
tint: 0xFFFFFF
}, {
duration: 400,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'maraca':
LK.getSound('maracaShake').play();
// Shake animation
var shakeCount = 0;
var shakeInterval = LK.setInterval(function () {
toyGraphics.x = (Math.random() - 0.5) * 20;
shakeCount++;
if (shakeCount > 10) {
LK.clearInterval(shakeInterval);
toyGraphics.x = 0;
self.isAnimating = false;
}
}, 50);
break;
case 'dinosaur':
LK.getSound('dinosaurRoar').play();
// Roar and stomp animation
tween(toyGraphics, {
scaleX: 1.4,
scaleY: 1.4,
tint: 0xFF0000
}, {
duration: 300
});
tween(toyGraphics, {
scaleX: 1,
scaleY: 1,
tint: 0xFFFFFF
}, {
duration: 500,
onFinish: function onFinish() {
// Screen shake effect
LK.effects.flashScreen(0x666666, 200);
self.isAnimating = false;
}
});
break;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Sounds
// Sparkle effect
// Toys
// Gift boxes and basket
// Game variables
var giftBoxes = [];
var toys = [];
var allBoxesOpened = false;
var toyTypes = ['violetCat', 'frog', 'monkey', 'partyBlower', 'maraca', 'dinosaur'];
var boxColors = ['giftBox', 'giftBoxBlue', 'giftBoxGreen', 'giftBoxYellow', 'giftBoxPurple', 'giftBoxOrange'];
// Shuffle toy types for random assignment
function shuffleArray(array) {
var shuffled = array.slice();
for (var i = shuffled.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = shuffled[i];
shuffled[i] = shuffled[j];
shuffled[j] = temp;
}
return shuffled;
}
var shuffledToys = shuffleArray(toyTypes);
// Create basket
var basket = game.attachAsset('basket', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 800
});
// Title text
var titleText = new Text2('Powerpuff Girls Surprise Toy Basket', {
size: 80,
fill: 0xFF1493
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 100;
game.addChild(titleText);
// Instruction text
var instructionText = new Text2('Tap the gift boxes to discover surprise toys!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
instructionText.x = 1024;
instructionText.y = 200;
game.addChild(instructionText);
// Create gift boxes in basket formation
var boxPositions = [{
x: 724,
y: 700
}, {
x: 924,
y: 650
}, {
x: 1124,
y: 650
}, {
x: 1324,
y: 700
}, {
x: 824,
y: 850
}, {
x: 1224,
y: 850
}];
for (var i = 0; i < 6; i++) {
var giftBox = new GiftBox(shuffledToys[i], boxColors[i]);
giftBox.x = boxPositions[i].x;
giftBox.y = boxPositions[i].y;
giftBoxes.push(giftBox);
game.addChild(giftBox);
}
// Function to create sparkle effects
function createSparkles(x, y) {
for (var i = 0; i < 8; i++) {
var sparkle = game.attachAsset('sparkle', {
anchorX: 0.5,
anchorY: 0.5,
x: x + (Math.random() - 0.5) * 100,
y: y + (Math.random() - 0.5) * 100,
scaleX: Math.random() * 2 + 0.5,
scaleY: Math.random() * 2 + 0.5
});
tween(sparkle, {
alpha: 0,
scaleX: 0,
scaleY: 0
}, {
duration: 1000,
onFinish: function onFinish() {
sparkle.destroy();
}
});
}
}
// Function to check if all boxes are opened
function checkAllBoxesOpened() {
var openedCount = 0;
for (var i = 0; i < giftBoxes.length; i++) {
if (giftBoxes[i].isOpened) {
openedCount++;
}
}
if (openedCount === 6 && !allBoxesOpened) {
allBoxesOpened = true;
// Hide instruction text and show play instruction
tween(instructionText, {
alpha: 0
}, {
duration: 500
});
var playText = new Text2('Tap your toys to see them come alive!', {
size: 50,
fill: 0xFFFF00
});
playText.anchor.set(0.5, 0);
playText.x = 1024;
playText.y = 200;
playText.alpha = 0;
game.addChild(playText);
tween(playText, {
alpha: 1
}, {
duration: 500
});
// Move toys to play area
LK.setTimeout(function () {
moveToysToPlayArea();
}, 1000);
}
}
// Function to move toys to play area
function moveToysToPlayArea() {
var playPositions = [{
x: 400,
y: 1400
}, {
x: 700,
y: 1300
}, {
x: 1000,
y: 1300
}, {
x: 1300,
y: 1400
}, {
x: 1600,
y: 1300
}, {
x: 850,
y: 1500
}];
for (var i = 0; i < giftBoxes.length; i++) {
if (giftBoxes[i].toy) {
var toy = new Toy(giftBoxes[i].toyType, playPositions[i].x, playPositions[i].y);
toy.x = giftBoxes[i].x;
toy.y = giftBoxes[i].y;
toys.push(toy);
game.addChild(toy);
// Animate to play position
tween(toy, {
x: playPositions[i].x,
y: playPositions[i].y
}, {
duration: 1000,
easing: tween.easeInOut
});
}
}
// Hide basket and gift boxes
tween(basket, {
alpha: 0.3
}, {
duration: 1000
});
for (var j = 0; j < giftBoxes.length; j++) {
tween(giftBoxes[j], {
alpha: 0.2
}, {
duration: 1000
});
}
}
// Game update loop
game.update = function () {
// No continuous updates needed for this game
};