/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var MilkGlass = Container.expand(function (x, y) { var self = Container.call(this); self.isUsed = false; self.startX = x; self.startY = y; self.glass = self.attachAsset('milkGlass', { anchorX: 0.5, anchorY: 0.5 }); self.x = x; self.y = y; self.resetPosition = function () { if (!self.isUsed) { tween(self, { x: self.startX, y: self.startY }, { duration: 500, easing: tween.easeOut }); } }; return self; }); var Potty = Container.expand(function (x, y) { var self = Container.call(this); self.pottyGraphics = self.attachAsset('potty', { anchorX: 0.5, anchorY: 0.5 }); self.x = x; self.y = y; return self; }); var PowerpuffGirl = Container.expand(function (girlType, x, y) { var self = Container.call(this); self.girlType = girlType; self.isAwake = false; self.hasDrunkMilk = false; self.hasUsedPotty = false; self.startX = x; self.startY = y; // Create girl body var bodyAsset = girlType + ''; self.body = self.attachAsset(bodyAsset, { anchorX: 0.5, anchorY: 0.5 }); // Create sleeping eyes initially self.leftEye = self.attachAsset('sleepingEyes', { anchorX: 0.5, anchorY: 0.5 }); self.leftEye.x = -40; self.leftEye.y = -50; self.rightEye = self.attachAsset('sleepingEyes', { anchorX: 0.5, anchorY: 0.5 }); self.rightEye.x = 40; self.rightEye.y = -50; self.x = x; self.y = y; self.wakeUp = function () { if (!self.isAwake) { self.isAwake = true; // Remove sleeping eyes self.removeChild(self.leftEye); self.removeChild(self.rightEye); // Add open eyes self.leftEye = self.attachAsset('openEyes', { anchorX: 0.5, anchorY: 0.5 }); self.leftEye.x = -40; self.leftEye.y = -50; self.leftEye.scaleX = 0.8; self.leftEye.scaleY = 0.8; self.rightEye = self.attachAsset('openEyes', { anchorX: 0.5, anchorY: 0.5 }); self.rightEye.x = 40; self.rightEye.y = -50; self.rightEye.scaleX = 0.8; self.rightEye.scaleY = 0.8; // Wake up animation tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 300, easing: tween.easeOut }); tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 300, easing: tween.easeIn }); } }; self.drinkMilk = function () { if (self.isAwake && !self.hasDrunkMilk) { self.hasDrunkMilk = true; // Happy animation tween(self, { y: self.y - 20 }, { duration: 200, easing: tween.easeOut }); tween(self, { y: self.startY }, { duration: 200, easing: tween.easeIn }); } }; self.usePotty = function () { if (self.hasDrunkMilk && !self.hasUsedPotty) { self.hasUsedPotty = true; // Play success sounds LK.getSound('ooh').play(); LK.setTimeout(function () { LK.getSound('clap').play(); }, 800); // Success animation tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 400, easing: tween.easeOut }); tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 400, easing: tween.easeIn }); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xFFE4E1 }); /**** * Game Code ****/ // Game state var gamePhase = 'wakeup'; // 'wakeup', 'milk', 'potty', 'complete' var draggedObject = null; var milkGlassesUsed = 0; var girlsOnPotty = 0; // Create Powerpuff Girls var blossom = game.addChild(new PowerpuffGirl('blossom', 500, 1000)); var bubbles = game.addChild(new PowerpuffGirl('bubbles', 1024, 1000)); var buttercup = game.addChild(new PowerpuffGirl('buttercup', 1548, 1000)); var girls = [blossom, bubbles, buttercup]; // Create milk glasses var milkGlass1 = game.addChild(new MilkGlass(400, 1800)); var milkGlass2 = game.addChild(new MilkGlass(1024, 1800)); var milkGlass3 = game.addChild(new MilkGlass(1648, 1800)); var milkGlasses = [milkGlass1, milkGlass2, milkGlass3]; // Create potties var potty1 = game.addChild(new Potty(500, 1500)); var potty2 = game.addChild(new Potty(1024, 1500)); var potty3 = game.addChild(new Potty(1548, 1500)); var potties = [potty1, potty2, potty3]; // Title text var titleText = new Text2('Help the Powerpuff Girls with their morning routine!', { size: 80, fill: 0xFF1493 }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); // Instructions text var instructionText = new Text2('Drag milk glasses to wake up the girls!', { size: 60, fill: 0x4169E1 }); instructionText.anchor.set(0.5, 0); instructionText.y = 100; LK.gui.top.addChild(instructionText); function updateInstructions() { if (gamePhase === 'milk') { instructionText.setText('Great! Now drag each girl to their potty!'); } else if (gamePhase === 'complete') { instructionText.setText('Well done! All girls completed their morning routine!'); } } function checkMilkPhaseComplete() { var allAwake = true; for (var i = 0; i < girls.length; i++) { if (!girls[i].hasDrunkMilk) { allAwake = false; break; } } if (allAwake && gamePhase === 'wakeup') { gamePhase = 'milk'; updateInstructions(); } } function checkPottyPhaseComplete() { var allDone = true; for (var i = 0; i < girls.length; i++) { if (!girls[i].hasUsedPotty) { allDone = false; break; } } if (allDone && gamePhase === 'milk') { gamePhase = 'complete'; updateInstructions(); } } function handleMove(x, y, obj) { if (draggedObject) { draggedObject.x = x; draggedObject.y = y; } } game.move = handleMove; game.down = function (x, y, obj) { // Check if clicking on milk glass for (var i = 0; i < milkGlasses.length; i++) { var milk = milkGlasses[i]; if (!milk.isUsed && milk.intersects({ x: x, y: y, width: 1, height: 1 })) { draggedObject = milk; return; } } // Check if clicking on girls (for potty phase) if (gamePhase === 'milk') { for (var i = 0; i < girls.length; i++) { var girl = girls[i]; if (girl.hasDrunkMilk && !girl.hasUsedPotty && girl.intersects({ x: x, y: y, width: 1, height: 1 })) { draggedObject = girl; return; } } } }; game.up = function (x, y, obj) { if (draggedObject) { // Handle milk glass drops for (var i = 0; i < milkGlasses.length; i++) { var milk = milkGlasses[i]; if (draggedObject === milk && !milk.isUsed) { // Check if dropped on a girl for (var j = 0; j < girls.length; j++) { var girl = girls[j]; if (!girl.isAwake && milk.intersects(girl)) { girl.wakeUp(); girl.drinkMilk(); milk.isUsed = true; milk.visible = false; milkGlassesUsed++; checkMilkPhaseComplete(); draggedObject = null; return; } } // If not dropped on girl, return to original position milk.resetPosition(); break; } } // Handle girl drops on potty for (var i = 0; i < girls.length; i++) { var girl = girls[i]; if (draggedObject === girl && girl.hasDrunkMilk && !girl.hasUsedPotty) { // Check if dropped on a potty for (var j = 0; j < potties.length; j++) { var potty = potties[j]; if (girl.intersects(potty)) { girl.usePotty(); girl.x = potty.x; girl.y = potty.y - 50; girlsOnPotty++; checkPottyPhaseComplete(); draggedObject = null; return; } } // If not dropped on potty, return to original position tween(girl, { x: girl.startX, y: girl.startY }, { duration: 500, easing: tween.easeOut }); break; } } draggedObject = null; } }; game.update = function () { // Game logic updates happen here if needed };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var MilkGlass = Container.expand(function (x, y) {
var self = Container.call(this);
self.isUsed = false;
self.startX = x;
self.startY = y;
self.glass = self.attachAsset('milkGlass', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = x;
self.y = y;
self.resetPosition = function () {
if (!self.isUsed) {
tween(self, {
x: self.startX,
y: self.startY
}, {
duration: 500,
easing: tween.easeOut
});
}
};
return self;
});
var Potty = Container.expand(function (x, y) {
var self = Container.call(this);
self.pottyGraphics = self.attachAsset('potty', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = x;
self.y = y;
return self;
});
var PowerpuffGirl = Container.expand(function (girlType, x, y) {
var self = Container.call(this);
self.girlType = girlType;
self.isAwake = false;
self.hasDrunkMilk = false;
self.hasUsedPotty = false;
self.startX = x;
self.startY = y;
// Create girl body
var bodyAsset = girlType + '';
self.body = self.attachAsset(bodyAsset, {
anchorX: 0.5,
anchorY: 0.5
});
// Create sleeping eyes initially
self.leftEye = self.attachAsset('sleepingEyes', {
anchorX: 0.5,
anchorY: 0.5
});
self.leftEye.x = -40;
self.leftEye.y = -50;
self.rightEye = self.attachAsset('sleepingEyes', {
anchorX: 0.5,
anchorY: 0.5
});
self.rightEye.x = 40;
self.rightEye.y = -50;
self.x = x;
self.y = y;
self.wakeUp = function () {
if (!self.isAwake) {
self.isAwake = true;
// Remove sleeping eyes
self.removeChild(self.leftEye);
self.removeChild(self.rightEye);
// Add open eyes
self.leftEye = self.attachAsset('openEyes', {
anchorX: 0.5,
anchorY: 0.5
});
self.leftEye.x = -40;
self.leftEye.y = -50;
self.leftEye.scaleX = 0.8;
self.leftEye.scaleY = 0.8;
self.rightEye = self.attachAsset('openEyes', {
anchorX: 0.5,
anchorY: 0.5
});
self.rightEye.x = 40;
self.rightEye.y = -50;
self.rightEye.scaleX = 0.8;
self.rightEye.scaleY = 0.8;
// Wake up animation
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 300,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 300,
easing: tween.easeIn
});
}
};
self.drinkMilk = function () {
if (self.isAwake && !self.hasDrunkMilk) {
self.hasDrunkMilk = true;
// Happy animation
tween(self, {
y: self.y - 20
}, {
duration: 200,
easing: tween.easeOut
});
tween(self, {
y: self.startY
}, {
duration: 200,
easing: tween.easeIn
});
}
};
self.usePotty = function () {
if (self.hasDrunkMilk && !self.hasUsedPotty) {
self.hasUsedPotty = true;
// Play success sounds
LK.getSound('ooh').play();
LK.setTimeout(function () {
LK.getSound('clap').play();
}, 800);
// Success animation
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 400,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 400,
easing: tween.easeIn
});
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFE4E1
});
/****
* Game Code
****/
// Game state
var gamePhase = 'wakeup'; // 'wakeup', 'milk', 'potty', 'complete'
var draggedObject = null;
var milkGlassesUsed = 0;
var girlsOnPotty = 0;
// Create Powerpuff Girls
var blossom = game.addChild(new PowerpuffGirl('blossom', 500, 1000));
var bubbles = game.addChild(new PowerpuffGirl('bubbles', 1024, 1000));
var buttercup = game.addChild(new PowerpuffGirl('buttercup', 1548, 1000));
var girls = [blossom, bubbles, buttercup];
// Create milk glasses
var milkGlass1 = game.addChild(new MilkGlass(400, 1800));
var milkGlass2 = game.addChild(new MilkGlass(1024, 1800));
var milkGlass3 = game.addChild(new MilkGlass(1648, 1800));
var milkGlasses = [milkGlass1, milkGlass2, milkGlass3];
// Create potties
var potty1 = game.addChild(new Potty(500, 1500));
var potty2 = game.addChild(new Potty(1024, 1500));
var potty3 = game.addChild(new Potty(1548, 1500));
var potties = [potty1, potty2, potty3];
// Title text
var titleText = new Text2('Help the Powerpuff Girls with their morning routine!', {
size: 80,
fill: 0xFF1493
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
// Instructions text
var instructionText = new Text2('Drag milk glasses to wake up the girls!', {
size: 60,
fill: 0x4169E1
});
instructionText.anchor.set(0.5, 0);
instructionText.y = 100;
LK.gui.top.addChild(instructionText);
function updateInstructions() {
if (gamePhase === 'milk') {
instructionText.setText('Great! Now drag each girl to their potty!');
} else if (gamePhase === 'complete') {
instructionText.setText('Well done! All girls completed their morning routine!');
}
}
function checkMilkPhaseComplete() {
var allAwake = true;
for (var i = 0; i < girls.length; i++) {
if (!girls[i].hasDrunkMilk) {
allAwake = false;
break;
}
}
if (allAwake && gamePhase === 'wakeup') {
gamePhase = 'milk';
updateInstructions();
}
}
function checkPottyPhaseComplete() {
var allDone = true;
for (var i = 0; i < girls.length; i++) {
if (!girls[i].hasUsedPotty) {
allDone = false;
break;
}
}
if (allDone && gamePhase === 'milk') {
gamePhase = 'complete';
updateInstructions();
}
}
function handleMove(x, y, obj) {
if (draggedObject) {
draggedObject.x = x;
draggedObject.y = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Check if clicking on milk glass
for (var i = 0; i < milkGlasses.length; i++) {
var milk = milkGlasses[i];
if (!milk.isUsed && milk.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedObject = milk;
return;
}
}
// Check if clicking on girls (for potty phase)
if (gamePhase === 'milk') {
for (var i = 0; i < girls.length; i++) {
var girl = girls[i];
if (girl.hasDrunkMilk && !girl.hasUsedPotty && girl.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedObject = girl;
return;
}
}
}
};
game.up = function (x, y, obj) {
if (draggedObject) {
// Handle milk glass drops
for (var i = 0; i < milkGlasses.length; i++) {
var milk = milkGlasses[i];
if (draggedObject === milk && !milk.isUsed) {
// Check if dropped on a girl
for (var j = 0; j < girls.length; j++) {
var girl = girls[j];
if (!girl.isAwake && milk.intersects(girl)) {
girl.wakeUp();
girl.drinkMilk();
milk.isUsed = true;
milk.visible = false;
milkGlassesUsed++;
checkMilkPhaseComplete();
draggedObject = null;
return;
}
}
// If not dropped on girl, return to original position
milk.resetPosition();
break;
}
}
// Handle girl drops on potty
for (var i = 0; i < girls.length; i++) {
var girl = girls[i];
if (draggedObject === girl && girl.hasDrunkMilk && !girl.hasUsedPotty) {
// Check if dropped on a potty
for (var j = 0; j < potties.length; j++) {
var potty = potties[j];
if (girl.intersects(potty)) {
girl.usePotty();
girl.x = potty.x;
girl.y = potty.y - 50;
girlsOnPotty++;
checkPottyPhaseComplete();
draggedObject = null;
return;
}
}
// If not dropped on potty, return to original position
tween(girl, {
x: girl.startX,
y: girl.startY
}, {
duration: 500,
easing: tween.easeOut
});
break;
}
}
draggedObject = null;
}
};
game.update = function () {
// Game logic updates happen here if needed
};