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