/****
* 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
};