/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var MudSpot = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('mudspot', { anchorX: 0.5, anchorY: 0.5 }); self.cleaned = false; return self; }); var PowerpuffGirl = Container.expand(function (type) { var self = Container.call(this); var graphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 1.0 }); self.type = type; self.seated = false; self.originalX = 0; self.originalY = 0; return self; }); var WaterSpot = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('waterspot', { anchorX: 0.5, anchorY: 0.5 }); self.dried = false; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state variables var gameStage = 'trunk'; // trunk, wash, dry, seat, fly var draggedItem = null; // Create ground var ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 1.0, x: 0, y: 2732 })); // Create elephant var elephant = game.addChild(LK.getAsset('elephant', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1200 })); // Create trunk var trunk = game.addChild(LK.getAsset('trunk', { anchorX: 0.5, anchorY: 0.0, x: 1024, y: 1000 })); // Create mud spots on elephant var mudSpots = []; for (var i = 0; i < 6; i++) { var mudSpot = new MudSpot(); mudSpot.x = elephant.x + (Math.random() - 0.5) * 400; mudSpot.y = elephant.y + (Math.random() - 0.5) * 200; mudSpots.push(mudSpot); game.addChild(mudSpot); } // Create water spots (initially hidden) var waterSpots = []; for (var i = 0; i < 6; i++) { var waterSpot = new WaterSpot(); waterSpot.x = mudSpots[i].x; waterSpot.y = mudSpots[i].y; waterSpot.alpha = 0; waterSpots.push(waterSpot); game.addChild(waterSpot); } // Create sponge var sponge = game.addChild(LK.getAsset('sponge', { anchorX: 0.5, anchorY: 0.5, x: 200, y: 2000 })); // Create hair dryer var hairdryer = game.addChild(LK.getAsset('hairdryer', { anchorX: 0.5, anchorY: 0.5, x: 1800, y: 2000 })); // Create seats on elephant var seats = []; for (var i = 0; i < 3; i++) { var seat = game.addChild(LK.getAsset('seat', { anchorX: 0.5, anchorY: 0.5, x: elephant.x - 120 + i * 120, y: elephant.y - 100 })); seats.push(seat); } // Create Powerpuff Girls var blossom = new PowerpuffGirl('blossom'); blossom.x = 300; blossom.y = 2500; blossom.originalX = blossom.x; blossom.originalY = blossom.y; game.addChild(blossom); var bubbles = new PowerpuffGirl('bubbles'); bubbles.x = 1024; bubbles.y = 2500; bubbles.originalX = bubbles.x; bubbles.originalY = bubbles.y; game.addChild(bubbles); var buttercup = new PowerpuffGirl('buttercup'); buttercup.x = 1700; buttercup.y = 2500; buttercup.originalX = buttercup.x; buttercup.originalY = buttercup.y; game.addChild(buttercup); var girls = [blossom, bubbles, buttercup]; // Create instruction text var instructionText = new Text2('Pull the trunk down to the ground!', { size: 60, fill: 0x000000 }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); // Game functions function updateInstructions() { switch (gameStage) { case 'trunk': instructionText.setText('Pull the trunk down to the ground!'); break; case 'wash': instructionText.setText('Use the sponge to clean the mud!'); break; case 'dry': instructionText.setText('Use the hair dryer to dry the elephant!'); break; case 'seat': instructionText.setText('Place the Powerpuff Girls on the seats!'); break; case 'fly': instructionText.setText('Tap the elephant to make it fly!'); break; case 'complete': instructionText.setText('Adventure complete!'); break; } } function checkTrunkPulled() { if (trunk.y >= 2400) { // Trunk reaches ground level gameStage = 'wash'; updateInstructions(); return true; } return false; } function checkMudCleaned() { var allCleaned = true; for (var i = 0; i < mudSpots.length; i++) { if (!mudSpots[i].cleaned) { allCleaned = false; break; } } if (allCleaned && gameStage === 'wash') { gameStage = 'dry'; updateInstructions(); // Show water spots for (var i = 0; i < waterSpots.length; i++) { waterSpots[i].alpha = 1; } } return allCleaned; } function checkElephantDried() { var allDried = true; for (var i = 0; i < waterSpots.length; i++) { if (!waterSpots[i].dried) { allDried = false; break; } } if (allDried && gameStage === 'dry') { gameStage = 'seat'; updateInstructions(); } return allDried; } function checkAllSeated() { var allSeated = true; for (var i = 0; i < girls.length; i++) { if (!girls[i].seated) { allSeated = false; break; } } if (allSeated && gameStage === 'seat') { gameStage = 'fly'; updateInstructions(); } return allSeated; } function makeElephantFly() { if (gameStage === 'fly') { LK.getSound('fly').play(); // Animate elephant and girls flying up tween(elephant, { y: -200, scaleX: 0.5, scaleY: 0.5 }, { duration: 3000 }); tween(trunk, { y: -400 }, { duration: 3000 }); for (var i = 0; i < girls.length; i++) { if (girls[i].seated) { tween(girls[i], { y: girls[i].y - 1400, scaleX: 0.5, scaleY: 0.5 }, { duration: 3000 }); } } for (var i = 0; i < seats.length; i++) { tween(seats[i], { y: seats[i].y - 1400, scaleX: 0.5, scaleY: 0.5 }, { duration: 3000 }); } gameStage = 'complete'; LK.setTimeout(function () { updateInstructions(); LK.setTimeout(function () { LK.showYouWin(); }, 2000); }, 3000); } } // Event handlers game.down = function (x, y, obj) { if (gameStage === 'trunk' && trunk.intersects({ x: x, y: y, width: 1, height: 1 })) { draggedItem = trunk; } else if (gameStage === 'wash' && sponge.intersects({ x: x, y: y, width: 1, height: 1 })) { draggedItem = sponge; } else if (gameStage === 'dry' && hairdryer.intersects({ x: x, y: y, width: 1, height: 1 })) { draggedItem = hairdryer; } else if (gameStage === 'seat') { for (var i = 0; i < girls.length; i++) { if (!girls[i].seated && girls[i].intersects({ x: x, y: y, width: 1, height: 1 })) { draggedItem = girls[i]; break; } } } else if (gameStage === 'fly' && elephant.intersects({ x: x, y: y, width: 1, height: 1 })) { makeElephantFly(); } }; game.move = function (x, y, obj) { if (draggedItem) { draggedItem.x = x; draggedItem.y = y; if (draggedItem === trunk) { checkTrunkPulled(); } else if (draggedItem === sponge) { // Check collision with mud spots for (var i = 0; i < mudSpots.length; i++) { if (!mudSpots[i].cleaned && sponge.intersects(mudSpots[i])) { mudSpots[i].cleaned = true; mudSpots[i].alpha = 0; LK.getSound('splash').play(); } } checkMudCleaned(); } else if (draggedItem === hairdryer) { // Check collision with water spots for (var i = 0; i < waterSpots.length; i++) { if (!waterSpots[i].dried && hairdryer.intersects(waterSpots[i])) { waterSpots[i].dried = true; waterSpots[i].alpha = 0; LK.getSound('whoosh').play(); } } checkElephantDried(); } } }; game.up = function (x, y, obj) { if (draggedItem && gameStage === 'seat') { // Check if girl is dropped on a seat var droppedOnSeat = false; for (var i = 0; i < seats.length; i++) { if (draggedItem.intersects(seats[i])) { // Check if seat is already occupied var seatOccupied = false; for (var j = 0; j < girls.length; j++) { if (girls[j] !== draggedItem && girls[j].seated && Math.abs(girls[j].x - seats[i].x) < 50 && Math.abs(girls[j].y - seats[i].y) < 50) { seatOccupied = true; break; } } if (!seatOccupied) { draggedItem.x = seats[i].x; draggedItem.y = seats[i].y; draggedItem.seated = true; droppedOnSeat = true; break; } } } // If not dropped on valid seat, return to original position if (!droppedOnSeat) { draggedItem.x = draggedItem.originalX; draggedItem.y = draggedItem.originalY; draggedItem.seated = false; } checkAllSeated(); } draggedItem = null; }; // Initialize instructions updateInstructions();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var MudSpot = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('mudspot', {
anchorX: 0.5,
anchorY: 0.5
});
self.cleaned = false;
return self;
});
var PowerpuffGirl = Container.expand(function (type) {
var self = Container.call(this);
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 1.0
});
self.type = type;
self.seated = false;
self.originalX = 0;
self.originalY = 0;
return self;
});
var WaterSpot = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('waterspot', {
anchorX: 0.5,
anchorY: 0.5
});
self.dried = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state variables
var gameStage = 'trunk'; // trunk, wash, dry, seat, fly
var draggedItem = null;
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 1.0,
x: 0,
y: 2732
}));
// Create elephant
var elephant = game.addChild(LK.getAsset('elephant', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1200
}));
// Create trunk
var trunk = game.addChild(LK.getAsset('trunk', {
anchorX: 0.5,
anchorY: 0.0,
x: 1024,
y: 1000
}));
// Create mud spots on elephant
var mudSpots = [];
for (var i = 0; i < 6; i++) {
var mudSpot = new MudSpot();
mudSpot.x = elephant.x + (Math.random() - 0.5) * 400;
mudSpot.y = elephant.y + (Math.random() - 0.5) * 200;
mudSpots.push(mudSpot);
game.addChild(mudSpot);
}
// Create water spots (initially hidden)
var waterSpots = [];
for (var i = 0; i < 6; i++) {
var waterSpot = new WaterSpot();
waterSpot.x = mudSpots[i].x;
waterSpot.y = mudSpots[i].y;
waterSpot.alpha = 0;
waterSpots.push(waterSpot);
game.addChild(waterSpot);
}
// Create sponge
var sponge = game.addChild(LK.getAsset('sponge', {
anchorX: 0.5,
anchorY: 0.5,
x: 200,
y: 2000
}));
// Create hair dryer
var hairdryer = game.addChild(LK.getAsset('hairdryer', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 2000
}));
// Create seats on elephant
var seats = [];
for (var i = 0; i < 3; i++) {
var seat = game.addChild(LK.getAsset('seat', {
anchorX: 0.5,
anchorY: 0.5,
x: elephant.x - 120 + i * 120,
y: elephant.y - 100
}));
seats.push(seat);
}
// Create Powerpuff Girls
var blossom = new PowerpuffGirl('blossom');
blossom.x = 300;
blossom.y = 2500;
blossom.originalX = blossom.x;
blossom.originalY = blossom.y;
game.addChild(blossom);
var bubbles = new PowerpuffGirl('bubbles');
bubbles.x = 1024;
bubbles.y = 2500;
bubbles.originalX = bubbles.x;
bubbles.originalY = bubbles.y;
game.addChild(bubbles);
var buttercup = new PowerpuffGirl('buttercup');
buttercup.x = 1700;
buttercup.y = 2500;
buttercup.originalX = buttercup.x;
buttercup.originalY = buttercup.y;
game.addChild(buttercup);
var girls = [blossom, bubbles, buttercup];
// Create instruction text
var instructionText = new Text2('Pull the trunk down to the ground!', {
size: 60,
fill: 0x000000
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
// Game functions
function updateInstructions() {
switch (gameStage) {
case 'trunk':
instructionText.setText('Pull the trunk down to the ground!');
break;
case 'wash':
instructionText.setText('Use the sponge to clean the mud!');
break;
case 'dry':
instructionText.setText('Use the hair dryer to dry the elephant!');
break;
case 'seat':
instructionText.setText('Place the Powerpuff Girls on the seats!');
break;
case 'fly':
instructionText.setText('Tap the elephant to make it fly!');
break;
case 'complete':
instructionText.setText('Adventure complete!');
break;
}
}
function checkTrunkPulled() {
if (trunk.y >= 2400) {
// Trunk reaches ground level
gameStage = 'wash';
updateInstructions();
return true;
}
return false;
}
function checkMudCleaned() {
var allCleaned = true;
for (var i = 0; i < mudSpots.length; i++) {
if (!mudSpots[i].cleaned) {
allCleaned = false;
break;
}
}
if (allCleaned && gameStage === 'wash') {
gameStage = 'dry';
updateInstructions();
// Show water spots
for (var i = 0; i < waterSpots.length; i++) {
waterSpots[i].alpha = 1;
}
}
return allCleaned;
}
function checkElephantDried() {
var allDried = true;
for (var i = 0; i < waterSpots.length; i++) {
if (!waterSpots[i].dried) {
allDried = false;
break;
}
}
if (allDried && gameStage === 'dry') {
gameStage = 'seat';
updateInstructions();
}
return allDried;
}
function checkAllSeated() {
var allSeated = true;
for (var i = 0; i < girls.length; i++) {
if (!girls[i].seated) {
allSeated = false;
break;
}
}
if (allSeated && gameStage === 'seat') {
gameStage = 'fly';
updateInstructions();
}
return allSeated;
}
function makeElephantFly() {
if (gameStage === 'fly') {
LK.getSound('fly').play();
// Animate elephant and girls flying up
tween(elephant, {
y: -200,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
tween(trunk, {
y: -400
}, {
duration: 3000
});
for (var i = 0; i < girls.length; i++) {
if (girls[i].seated) {
tween(girls[i], {
y: girls[i].y - 1400,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
}
}
for (var i = 0; i < seats.length; i++) {
tween(seats[i], {
y: seats[i].y - 1400,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
}
gameStage = 'complete';
LK.setTimeout(function () {
updateInstructions();
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}, 3000);
}
}
// Event handlers
game.down = function (x, y, obj) {
if (gameStage === 'trunk' && trunk.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = trunk;
} else if (gameStage === 'wash' && sponge.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = sponge;
} else if (gameStage === 'dry' && hairdryer.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = hairdryer;
} else if (gameStage === 'seat') {
for (var i = 0; i < girls.length; i++) {
if (!girls[i].seated && girls[i].intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = girls[i];
break;
}
}
} else if (gameStage === 'fly' && elephant.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
makeElephantFly();
}
};
game.move = function (x, y, obj) {
if (draggedItem) {
draggedItem.x = x;
draggedItem.y = y;
if (draggedItem === trunk) {
checkTrunkPulled();
} else if (draggedItem === sponge) {
// Check collision with mud spots
for (var i = 0; i < mudSpots.length; i++) {
if (!mudSpots[i].cleaned && sponge.intersects(mudSpots[i])) {
mudSpots[i].cleaned = true;
mudSpots[i].alpha = 0;
LK.getSound('splash').play();
}
}
checkMudCleaned();
} else if (draggedItem === hairdryer) {
// Check collision with water spots
for (var i = 0; i < waterSpots.length; i++) {
if (!waterSpots[i].dried && hairdryer.intersects(waterSpots[i])) {
waterSpots[i].dried = true;
waterSpots[i].alpha = 0;
LK.getSound('whoosh').play();
}
}
checkElephantDried();
}
}
};
game.up = function (x, y, obj) {
if (draggedItem && gameStage === 'seat') {
// Check if girl is dropped on a seat
var droppedOnSeat = false;
for (var i = 0; i < seats.length; i++) {
if (draggedItem.intersects(seats[i])) {
// Check if seat is already occupied
var seatOccupied = false;
for (var j = 0; j < girls.length; j++) {
if (girls[j] !== draggedItem && girls[j].seated && Math.abs(girls[j].x - seats[i].x) < 50 && Math.abs(girls[j].y - seats[i].y) < 50) {
seatOccupied = true;
break;
}
}
if (!seatOccupied) {
draggedItem.x = seats[i].x;
draggedItem.y = seats[i].y;
draggedItem.seated = true;
droppedOnSeat = true;
break;
}
}
}
// If not dropped on valid seat, return to original position
if (!droppedOnSeat) {
draggedItem.x = draggedItem.originalX;
draggedItem.y = draggedItem.originalY;
draggedItem.seated = false;
}
checkAllSeated();
}
draggedItem = null;
};
// Initialize instructions
updateInstructions();