Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Football Heroes
Initial prompt
Toca football (2017). Tap on level 1 yellow ball, level 2 blue ball, level 3 red ball, level 4 green ball, level 5 orange ball, or level 6 purple ball to get started, tap on your powerpuff girls to kick the ball ⚽️ onto the goal 🥅, before the villain get the ball it’s a lose.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Ball = Container.expand(function (level) { var self = Container.call(this); var ballColors = ['ballYellow', 'ballBlue', 'ballRed', 'ballGreen', 'ballOrange', 'ballPurple']; var ballGraphics = self.attachAsset(ballColors[level - 1], { anchorX: 0.5, anchorY: 0.5 }); self.level = level; self.speedX = 0; self.speedY = 0; self.isMoving = false; self.kickTowards = function (targetX, targetY) { var dx = targetX - self.x; var dy = targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); var speed = 8 + self.level * 2; self.speedX = dx / distance * speed; self.speedY = dy / distance * speed; self.isMoving = true; LK.getSound('kick').play(); }; self.update = function () { if (self.isMoving) { self.x += self.speedX; self.y += self.speedY; // Slow down over time self.speedX *= 0.98; self.speedY *= 0.98; if (Math.abs(self.speedX) < 0.1 && Math.abs(self.speedY) < 0.1) { self.speedX = 0; self.speedY = 0; self.isMoving = false; } } }; return self; }); var PowerpuffGirl = Container.expand(function (x, y) { var self = Container.call(this); var girlGraphics = self.attachAsset('powerpuffGirl', { anchorX: 0.5, anchorY: 0.5 }); self.x = x; self.y = y; self.originalX = x; self.originalY = y; self.down = function (x, y, obj) { if (gameState === 'playing' && ball) { var goalCenterX = goal.x; var goalCenterY = goal.y; ball.kickTowards(goalCenterX, goalCenterY); // Visual feedback tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150 }); tween(self, { scaleX: 1, scaleY: 1 }, { duration: 150 }); } }; return self; }); var Villain = Container.expand(function (x, y, level) { var self = Container.call(this); var villainGraphics = self.attachAsset('villain', { anchorX: 0.5, anchorY: 0.5 }); self.x = x; self.y = y; self.speed = 1 + level * 0.5; self.update = function () { if (gameState === 'playing' && ball) { var dx = ball.x - self.x; var dy = ball.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x4CAF50 }); /**** * Game Code ****/ var gameState = 'menu'; // 'menu', 'playing', 'gameOver' var currentLevel = 1; var ball = null; var goal = null; var powerpuffGirls = []; var villains = []; var levelButtons = []; // Create background var background = game.attachAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); // Create goal goal = game.attachAsset('goal', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 200 }); // Create goal posts var leftPost = game.attachAsset('goalPost', { anchorX: 0.5, anchorY: 0.5, x: goal.x - 190, y: goal.y }); var rightPost = game.attachAsset('goalPost', { anchorX: 0.5, anchorY: 0.5, x: goal.x + 190, y: goal.y }); // Create level selection UI var titleText = new Text2('Powerpuff Football Heroes', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; game.addChild(titleText); var instructionText = new Text2('Tap a colored ball to select difficulty', { size: 50, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 2048 / 2; instructionText.y = 500; game.addChild(instructionText); // Create level selection balls var ballColors = ['ballYellow', 'ballBlue', 'ballRed', 'ballGreen', 'ballOrange', 'ballPurple']; var ballLabels = ['Level 1', 'Level 2', 'Level 3', 'Level 4', 'Level 5', 'Level 6']; for (var i = 0; i < 6; i++) { var levelBall = game.attachAsset(ballColors[i], { anchorX: 0.5, anchorY: 0.5, x: 200 + i % 3 * 300, y: 700 + Math.floor(i / 3) * 200 }); levelBall.level = i + 1; levelBall.down = function (x, y, obj) { startGame(obj.level); }; var levelText = new Text2(ballLabels[i], { size: 40, fill: 0xFFFFFF }); levelText.anchor.set(0.5, 0.5); levelText.x = levelBall.x; levelText.y = levelBall.y + 80; game.addChild(levelText); levelButtons.push(levelBall); levelButtons.push(levelText); } // Score display var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); function startGame(level) { gameState = 'playing'; currentLevel = level; // Hide menu elements titleText.visible = false; instructionText.visible = false; for (var i = 0; i < levelButtons.length; i++) { levelButtons[i].visible = false; } // Create ball ball = game.addChild(new Ball(level)); ball.x = 2048 / 2; ball.y = 1500; // Create Powerpuff Girls powerpuffGirls = []; for (var i = 0; i < 3; i++) { var girl = game.addChild(new PowerpuffGirl(400 + i * 400, 2000)); powerpuffGirls.push(girl); } // Create villains villains = []; var villainCount = Math.min(level + 1, 5); for (var i = 0; i < villainCount; i++) { var villainX = 300 + i * 350; var villainY = 1200 + i % 2 * 200; var villain = game.addChild(new Villain(villainX, villainY, level)); villains.push(villain); } // Update score display scoreText.setText('Level: ' + level); } function resetGame() { gameState = 'menu'; // Show menu elements titleText.visible = true; instructionText.visible = true; for (var i = 0; i < levelButtons.length; i++) { levelButtons[i].visible = true; } // Clean up game objects if (ball) { ball.destroy(); ball = null; } for (var i = 0; i < powerpuffGirls.length; i++) { powerpuffGirls[i].destroy(); } powerpuffGirls = []; for (var i = 0; i < villains.length; i++) { villains[i].destroy(); } villains = []; scoreText.setText('Score: ' + LK.getScore()); } game.update = function () { if (gameState === 'playing' && ball) { // Check if ball reached goal if (ball.y < goal.y + 100 && ball.x > goal.x - 200 && ball.x < goal.x + 200) { LK.setScore(LK.getScore() + currentLevel * 10); LK.getSound('goal').play(); LK.effects.flashScreen(0x00FF00, 500); // Check win condition if (LK.getScore() >= 100) { LK.showYouWin(); } else { // Next level or reset if (currentLevel < 6) { startGame(currentLevel + 1); } else { resetGame(); } } } // Check if villains caught the ball for (var i = 0; i < villains.length; i++) { if (villains[i].intersects(ball)) { LK.getSound('villainCatch').play(); LK.effects.flashScreen(0xFF0000, 500); LK.showGameOver(); break; } } // Check if ball went out of bounds if (ball.x < 0 || ball.x > 2048 || ball.y > 2732) { LK.effects.flashScreen(0xFF0000, 500); LK.showGameOver(); } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,282 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Ball = Container.expand(function (level) {
+ var self = Container.call(this);
+ var ballColors = ['ballYellow', 'ballBlue', 'ballRed', 'ballGreen', 'ballOrange', 'ballPurple'];
+ var ballGraphics = self.attachAsset(ballColors[level - 1], {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.level = level;
+ self.speedX = 0;
+ self.speedY = 0;
+ self.isMoving = false;
+ self.kickTowards = function (targetX, targetY) {
+ var dx = targetX - self.x;
+ var dy = targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ var speed = 8 + self.level * 2;
+ self.speedX = dx / distance * speed;
+ self.speedY = dy / distance * speed;
+ self.isMoving = true;
+ LK.getSound('kick').play();
+ };
+ self.update = function () {
+ if (self.isMoving) {
+ self.x += self.speedX;
+ self.y += self.speedY;
+ // Slow down over time
+ self.speedX *= 0.98;
+ self.speedY *= 0.98;
+ if (Math.abs(self.speedX) < 0.1 && Math.abs(self.speedY) < 0.1) {
+ self.speedX = 0;
+ self.speedY = 0;
+ self.isMoving = false;
+ }
+ }
+ };
+ return self;
+});
+var PowerpuffGirl = Container.expand(function (x, y) {
+ var self = Container.call(this);
+ var girlGraphics = self.attachAsset('powerpuffGirl', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.x = x;
+ self.y = y;
+ self.originalX = x;
+ self.originalY = y;
+ self.down = function (x, y, obj) {
+ if (gameState === 'playing' && ball) {
+ var goalCenterX = goal.x;
+ var goalCenterY = goal.y;
+ ball.kickTowards(goalCenterX, goalCenterY);
+ // Visual feedback
+ tween(self, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 150
+ });
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 150
+ });
+ }
+ };
+ return self;
+});
+var Villain = Container.expand(function (x, y, level) {
+ var self = Container.call(this);
+ var villainGraphics = self.attachAsset('villain', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.x = x;
+ self.y = y;
+ self.speed = 1 + level * 0.5;
+ self.update = function () {
+ if (gameState === 'playing' && ball) {
+ var dx = ball.x - self.x;
+ var dy = ball.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 5) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x4CAF50
+});
+
+/****
+* Game Code
+****/
+var gameState = 'menu'; // 'menu', 'playing', 'gameOver'
+var currentLevel = 1;
+var ball = null;
+var goal = null;
+var powerpuffGirls = [];
+var villains = [];
+var levelButtons = [];
+// Create background
+var background = game.attachAsset('background', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0
+});
+// Create goal
+goal = game.attachAsset('goal', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 2048 / 2,
+ y: 200
+});
+// Create goal posts
+var leftPost = game.attachAsset('goalPost', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: goal.x - 190,
+ y: goal.y
+});
+var rightPost = game.attachAsset('goalPost', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: goal.x + 190,
+ y: goal.y
+});
+// Create level selection UI
+var titleText = new Text2('Powerpuff Football Heroes', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 2048 / 2;
+titleText.y = 400;
+game.addChild(titleText);
+var instructionText = new Text2('Tap a colored ball to select difficulty', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+instructionText.anchor.set(0.5, 0.5);
+instructionText.x = 2048 / 2;
+instructionText.y = 500;
+game.addChild(instructionText);
+// Create level selection balls
+var ballColors = ['ballYellow', 'ballBlue', 'ballRed', 'ballGreen', 'ballOrange', 'ballPurple'];
+var ballLabels = ['Level 1', 'Level 2', 'Level 3', 'Level 4', 'Level 5', 'Level 6'];
+for (var i = 0; i < 6; i++) {
+ var levelBall = game.attachAsset(ballColors[i], {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 200 + i % 3 * 300,
+ y: 700 + Math.floor(i / 3) * 200
+ });
+ levelBall.level = i + 1;
+ levelBall.down = function (x, y, obj) {
+ startGame(obj.level);
+ };
+ var levelText = new Text2(ballLabels[i], {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ levelText.anchor.set(0.5, 0.5);
+ levelText.x = levelBall.x;
+ levelText.y = levelBall.y + 80;
+ game.addChild(levelText);
+ levelButtons.push(levelBall);
+ levelButtons.push(levelText);
+}
+// Score display
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+function startGame(level) {
+ gameState = 'playing';
+ currentLevel = level;
+ // Hide menu elements
+ titleText.visible = false;
+ instructionText.visible = false;
+ for (var i = 0; i < levelButtons.length; i++) {
+ levelButtons[i].visible = false;
+ }
+ // Create ball
+ ball = game.addChild(new Ball(level));
+ ball.x = 2048 / 2;
+ ball.y = 1500;
+ // Create Powerpuff Girls
+ powerpuffGirls = [];
+ for (var i = 0; i < 3; i++) {
+ var girl = game.addChild(new PowerpuffGirl(400 + i * 400, 2000));
+ powerpuffGirls.push(girl);
+ }
+ // Create villains
+ villains = [];
+ var villainCount = Math.min(level + 1, 5);
+ for (var i = 0; i < villainCount; i++) {
+ var villainX = 300 + i * 350;
+ var villainY = 1200 + i % 2 * 200;
+ var villain = game.addChild(new Villain(villainX, villainY, level));
+ villains.push(villain);
+ }
+ // Update score display
+ scoreText.setText('Level: ' + level);
+}
+function resetGame() {
+ gameState = 'menu';
+ // Show menu elements
+ titleText.visible = true;
+ instructionText.visible = true;
+ for (var i = 0; i < levelButtons.length; i++) {
+ levelButtons[i].visible = true;
+ }
+ // Clean up game objects
+ if (ball) {
+ ball.destroy();
+ ball = null;
+ }
+ for (var i = 0; i < powerpuffGirls.length; i++) {
+ powerpuffGirls[i].destroy();
+ }
+ powerpuffGirls = [];
+ for (var i = 0; i < villains.length; i++) {
+ villains[i].destroy();
+ }
+ villains = [];
+ scoreText.setText('Score: ' + LK.getScore());
+}
+game.update = function () {
+ if (gameState === 'playing' && ball) {
+ // Check if ball reached goal
+ if (ball.y < goal.y + 100 && ball.x > goal.x - 200 && ball.x < goal.x + 200) {
+ LK.setScore(LK.getScore() + currentLevel * 10);
+ LK.getSound('goal').play();
+ LK.effects.flashScreen(0x00FF00, 500);
+ // Check win condition
+ if (LK.getScore() >= 100) {
+ LK.showYouWin();
+ } else {
+ // Next level or reset
+ if (currentLevel < 6) {
+ startGame(currentLevel + 1);
+ } else {
+ resetGame();
+ }
+ }
+ }
+ // Check if villains caught the ball
+ for (var i = 0; i < villains.length; i++) {
+ if (villains[i].intersects(ball)) {
+ LK.getSound('villainCatch').play();
+ LK.effects.flashScreen(0xFF0000, 500);
+ LK.showGameOver();
+ break;
+ }
+ }
+ // Check if ball went out of bounds
+ if (ball.x < 0 || ball.x > 2048 || ball.y > 2732) {
+ LK.effects.flashScreen(0xFF0000, 500);
+ LK.showGameOver();
+ }
+ }
+};
\ No newline at end of file