Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls Summer Holiday Adventure
Initial prompt
Toca summer holiday (2015). Tap on level 1 tilt your device to make the sea fall for the powerpuff girls, level 2 tap 3 gifts to open for blossom bubbles and buttercup, level 3 drag and drop 5 items onto the powerpuff girls’s bag 💼, or level 4 rub out the white screen to see a movie video at the cinema.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var GiftBox = Container.expand(function (type) { var self = Container.call(this); var boxType = type || 'giftBox1'; var boxGraphics = self.attachAsset(boxType, { anchorX: 0.5, anchorY: 0.5 }); self.isOpened = false; self.boxType = boxType; self.down = function (x, y, obj) { if (!self.isOpened) { self.isOpened = true; tween(boxGraphics, { scaleX: 1.2, scaleY: 1.2, tint: 0xFFFFFF }, { duration: 300 }); LK.getSound('success').play(); // Check if all boxes are opened var allOpened = true; for (var i = 0; i < giftBoxes.length; i++) { if (!giftBoxes[i].isOpened) { allOpened = false; break; } } if (allOpened) { LK.setTimeout(function () { nextLevel(); }, 1000); } } }; return self; }); var LevelButton = Container.expand(function (levelNum) { var self = Container.call(this); var buttonGraphics = self.attachAsset('levelButton', { anchorX: 0.5, anchorY: 0.5 }); self.levelNum = levelNum; // Add level text var levelText = new Text2('Level ' + levelNum, { size: 40, fill: 0xFFFFFF }); levelText.anchor.set(0.5, 0.5); self.addChild(levelText); self.down = function (x, y, obj) { startLevel(levelNum); }; return self; }); var OceanWave = Container.expand(function () { var self = Container.call(this); var waveGraphics = self.attachAsset('oceanWave', { anchorX: 0.5, anchorY: 0.5 }); self.baseY = 0; self.amplitude = 50; self.frequency = 0.05; self.phase = 0; self.update = function () { self.phase += 0.1; self.y = self.baseY + Math.sin(self.phase) * self.amplitude; }; return self; }); var SummerItem = Container.expand(function (itemType) { var self = Container.call(this); var itemGraphics = self.attachAsset(itemType, { anchorX: 0.5, anchorY: 0.5 }); self.itemType = itemType; self.isDragging = false; self.isPacked = false; self.originalX = 0; self.originalY = 0; self.down = function (x, y, obj) { if (!self.isPacked) { self.isDragging = true; draggedItem = self; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var currentLevel = storage.currentLevel || 1; var gameState = 'menu'; // 'menu', 'level1', 'level2', 'level3', 'level4' var levelButtons = []; var oceanWaves = []; var giftBoxes = []; var summerItems = []; var adventureBag = null; var draggedItem = null; var whiteOverlay = null; var cinemaScreen = null; var erasedPixels = []; // Title text var titleText = new Text2('Powerpuff Girls\nSummer Holiday Adventure', { size: 80, fill: 0xFF1493 }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 400; LK.gui.center.addChild(titleText); function createMenu() { gameState = 'menu'; // Create level buttons for (var i = 1; i <= 4; i++) { var button = new LevelButton(i); button.x = 400 + (i - 1) * 300; button.y = 1000; if (i > currentLevel) { button.alpha = 0.5; } levelButtons.push(button); game.addChild(button); } } function startLevel(levelNum) { if (levelNum > currentLevel) return; clearGame(); gameState = 'level' + levelNum; switch (levelNum) { case 1: initLevel1(); break; case 2: initLevel2(); break; case 3: initLevel3(); break; case 4: initLevel4(); break; } } function initLevel1() { // Ocean waves level for (var i = 0; i < 5; i++) { var wave = new OceanWave(); wave.x = 200 + i * 350; wave.y = 1366 + i * 50; wave.baseY = wave.y; wave.phase = i * 0.5; oceanWaves.push(wave); game.addChild(wave); } // Complete level after 5 seconds LK.setTimeout(function () { nextLevel(); }, 5000); } function initLevel2() { // Gift boxes level var boxTypes = ['giftBox1', 'giftBox2', 'giftBox3']; for (var i = 0; i < 3; i++) { var box = new GiftBox(boxTypes[i]); box.x = 400 + i * 400; box.y = 1366; giftBoxes.push(box); game.addChild(box); } // Add instruction text var instructionText = new Text2('Tap the gift boxes!', { size: 60, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 800; game.addChild(instructionText); } function initLevel3() { // Bag packing level adventureBag = game.addChild(LK.getAsset('adventureBag', { anchorX: 0.5, anchorY: 0.5 })); adventureBag.x = 1024; adventureBag.y = 2000; // Create summer items var itemTypes = ['sunglasses', 'beachBall', 'sunscreen', 'towel', 'hat']; for (var i = 0; i < 5; i++) { var item = new SummerItem(itemTypes[i]); item.x = 200 + i * 300; item.y = 1000; item.originalX = item.x; item.originalY = item.y; summerItems.push(item); game.addChild(item); } // Add instruction text var instructionText = new Text2('Drag items to the bag!', { size: 60, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 600; game.addChild(instructionText); } function initLevel4() { // Cinema reveal level cinemaScreen = game.addChild(LK.getAsset('cinemaScreen', { anchorX: 0.5, anchorY: 0.5 })); cinemaScreen.x = 1024; cinemaScreen.y = 1366; whiteOverlay = game.addChild(LK.getAsset('whiteOverlay', { anchorX: 0.5, anchorY: 0.5 })); whiteOverlay.x = 1024; whiteOverlay.y = 1366; // Add instruction text var instructionText = new Text2('Rub to reveal the cinema!', { size: 60, fill: 0x000000 }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 300; game.addChild(instructionText); } function clearGame() { // Remove all game objects for (var i = 0; i < levelButtons.length; i++) { levelButtons[i].destroy(); } levelButtons = []; for (var i = 0; i < oceanWaves.length; i++) { oceanWaves[i].destroy(); } oceanWaves = []; for (var i = 0; i < giftBoxes.length; i++) { giftBoxes[i].destroy(); } giftBoxes = []; for (var i = 0; i < summerItems.length; i++) { summerItems[i].destroy(); } summerItems = []; if (adventureBag) { adventureBag.destroy(); adventureBag = null; } if (whiteOverlay) { whiteOverlay.destroy(); whiteOverlay = null; } if (cinemaScreen) { cinemaScreen.destroy(); cinemaScreen = null; } // Clear any remaining children while (game.children.length > 0) { game.children[0].destroy(); } draggedItem = null; erasedPixels = []; } function nextLevel() { LK.getSound('complete').play(); currentLevel++; storage.currentLevel = currentLevel; if (currentLevel > 4) { // Game completed LK.showYouWin(); } else { // Return to menu clearGame(); createMenu(); } } function handleMove(x, y, obj) { if (gameState === 'level3' && draggedItem) { draggedItem.x = x; draggedItem.y = y; } if (gameState === 'level4' && whiteOverlay) { // Erase white overlay by reducing alpha in touched area var distance = Math.sqrt(Math.pow(x - whiteOverlay.x, 2) + Math.pow(y - whiteOverlay.y, 2)); if (distance < 100) { whiteOverlay.alpha -= 0.02; if (whiteOverlay.alpha <= 0) { whiteOverlay.alpha = 0; LK.setTimeout(function () { nextLevel(); }, 1000); } } } } function handleDown(x, y, obj) { // Handle level 3 item selection if (gameState === 'level3') { for (var i = 0; i < summerItems.length; i++) { var item = summerItems[i]; if (!item.isPacked && item.intersects({ x: x, y: y, width: 1, height: 1 })) { draggedItem = item; break; } } } } function handleUp(x, y, obj) { if (gameState === 'level3' && draggedItem && adventureBag) { // Check if item is dropped on bag if (draggedItem.intersects(adventureBag)) { draggedItem.isPacked = true; draggedItem.x = adventureBag.x; draggedItem.y = adventureBag.y; draggedItem.alpha = 0.5; LK.getSound('success').play(); // Check if all items are packed var allPacked = true; for (var i = 0; i < summerItems.length; i++) { if (!summerItems[i].isPacked) { allPacked = false; break; } } if (allPacked) { LK.setTimeout(function () { nextLevel(); }, 1000); } } else { // Return to original position draggedItem.x = draggedItem.originalX; draggedItem.y = draggedItem.originalY; } } draggedItem = null; } game.move = handleMove; game.down = handleDown; game.up = handleUp; game.update = function () { // Update ocean waves for (var i = 0; i < oceanWaves.length; i++) { oceanWaves[i].update(); } }; // Initialize the game createMenu();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var GiftBox = Container.expand(function (type) {
var self = Container.call(this);
var boxType = type || 'giftBox1';
var boxGraphics = self.attachAsset(boxType, {
anchorX: 0.5,
anchorY: 0.5
});
self.isOpened = false;
self.boxType = boxType;
self.down = function (x, y, obj) {
if (!self.isOpened) {
self.isOpened = true;
tween(boxGraphics, {
scaleX: 1.2,
scaleY: 1.2,
tint: 0xFFFFFF
}, {
duration: 300
});
LK.getSound('success').play();
// Check if all boxes are opened
var allOpened = true;
for (var i = 0; i < giftBoxes.length; i++) {
if (!giftBoxes[i].isOpened) {
allOpened = false;
break;
}
}
if (allOpened) {
LK.setTimeout(function () {
nextLevel();
}, 1000);
}
}
};
return self;
});
var LevelButton = Container.expand(function (levelNum) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('levelButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.levelNum = levelNum;
// Add level text
var levelText = new Text2('Level ' + levelNum, {
size: 40,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
self.addChild(levelText);
self.down = function (x, y, obj) {
startLevel(levelNum);
};
return self;
});
var OceanWave = Container.expand(function () {
var self = Container.call(this);
var waveGraphics = self.attachAsset('oceanWave', {
anchorX: 0.5,
anchorY: 0.5
});
self.baseY = 0;
self.amplitude = 50;
self.frequency = 0.05;
self.phase = 0;
self.update = function () {
self.phase += 0.1;
self.y = self.baseY + Math.sin(self.phase) * self.amplitude;
};
return self;
});
var SummerItem = Container.expand(function (itemType) {
var self = Container.call(this);
var itemGraphics = self.attachAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5
});
self.itemType = itemType;
self.isDragging = false;
self.isPacked = false;
self.originalX = 0;
self.originalY = 0;
self.down = function (x, y, obj) {
if (!self.isPacked) {
self.isDragging = true;
draggedItem = self;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var currentLevel = storage.currentLevel || 1;
var gameState = 'menu'; // 'menu', 'level1', 'level2', 'level3', 'level4'
var levelButtons = [];
var oceanWaves = [];
var giftBoxes = [];
var summerItems = [];
var adventureBag = null;
var draggedItem = null;
var whiteOverlay = null;
var cinemaScreen = null;
var erasedPixels = [];
// Title text
var titleText = new Text2('Powerpuff Girls\nSummer Holiday Adventure', {
size: 80,
fill: 0xFF1493
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
LK.gui.center.addChild(titleText);
function createMenu() {
gameState = 'menu';
// Create level buttons
for (var i = 1; i <= 4; i++) {
var button = new LevelButton(i);
button.x = 400 + (i - 1) * 300;
button.y = 1000;
if (i > currentLevel) {
button.alpha = 0.5;
}
levelButtons.push(button);
game.addChild(button);
}
}
function startLevel(levelNum) {
if (levelNum > currentLevel) return;
clearGame();
gameState = 'level' + levelNum;
switch (levelNum) {
case 1:
initLevel1();
break;
case 2:
initLevel2();
break;
case 3:
initLevel3();
break;
case 4:
initLevel4();
break;
}
}
function initLevel1() {
// Ocean waves level
for (var i = 0; i < 5; i++) {
var wave = new OceanWave();
wave.x = 200 + i * 350;
wave.y = 1366 + i * 50;
wave.baseY = wave.y;
wave.phase = i * 0.5;
oceanWaves.push(wave);
game.addChild(wave);
}
// Complete level after 5 seconds
LK.setTimeout(function () {
nextLevel();
}, 5000);
}
function initLevel2() {
// Gift boxes level
var boxTypes = ['giftBox1', 'giftBox2', 'giftBox3'];
for (var i = 0; i < 3; i++) {
var box = new GiftBox(boxTypes[i]);
box.x = 400 + i * 400;
box.y = 1366;
giftBoxes.push(box);
game.addChild(box);
}
// Add instruction text
var instructionText = new Text2('Tap the gift boxes!', {
size: 60,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 800;
game.addChild(instructionText);
}
function initLevel3() {
// Bag packing level
adventureBag = game.addChild(LK.getAsset('adventureBag', {
anchorX: 0.5,
anchorY: 0.5
}));
adventureBag.x = 1024;
adventureBag.y = 2000;
// Create summer items
var itemTypes = ['sunglasses', 'beachBall', 'sunscreen', 'towel', 'hat'];
for (var i = 0; i < 5; i++) {
var item = new SummerItem(itemTypes[i]);
item.x = 200 + i * 300;
item.y = 1000;
item.originalX = item.x;
item.originalY = item.y;
summerItems.push(item);
game.addChild(item);
}
// Add instruction text
var instructionText = new Text2('Drag items to the bag!', {
size: 60,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 600;
game.addChild(instructionText);
}
function initLevel4() {
// Cinema reveal level
cinemaScreen = game.addChild(LK.getAsset('cinemaScreen', {
anchorX: 0.5,
anchorY: 0.5
}));
cinemaScreen.x = 1024;
cinemaScreen.y = 1366;
whiteOverlay = game.addChild(LK.getAsset('whiteOverlay', {
anchorX: 0.5,
anchorY: 0.5
}));
whiteOverlay.x = 1024;
whiteOverlay.y = 1366;
// Add instruction text
var instructionText = new Text2('Rub to reveal the cinema!', {
size: 60,
fill: 0x000000
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 300;
game.addChild(instructionText);
}
function clearGame() {
// Remove all game objects
for (var i = 0; i < levelButtons.length; i++) {
levelButtons[i].destroy();
}
levelButtons = [];
for (var i = 0; i < oceanWaves.length; i++) {
oceanWaves[i].destroy();
}
oceanWaves = [];
for (var i = 0; i < giftBoxes.length; i++) {
giftBoxes[i].destroy();
}
giftBoxes = [];
for (var i = 0; i < summerItems.length; i++) {
summerItems[i].destroy();
}
summerItems = [];
if (adventureBag) {
adventureBag.destroy();
adventureBag = null;
}
if (whiteOverlay) {
whiteOverlay.destroy();
whiteOverlay = null;
}
if (cinemaScreen) {
cinemaScreen.destroy();
cinemaScreen = null;
}
// Clear any remaining children
while (game.children.length > 0) {
game.children[0].destroy();
}
draggedItem = null;
erasedPixels = [];
}
function nextLevel() {
LK.getSound('complete').play();
currentLevel++;
storage.currentLevel = currentLevel;
if (currentLevel > 4) {
// Game completed
LK.showYouWin();
} else {
// Return to menu
clearGame();
createMenu();
}
}
function handleMove(x, y, obj) {
if (gameState === 'level3' && draggedItem) {
draggedItem.x = x;
draggedItem.y = y;
}
if (gameState === 'level4' && whiteOverlay) {
// Erase white overlay by reducing alpha in touched area
var distance = Math.sqrt(Math.pow(x - whiteOverlay.x, 2) + Math.pow(y - whiteOverlay.y, 2));
if (distance < 100) {
whiteOverlay.alpha -= 0.02;
if (whiteOverlay.alpha <= 0) {
whiteOverlay.alpha = 0;
LK.setTimeout(function () {
nextLevel();
}, 1000);
}
}
}
}
function handleDown(x, y, obj) {
// Handle level 3 item selection
if (gameState === 'level3') {
for (var i = 0; i < summerItems.length; i++) {
var item = summerItems[i];
if (!item.isPacked && item.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = item;
break;
}
}
}
}
function handleUp(x, y, obj) {
if (gameState === 'level3' && draggedItem && adventureBag) {
// Check if item is dropped on bag
if (draggedItem.intersects(adventureBag)) {
draggedItem.isPacked = true;
draggedItem.x = adventureBag.x;
draggedItem.y = adventureBag.y;
draggedItem.alpha = 0.5;
LK.getSound('success').play();
// Check if all items are packed
var allPacked = true;
for (var i = 0; i < summerItems.length; i++) {
if (!summerItems[i].isPacked) {
allPacked = false;
break;
}
}
if (allPacked) {
LK.setTimeout(function () {
nextLevel();
}, 1000);
}
} else {
// Return to original position
draggedItem.x = draggedItem.originalX;
draggedItem.y = draggedItem.originalY;
}
}
draggedItem = null;
}
game.move = handleMove;
game.down = handleDown;
game.up = handleUp;
game.update = function () {
// Update ocean waves
for (var i = 0; i < oceanWaves.length; i++) {
oceanWaves[i].update();
}
};
// Initialize the game
createMenu();