Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls: Hide and Seek Challenge
Initial prompt
The powerpuff girls: tap on level 1 chicken, or level 2 sheep, or level 3 pig to get started. Where is it hiding tap on it 20 times. Before the time runs out. Till the powerpuff girls say I’ve got you. Hahahaha.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Animal = Container.expand(function (type) {
var self = Container.call(this);
var animalSprite = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.animalType = type;
self.isHiding = false;
self.hide = function () {
self.isHiding = true;
var hideX = Math.random() * (2048 - 100) + 50;
var hideY = Math.random() * (2732 - 400) + 200; // Avoid UI areas
tween(self, {
x: hideX,
y: hideY
}, {
duration: 300,
onFinish: function onFinish() {
self.isHiding = false;
}
});
};
self.down = function (x, y, obj) {
if (!self.isHiding && gameState === 'playing') {
tapsCount++;
updateTapCounter();
LK.getSound('tap').play();
// Flash effect
tween(animalSprite, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 100
});
tween(animalSprite, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
if (tapsCount >= 20) {
winLevel();
} else {
self.hide();
}
}
};
return self;
});
var LevelButton = Container.expand(function (level, animal, color) {
var self = Container.call(this);
var button = self.attachAsset('levelButton', {
anchorX: 0.5,
anchorY: 0.5
});
button.tint = color;
var levelText = new Text2('Level ' + level, {
size: 40,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.3);
self.addChild(levelText);
var animalText = new Text2(animal, {
size: 32,
fill: 0xFFFFFF
});
animalText.anchor.set(0.5, 0.7);
self.addChild(animalText);
self.level = level;
self.down = function (x, y, obj) {
startLevel(self.level);
LK.getSound('tap').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state variables
var gameState = 'menu'; // 'menu', 'playing', 'won', 'lost'
var currentLevel = 1;
var tapsCount = 0;
var timeRemaining = 0;
var maxTime = 0;
var currentAnimal = null;
// UI elements
var levelButtons = [];
var tapCounterText = null;
var timerBarBg = null;
var timerBar = null;
var timerText = null;
var titleText = null;
var instructionText = null;
// Level configurations
var levelConfigs = {
1: {
animal: 'chicken',
time: 60000,
name: 'Chicken'
},
2: {
animal: 'sheep',
time: 45000,
name: 'Sheep'
},
3: {
animal: 'pig',
time: 30000,
name: 'Pig'
}
};
function initializeMenu() {
gameState = 'menu';
// Clear existing elements
game.removeChildren();
// Title
titleText = new Text2('Powerpuff Girls\nHide and Seek Challenge', {
size: 60,
fill: 0xFF1493
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 500;
game.addChild(titleText);
// Instructions
instructionText = new Text2('Find and tap the hidden animal 20 times!\nChoose your difficulty level:', {
size: 40,
fill: 0x000000
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 2048 / 2;
instructionText.y = 800;
game.addChild(instructionText);
// Level buttons
levelButtons = [];
var buttonColors = [0xFF69B4, 0xFF4500, 0x8A2BE2];
for (var i = 1; i <= 3; i++) {
var button = new LevelButton(i, levelConfigs[i].name, buttonColors[i - 1]);
button.x = 2048 / 2;
button.y = 1200 + (i - 1) * 200;
levelButtons.push(button);
game.addChild(button);
}
}
function startLevel(level) {
gameState = 'playing';
currentLevel = level;
tapsCount = 0;
var config = levelConfigs[level];
maxTime = config.time;
timeRemaining = maxTime;
// Clear menu
game.removeChildren();
// Create animal
currentAnimal = new Animal(config.animal);
currentAnimal.x = 2048 / 2;
currentAnimal.y = 2732 / 2;
game.addChild(currentAnimal);
// Hide animal initially
LK.setTimeout(function () {
currentAnimal.hide();
}, 1000);
setupGameUI();
}
function setupGameUI() {
// Tap counter
tapCounterText = new Text2('Taps: 0/20', {
size: 50,
fill: 0xFFFFFF
});
tapCounterText.anchor.set(0.5, 0);
LK.gui.top.addChild(tapCounterText);
// Timer background
timerBarBg = LK.getAsset('timerBg', {
anchorX: 0.5,
anchorY: 0
});
timerBarBg.x = 2048 / 2;
timerBarBg.y = 100;
game.addChild(timerBarBg);
// Timer bar
timerBar = LK.getAsset('timerBar', {
anchorX: 0,
anchorY: 0
});
timerBar.x = timerBarBg.x - timerBarBg.width / 2;
timerBar.y = timerBarBg.y;
game.addChild(timerBar);
// Timer text
timerText = new Text2('Time: ' + Math.ceil(timeRemaining / 1000), {
size: 35,
fill: 0xFFFFFF
});
timerText.anchor.set(0.5, 0.5);
timerText.x = timerBarBg.x;
timerText.y = timerBarBg.y + timerBarBg.height / 2;
game.addChild(timerText);
}
function updateTapCounter() {
if (tapCounterText) {
tapCounterText.setText('Taps: ' + tapsCount + '/20');
}
}
function updateTimer() {
if (gameState === 'playing' && timeRemaining > 0) {
timeRemaining -= 16.67; // Approximately 60 FPS
var timePercent = timeRemaining / maxTime;
var newWidth = 600 * timePercent;
if (timerBar) {
timerBar.width = Math.max(0, newWidth);
// Change color based on time remaining
if (timePercent > 0.5) {
timerBar.tint = 0x32CD32; // Green
} else if (timePercent > 0.25) {
timerBar.tint = 0xFFD700; // Yellow
} else {
timerBar.tint = 0xFF4500; // Red
}
}
if (timerText) {
timerText.setText('Time: ' + Math.ceil(timeRemaining / 1000));
}
if (timeRemaining <= 0) {
loseLevel();
}
}
}
function winLevel() {
gameState = 'won';
LK.getSound('victory').play();
// Victory message
var victoryText = new Text2("I've got you. Hahahaha!\n\nLevel " + currentLevel + " Complete!\nTap to return to menu", {
size: 50,
fill: 0x00FF00
});
victoryText.anchor.set(0.5, 0.5);
victoryText.x = 2048 / 2;
victoryText.y = 2732 / 2;
game.addChild(victoryText);
// Flash effect
LK.effects.flashScreen(0x00FF00, 1000);
LK.setTimeout(function () {
initializeMenu();
}, 3000);
}
function loseLevel() {
gameState = 'lost';
LK.getSound('fail').play();
// Failure message
var failText = new Text2('Time\'s up!\n\nTry again!\nTap to return to menu', {
size: 50,
fill: 0xFF0000
});
failText.anchor.set(0.5, 0.5);
failText.x = 2048 / 2;
failText.y = 2732 / 2;
game.addChild(failText);
// Flash effect
LK.effects.flashScreen(0xFF0000, 1000);
LK.setTimeout(function () {
initializeMenu();
}, 3000);
}
// Touch handler for returning to menu after win/lose
game.down = function (x, y, obj) {
if (gameState === 'won' || gameState === 'lost') {
initializeMenu();
}
};
// Main game update loop
game.update = function () {
if (gameState === 'playing') {
updateTimer();
}
};
// Initialize the game
initializeMenu();
LK.playMusic('bgMusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,294 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Animal = Container.expand(function (type) {
+ var self = Container.call(this);
+ var animalSprite = self.attachAsset(type, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.animalType = type;
+ self.isHiding = false;
+ self.hide = function () {
+ self.isHiding = true;
+ var hideX = Math.random() * (2048 - 100) + 50;
+ var hideY = Math.random() * (2732 - 400) + 200; // Avoid UI areas
+ tween(self, {
+ x: hideX,
+ y: hideY
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ self.isHiding = false;
+ }
+ });
+ };
+ self.down = function (x, y, obj) {
+ if (!self.isHiding && gameState === 'playing') {
+ tapsCount++;
+ updateTapCounter();
+ LK.getSound('tap').play();
+ // Flash effect
+ tween(animalSprite, {
+ scaleX: 1.3,
+ scaleY: 1.3
+ }, {
+ duration: 100
+ });
+ tween(animalSprite, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 100
+ });
+ if (tapsCount >= 20) {
+ winLevel();
+ } else {
+ self.hide();
+ }
+ }
+ };
+ return self;
+});
+var LevelButton = Container.expand(function (level, animal, color) {
+ var self = Container.call(this);
+ var button = self.attachAsset('levelButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ button.tint = color;
+ var levelText = new Text2('Level ' + level, {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ levelText.anchor.set(0.5, 0.3);
+ self.addChild(levelText);
+ var animalText = new Text2(animal, {
+ size: 32,
+ fill: 0xFFFFFF
+ });
+ animalText.anchor.set(0.5, 0.7);
+ self.addChild(animalText);
+ self.level = level;
+ self.down = function (x, y, obj) {
+ startLevel(self.level);
+ LK.getSound('tap').play();
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var gameState = 'menu'; // 'menu', 'playing', 'won', 'lost'
+var currentLevel = 1;
+var tapsCount = 0;
+var timeRemaining = 0;
+var maxTime = 0;
+var currentAnimal = null;
+// UI elements
+var levelButtons = [];
+var tapCounterText = null;
+var timerBarBg = null;
+var timerBar = null;
+var timerText = null;
+var titleText = null;
+var instructionText = null;
+// Level configurations
+var levelConfigs = {
+ 1: {
+ animal: 'chicken',
+ time: 60000,
+ name: 'Chicken'
+ },
+ 2: {
+ animal: 'sheep',
+ time: 45000,
+ name: 'Sheep'
+ },
+ 3: {
+ animal: 'pig',
+ time: 30000,
+ name: 'Pig'
+ }
+};
+function initializeMenu() {
+ gameState = 'menu';
+ // Clear existing elements
+ game.removeChildren();
+ // Title
+ titleText = new Text2('Powerpuff Girls\nHide and Seek Challenge', {
+ size: 60,
+ fill: 0xFF1493
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 2048 / 2;
+ titleText.y = 500;
+ game.addChild(titleText);
+ // Instructions
+ instructionText = new Text2('Find and tap the hidden animal 20 times!\nChoose your difficulty level:', {
+ size: 40,
+ fill: 0x000000
+ });
+ instructionText.anchor.set(0.5, 0.5);
+ instructionText.x = 2048 / 2;
+ instructionText.y = 800;
+ game.addChild(instructionText);
+ // Level buttons
+ levelButtons = [];
+ var buttonColors = [0xFF69B4, 0xFF4500, 0x8A2BE2];
+ for (var i = 1; i <= 3; i++) {
+ var button = new LevelButton(i, levelConfigs[i].name, buttonColors[i - 1]);
+ button.x = 2048 / 2;
+ button.y = 1200 + (i - 1) * 200;
+ levelButtons.push(button);
+ game.addChild(button);
+ }
+}
+function startLevel(level) {
+ gameState = 'playing';
+ currentLevel = level;
+ tapsCount = 0;
+ var config = levelConfigs[level];
+ maxTime = config.time;
+ timeRemaining = maxTime;
+ // Clear menu
+ game.removeChildren();
+ // Create animal
+ currentAnimal = new Animal(config.animal);
+ currentAnimal.x = 2048 / 2;
+ currentAnimal.y = 2732 / 2;
+ game.addChild(currentAnimal);
+ // Hide animal initially
+ LK.setTimeout(function () {
+ currentAnimal.hide();
+ }, 1000);
+ setupGameUI();
+}
+function setupGameUI() {
+ // Tap counter
+ tapCounterText = new Text2('Taps: 0/20', {
+ size: 50,
+ fill: 0xFFFFFF
+ });
+ tapCounterText.anchor.set(0.5, 0);
+ LK.gui.top.addChild(tapCounterText);
+ // Timer background
+ timerBarBg = LK.getAsset('timerBg', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ timerBarBg.x = 2048 / 2;
+ timerBarBg.y = 100;
+ game.addChild(timerBarBg);
+ // Timer bar
+ timerBar = LK.getAsset('timerBar', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ timerBar.x = timerBarBg.x - timerBarBg.width / 2;
+ timerBar.y = timerBarBg.y;
+ game.addChild(timerBar);
+ // Timer text
+ timerText = new Text2('Time: ' + Math.ceil(timeRemaining / 1000), {
+ size: 35,
+ fill: 0xFFFFFF
+ });
+ timerText.anchor.set(0.5, 0.5);
+ timerText.x = timerBarBg.x;
+ timerText.y = timerBarBg.y + timerBarBg.height / 2;
+ game.addChild(timerText);
+}
+function updateTapCounter() {
+ if (tapCounterText) {
+ tapCounterText.setText('Taps: ' + tapsCount + '/20');
+ }
+}
+function updateTimer() {
+ if (gameState === 'playing' && timeRemaining > 0) {
+ timeRemaining -= 16.67; // Approximately 60 FPS
+ var timePercent = timeRemaining / maxTime;
+ var newWidth = 600 * timePercent;
+ if (timerBar) {
+ timerBar.width = Math.max(0, newWidth);
+ // Change color based on time remaining
+ if (timePercent > 0.5) {
+ timerBar.tint = 0x32CD32; // Green
+ } else if (timePercent > 0.25) {
+ timerBar.tint = 0xFFD700; // Yellow
+ } else {
+ timerBar.tint = 0xFF4500; // Red
+ }
+ }
+ if (timerText) {
+ timerText.setText('Time: ' + Math.ceil(timeRemaining / 1000));
+ }
+ if (timeRemaining <= 0) {
+ loseLevel();
+ }
+ }
+}
+function winLevel() {
+ gameState = 'won';
+ LK.getSound('victory').play();
+ // Victory message
+ var victoryText = new Text2("I've got you. Hahahaha!\n\nLevel " + currentLevel + " Complete!\nTap to return to menu", {
+ size: 50,
+ fill: 0x00FF00
+ });
+ victoryText.anchor.set(0.5, 0.5);
+ victoryText.x = 2048 / 2;
+ victoryText.y = 2732 / 2;
+ game.addChild(victoryText);
+ // Flash effect
+ LK.effects.flashScreen(0x00FF00, 1000);
+ LK.setTimeout(function () {
+ initializeMenu();
+ }, 3000);
+}
+function loseLevel() {
+ gameState = 'lost';
+ LK.getSound('fail').play();
+ // Failure message
+ var failText = new Text2('Time\'s up!\n\nTry again!\nTap to return to menu', {
+ size: 50,
+ fill: 0xFF0000
+ });
+ failText.anchor.set(0.5, 0.5);
+ failText.x = 2048 / 2;
+ failText.y = 2732 / 2;
+ game.addChild(failText);
+ // Flash effect
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.setTimeout(function () {
+ initializeMenu();
+ }, 3000);
+}
+// Touch handler for returning to menu after win/lose
+game.down = function (x, y, obj) {
+ if (gameState === 'won' || gameState === 'lost') {
+ initializeMenu();
+ }
+};
+// Main game update loop
+game.update = function () {
+ if (gameState === 'playing') {
+ updateTimer();
+ }
+};
+// Initialize the game
+initializeMenu();
+LK.playMusic('bgMusic');
\ No newline at end of file