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