/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Creature = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.found = false; var creatureGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.reveal = function () { if (!self.found) { self.found = true; self.visible = true; tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.bounceOut }); LK.getSound('found').play(); LK.setScore(LK.getScore() + 10); foundCreatures++; updateScore(); } }; self.visible = false; return self; }); var DoneButton = Container.expand(function () { var self = Container.call(this); self.visible = false; var buttonGraphics = self.attachAsset('doneButton', { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2('DONE', { size: 40, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.down = function (x, y, obj) { if (self.visible) { startCelebration(); } }; return self; }); var MudTile = Container.expand(function () { var self = Container.call(this); self.cleared = false; var mudGraphics = self.attachAsset('mudOverlay', { anchorX: 0.5, anchorY: 0.5 }); self.clear = function () { if (!self.cleared) { self.cleared = true; clearedTiles++; tween(self, { alpha: 0 }, { duration: 200 }); LK.getSound('dig').play(); } }; return self; }); var PowerpuffGirl = Container.expand(function () { var self = Container.call(this); var girlGraphics = self.attachAsset('powerpuffGirl', { anchorX: 0.5, anchorY: 0.5 }); self.jump = function () { var originalY = self.y; tween(self, { y: originalY - 200 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { y: originalY }, { duration: 500, easing: tween.bounceOut }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x4A4A4A }); /**** * Game Code ****/ var mudTiles = []; var creatures = []; var powerpuffGirls = []; var foundCreatures = 0; var clearedTiles = 0; var totalTiles = 0; var currentLevel = 1; var isDragging = false; var celebrationStarted = false; // Create mud background var mudBackground = game.addChild(LK.getAsset('mud', { x: 0, y: 0 })); // Create score display var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Create creatures found display var creaturesText = new Text2('Creatures Found: 0', { size: 40, fill: 0xFFFFFF }); creaturesText.anchor.set(0.5, 0); creaturesText.y = 80; LK.gui.top.addChild(creaturesText); // Create done button var doneButton = game.addChild(new DoneButton()); doneButton.x = 2048 - 150; doneButton.y = 2732 - 100; // Create powerpuff girls for (var i = 0; i < 3; i++) { var girl = game.addChild(new PowerpuffGirl()); girl.x = 300 + i * 200; girl.y = 2732 - 200; girl.visible = false; powerpuffGirls.push(girl); } function initLevel() { // Clear existing elements for (var i = 0; i < mudTiles.length; i++) { mudTiles[i].destroy(); } for (var i = 0; i < creatures.length; i++) { creatures[i].destroy(); } mudTiles = []; creatures = []; foundCreatures = 0; clearedTiles = 0; celebrationStarted = false; // Create mud tiles grid var tileSize = 100; var rows = Math.floor(2732 / tileSize); var cols = Math.floor(2048 / tileSize); for (var row = 0; row < rows; row++) { for (var col = 0; col < cols; col++) { var tile = game.addChild(new MudTile()); tile.x = col * tileSize + tileSize / 2; tile.y = row * tileSize + tileSize / 2; mudTiles.push(tile); } } totalTiles = mudTiles.length; // Create creatures randomly var creatureTypes = ['crab', 'frog', 'chameleon', 'worm']; var numCreatures = Math.min(15 + currentLevel * 3, 30); for (var i = 0; i < numCreatures; i++) { var creature = game.addChild(new Creature(creatureTypes[Math.floor(Math.random() * creatureTypes.length)])); creature.x = Math.random() * (2048 - 160) + 80; creature.y = Math.random() * (2732 - 160) + 80; creatures.push(creature); } doneButton.visible = false; for (var i = 0; i < powerpuffGirls.length; i++) { powerpuffGirls[i].visible = false; } } function updateScore() { scoreText.setText('Score: ' + LK.getScore()); creaturesText.setText('Creatures Found: ' + foundCreatures); } function checkProgress() { var progressPercent = clearedTiles / totalTiles; if (progressPercent > 0.3 && !doneButton.visible) { doneButton.visible = true; tween(doneButton, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.bounceOut }); } } function startCelebration() { if (celebrationStarted) return; celebrationStarted = true; doneButton.visible = false; // Show powerpuff girls for (var i = 0; i < powerpuffGirls.length; i++) { powerpuffGirls[i].visible = true; var delay = i * 200; LK.setTimeout(function (girl) { return function () { girl.jump(); }; }(powerpuffGirls[i]), delay); } LK.getSound('celebration').play(); // Start next level after celebration LK.setTimeout(function () { currentLevel++; initLevel(); }, 3000); } function handleDig(x, y) { // Check mud tiles for (var i = 0; i < mudTiles.length; i++) { var tile = mudTiles[i]; if (!tile.cleared) { var dx = x - tile.x; var dy = y - tile.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 80) { tile.clear(); } } } // Check creatures for (var i = 0; i < creatures.length; i++) { var creature = creatures[i]; if (!creature.found) { var dx = x - creature.x; var dy = y - creature.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 60) { creature.reveal(); } } } } game.down = function (x, y, obj) { isDragging = true; handleDig(x, y); }; game.move = function (x, y, obj) { if (isDragging) { handleDig(x, y); } }; game.up = function (x, y, obj) { isDragging = false; }; game.update = function () { checkProgress(); }; // Initialize first level initLevel();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Creature = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
self.found = false;
var creatureGraphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.reveal = function () {
if (!self.found) {
self.found = true;
self.visible = true;
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300,
easing: tween.bounceOut
});
LK.getSound('found').play();
LK.setScore(LK.getScore() + 10);
foundCreatures++;
updateScore();
}
};
self.visible = false;
return self;
});
var DoneButton = Container.expand(function () {
var self = Container.call(this);
self.visible = false;
var buttonGraphics = self.attachAsset('doneButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('DONE', {
size: 40,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
if (self.visible) {
startCelebration();
}
};
return self;
});
var MudTile = Container.expand(function () {
var self = Container.call(this);
self.cleared = false;
var mudGraphics = self.attachAsset('mudOverlay', {
anchorX: 0.5,
anchorY: 0.5
});
self.clear = function () {
if (!self.cleared) {
self.cleared = true;
clearedTiles++;
tween(self, {
alpha: 0
}, {
duration: 200
});
LK.getSound('dig').play();
}
};
return self;
});
var PowerpuffGirl = Container.expand(function () {
var self = Container.call(this);
var girlGraphics = self.attachAsset('powerpuffGirl', {
anchorX: 0.5,
anchorY: 0.5
});
self.jump = function () {
var originalY = self.y;
tween(self, {
y: originalY - 200
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
y: originalY
}, {
duration: 500,
easing: tween.bounceOut
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4A4A4A
});
/****
* Game Code
****/
var mudTiles = [];
var creatures = [];
var powerpuffGirls = [];
var foundCreatures = 0;
var clearedTiles = 0;
var totalTiles = 0;
var currentLevel = 1;
var isDragging = false;
var celebrationStarted = false;
// Create mud background
var mudBackground = game.addChild(LK.getAsset('mud', {
x: 0,
y: 0
}));
// Create score display
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create creatures found display
var creaturesText = new Text2('Creatures Found: 0', {
size: 40,
fill: 0xFFFFFF
});
creaturesText.anchor.set(0.5, 0);
creaturesText.y = 80;
LK.gui.top.addChild(creaturesText);
// Create done button
var doneButton = game.addChild(new DoneButton());
doneButton.x = 2048 - 150;
doneButton.y = 2732 - 100;
// Create powerpuff girls
for (var i = 0; i < 3; i++) {
var girl = game.addChild(new PowerpuffGirl());
girl.x = 300 + i * 200;
girl.y = 2732 - 200;
girl.visible = false;
powerpuffGirls.push(girl);
}
function initLevel() {
// Clear existing elements
for (var i = 0; i < mudTiles.length; i++) {
mudTiles[i].destroy();
}
for (var i = 0; i < creatures.length; i++) {
creatures[i].destroy();
}
mudTiles = [];
creatures = [];
foundCreatures = 0;
clearedTiles = 0;
celebrationStarted = false;
// Create mud tiles grid
var tileSize = 100;
var rows = Math.floor(2732 / tileSize);
var cols = Math.floor(2048 / tileSize);
for (var row = 0; row < rows; row++) {
for (var col = 0; col < cols; col++) {
var tile = game.addChild(new MudTile());
tile.x = col * tileSize + tileSize / 2;
tile.y = row * tileSize + tileSize / 2;
mudTiles.push(tile);
}
}
totalTiles = mudTiles.length;
// Create creatures randomly
var creatureTypes = ['crab', 'frog', 'chameleon', 'worm'];
var numCreatures = Math.min(15 + currentLevel * 3, 30);
for (var i = 0; i < numCreatures; i++) {
var creature = game.addChild(new Creature(creatureTypes[Math.floor(Math.random() * creatureTypes.length)]));
creature.x = Math.random() * (2048 - 160) + 80;
creature.y = Math.random() * (2732 - 160) + 80;
creatures.push(creature);
}
doneButton.visible = false;
for (var i = 0; i < powerpuffGirls.length; i++) {
powerpuffGirls[i].visible = false;
}
}
function updateScore() {
scoreText.setText('Score: ' + LK.getScore());
creaturesText.setText('Creatures Found: ' + foundCreatures);
}
function checkProgress() {
var progressPercent = clearedTiles / totalTiles;
if (progressPercent > 0.3 && !doneButton.visible) {
doneButton.visible = true;
tween(doneButton, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300,
easing: tween.bounceOut
});
}
}
function startCelebration() {
if (celebrationStarted) return;
celebrationStarted = true;
doneButton.visible = false;
// Show powerpuff girls
for (var i = 0; i < powerpuffGirls.length; i++) {
powerpuffGirls[i].visible = true;
var delay = i * 200;
LK.setTimeout(function (girl) {
return function () {
girl.jump();
};
}(powerpuffGirls[i]), delay);
}
LK.getSound('celebration').play();
// Start next level after celebration
LK.setTimeout(function () {
currentLevel++;
initLevel();
}, 3000);
}
function handleDig(x, y) {
// Check mud tiles
for (var i = 0; i < mudTiles.length; i++) {
var tile = mudTiles[i];
if (!tile.cleared) {
var dx = x - tile.x;
var dy = y - tile.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 80) {
tile.clear();
}
}
}
// Check creatures
for (var i = 0; i < creatures.length; i++) {
var creature = creatures[i];
if (!creature.found) {
var dx = x - creature.x;
var dy = y - creature.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 60) {
creature.reveal();
}
}
}
}
game.down = function (x, y, obj) {
isDragging = true;
handleDig(x, y);
};
game.move = function (x, y, obj) {
if (isDragging) {
handleDig(x, y);
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
game.update = function () {
checkProgress();
};
// Initialize first level
initLevel();