Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls Dream Party
Initial prompt
Toca street party (2016). The powerpuff girls are having a street party. The powerpuff girls are having a dream about “playing 3 musical instruments” or “dancing with party cloud” or “drinking lemon juice” drag and drop the powerpuff girls onto the dreams
/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var DreamBubble = Container.expand(function (dreamType) {
	var self = Container.call(this);
	self.dreamType = dreamType;
	self.isMatched = false;
	var bubbleGraphics = self.attachAsset('dreamBubble', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	bubbleGraphics.alpha = 0.7;
	var dreamContent = self.addChild(LK.getAsset(dreamType, {
		anchorX: 0.5,
		anchorY: 0.5
	}));
	self.update = function () {
		if (!self.isMatched) {
			bubbleGraphics.y = Math.sin(LK.ticks * 0.05 + self.x * 0.01) * 10;
			dreamContent.y = bubbleGraphics.y;
		}
	};
	self.celebrate = function () {
		self.isMatched = true;
		LK.effects.flashObject(self, 0xffd700, 500);
		tween(self, {
			scaleX: 1.3,
			scaleY: 1.3
		}, {
			duration: 200,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				tween(self, {
					scaleX: 1.0,
					scaleY: 1.0
				}, {
					duration: 200,
					easing: tween.easeIn
				});
			}
		});
		createParticleEffect(self.x, self.y);
	};
	return self;
});
var Particle = Container.expand(function () {
	var self = Container.call(this);
	var particleGraphics = self.attachAsset('particle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.vx = (Math.random() - 0.5) * 10;
	self.vy = (Math.random() - 0.5) * 10 - 5;
	self.life = 60;
	self.maxLife = 60;
	self.update = function () {
		self.x += self.vx;
		self.y += self.vy;
		self.vy += 0.2;
		self.life--;
		particleGraphics.alpha = self.life / self.maxLife;
		if (self.life <= 0) {
			self.destroy();
			for (var i = particles.length - 1; i >= 0; i--) {
				if (particles[i] === self) {
					particles.splice(i, 1);
					break;
				}
			}
		}
	};
	return self;
});
var PowerpuffGirl = Container.expand(function (girlType) {
	var self = Container.call(this);
	self.girlType = girlType;
	self.isBeingDragged = false;
	self.originalX = 0;
	self.originalY = 0;
	self.isMatched = false;
	var girlGraphics = self.attachAsset(girlType, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add simple features to distinguish the girls
	var feature1 = self.addChild(LK.getAsset('particle', {
		anchorX: 0.5,
		anchorY: 0.5
	}));
	feature1.x = -30;
	feature1.y = -40;
	var feature2 = self.addChild(LK.getAsset('particle', {
		anchorX: 0.5,
		anchorY: 0.5
	}));
	feature2.x = 30;
	feature2.y = -40;
	self.setOriginalPosition = function (x, y) {
		self.originalX = x;
		self.originalY = y;
		self.x = x;
		self.y = y;
	};
	self.returnToOriginal = function () {
		if (!self.isMatched) {
			tween(self, {
				x: self.originalX,
				y: self.originalY
			}, {
				duration: 300,
				easing: tween.easeOut
			});
		}
	};
	self.down = function (x, y, obj) {
		if (!self.isMatched) {
			self.isBeingDragged = true;
			girlGraphics.alpha = 0.8;
		}
	};
	self.up = function (x, y, obj) {
		if (self.isBeingDragged) {
			self.isBeingDragged = false;
			girlGraphics.alpha = 1.0;
			var matched = false;
			for (var i = 0; i < dreamBubbles.length; i++) {
				if (self.intersects(dreamBubbles[i]) && !dreamBubbles[i].isMatched) {
					if (checkMatch(self, dreamBubbles[i])) {
						matched = true;
						break;
					}
				}
			}
			if (!matched) {
				self.returnToOriginal();
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87ceeb
});
/**** 
* Game Code
****/ 
var powerpuffGirls = [];
var dreamBubbles = [];
var particles = [];
var dragTarget = null;
var matchedCount = 0;
var gameStarted = false;
// Dream matching rules
var dreamMatches = {
	'blossom': 'piano',
	'bubbles': 'cloud',
	'buttercup': 'lemonJuice'
};
// Score display
var scoreTxt = new Text2('Score: 0', {
	size: 80,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Instructions
var instructionTxt = new Text2('Drag each girl to her dream!', {
	size: 60,
	fill: 0xFFFFFF
});
instructionTxt.anchor.set(0.5, 0);
instructionTxt.y = 100;
LK.gui.top.addChild(instructionTxt);
function initializeGame() {
	// Create Powerpuff Girls
	var girlTypes = ['blossom', 'bubbles', 'buttercup'];
	var startY = 2400;
	for (var i = 0; i < girlTypes.length; i++) {
		var girl = new PowerpuffGirl(girlTypes[i]);
		var startX = 512 + i * 512;
		girl.setOriginalPosition(startX, startY);
		powerpuffGirls.push(girl);
		game.addChild(girl);
	}
	// Create dream bubbles
	var dreamTypes = ['piano', 'cloud', 'lemonJuice'];
	var bubbleY = 800;
	for (var j = 0; j < dreamTypes.length; j++) {
		var bubble = new DreamBubble(dreamTypes[j]);
		var bubbleX = 512 + j * 512;
		bubble.x = bubbleX;
		bubble.y = bubbleY;
		dreamBubbles.push(bubble);
		game.addChild(bubble);
	}
	gameStarted = true;
}
function checkMatch(girl, bubble) {
	return dreamMatches[girl.girlType] === bubble.dreamType;
}
function handleMatch(girl, bubble) {
	girl.isMatched = true;
	bubble.celebrate();
	girl.x = bubble.x;
	girl.y = bubble.y;
	tween(girl, {
		scaleX: 0.8,
		scaleY: 0.8
	}, {
		duration: 300,
		easing: tween.easeOut
	});
	LK.setScore(LK.getScore() + 100);
	scoreTxt.setText('Score: ' + LK.getScore());
	LK.getSound('match').play();
	matchedCount++;
	if (matchedCount >= 3) {
		LK.setTimeout(function () {
			LK.setScore(LK.getScore() + 500);
			scoreTxt.setText('Score: ' + LK.getScore());
			LK.getSound('celebration').play();
			LK.effects.flashScreen(0xffd700, 1000);
			LK.setTimeout(function () {
				LK.showYouWin();
			}, 1500);
		}, 1000);
	}
}
function createParticleEffect(x, y) {
	for (var i = 0; i < 8; i++) {
		var particle = new Particle();
		particle.x = x;
		particle.y = y;
		particles.push(particle);
		game.addChild(particle);
	}
}
game.move = function (x, y, obj) {
	if (dragTarget && dragTarget.isBeingDragged) {
		dragTarget.x = x;
		dragTarget.y = y;
	}
};
game.down = function (x, y, obj) {
	for (var i = 0; i < powerpuffGirls.length; i++) {
		var girl = powerpuffGirls[i];
		if (!girl.isMatched) {
			var localPos = girl.toLocal({
				x: x,
				y: y
			});
			if (Math.abs(localPos.x) < 100 && Math.abs(localPos.y) < 100) {
				dragTarget = girl;
				break;
			}
		}
	}
};
game.up = function (x, y, obj) {
	if (dragTarget && dragTarget.isBeingDragged) {
		var matched = false;
		for (var i = 0; i < dreamBubbles.length; i++) {
			var bubble = dreamBubbles[i];
			if (dragTarget.intersects(bubble) && !bubble.isMatched) {
				if (checkMatch(dragTarget, bubble)) {
					handleMatch(dragTarget, bubble);
					matched = true;
					break;
				}
			}
		}
		if (!matched) {
			dragTarget.returnToOriginal();
		}
	}
	dragTarget = null;
};
game.update = function () {
	if (!gameStarted) {
		initializeGame();
	}
	// Update particles
	for (var i = particles.length - 1; i >= 0; i--) {
		if (particles[i] && particles[i].update) {
			particles[i].update();
		}
	}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,298 @@
-/****
+/**** 
+* Plugins
+****/ 
+var tween = LK.import("@upit/tween.v1");
+
+/**** 
+* Classes
+****/ 
+var DreamBubble = Container.expand(function (dreamType) {
+	var self = Container.call(this);
+	self.dreamType = dreamType;
+	self.isMatched = false;
+	var bubbleGraphics = self.attachAsset('dreamBubble', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	bubbleGraphics.alpha = 0.7;
+	var dreamContent = self.addChild(LK.getAsset(dreamType, {
+		anchorX: 0.5,
+		anchorY: 0.5
+	}));
+	self.update = function () {
+		if (!self.isMatched) {
+			bubbleGraphics.y = Math.sin(LK.ticks * 0.05 + self.x * 0.01) * 10;
+			dreamContent.y = bubbleGraphics.y;
+		}
+	};
+	self.celebrate = function () {
+		self.isMatched = true;
+		LK.effects.flashObject(self, 0xffd700, 500);
+		tween(self, {
+			scaleX: 1.3,
+			scaleY: 1.3
+		}, {
+			duration: 200,
+			easing: tween.easeOut,
+			onFinish: function onFinish() {
+				tween(self, {
+					scaleX: 1.0,
+					scaleY: 1.0
+				}, {
+					duration: 200,
+					easing: tween.easeIn
+				});
+			}
+		});
+		createParticleEffect(self.x, self.y);
+	};
+	return self;
+});
+var Particle = Container.expand(function () {
+	var self = Container.call(this);
+	var particleGraphics = self.attachAsset('particle', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.vx = (Math.random() - 0.5) * 10;
+	self.vy = (Math.random() - 0.5) * 10 - 5;
+	self.life = 60;
+	self.maxLife = 60;
+	self.update = function () {
+		self.x += self.vx;
+		self.y += self.vy;
+		self.vy += 0.2;
+		self.life--;
+		particleGraphics.alpha = self.life / self.maxLife;
+		if (self.life <= 0) {
+			self.destroy();
+			for (var i = particles.length - 1; i >= 0; i--) {
+				if (particles[i] === self) {
+					particles.splice(i, 1);
+					break;
+				}
+			}
+		}
+	};
+	return self;
+});
+var PowerpuffGirl = Container.expand(function (girlType) {
+	var self = Container.call(this);
+	self.girlType = girlType;
+	self.isBeingDragged = false;
+	self.originalX = 0;
+	self.originalY = 0;
+	self.isMatched = false;
+	var girlGraphics = self.attachAsset(girlType, {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	// Add simple features to distinguish the girls
+	var feature1 = self.addChild(LK.getAsset('particle', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	}));
+	feature1.x = -30;
+	feature1.y = -40;
+	var feature2 = self.addChild(LK.getAsset('particle', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	}));
+	feature2.x = 30;
+	feature2.y = -40;
+	self.setOriginalPosition = function (x, y) {
+		self.originalX = x;
+		self.originalY = y;
+		self.x = x;
+		self.y = y;
+	};
+	self.returnToOriginal = function () {
+		if (!self.isMatched) {
+			tween(self, {
+				x: self.originalX,
+				y: self.originalY
+			}, {
+				duration: 300,
+				easing: tween.easeOut
+			});
+		}
+	};
+	self.down = function (x, y, obj) {
+		if (!self.isMatched) {
+			self.isBeingDragged = true;
+			girlGraphics.alpha = 0.8;
+		}
+	};
+	self.up = function (x, y, obj) {
+		if (self.isBeingDragged) {
+			self.isBeingDragged = false;
+			girlGraphics.alpha = 1.0;
+			var matched = false;
+			for (var i = 0; i < dreamBubbles.length; i++) {
+				if (self.intersects(dreamBubbles[i]) && !dreamBubbles[i].isMatched) {
+					if (checkMatch(self, dreamBubbles[i])) {
+						matched = true;
+						break;
+					}
+				}
+			}
+			if (!matched) {
+				self.returnToOriginal();
+			}
+		}
+	};
+	return self;
+});
+
+/**** 
 * Initialize Game
-****/
+****/ 
 var game = new LK.Game({
-	backgroundColor: 0x000000
-});
\ No newline at end of file
+	backgroundColor: 0x87ceeb
+});
+
+/**** 
+* Game Code
+****/ 
+var powerpuffGirls = [];
+var dreamBubbles = [];
+var particles = [];
+var dragTarget = null;
+var matchedCount = 0;
+var gameStarted = false;
+// Dream matching rules
+var dreamMatches = {
+	'blossom': 'piano',
+	'bubbles': 'cloud',
+	'buttercup': 'lemonJuice'
+};
+// Score display
+var scoreTxt = new Text2('Score: 0', {
+	size: 80,
+	fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Instructions
+var instructionTxt = new Text2('Drag each girl to her dream!', {
+	size: 60,
+	fill: 0xFFFFFF
+});
+instructionTxt.anchor.set(0.5, 0);
+instructionTxt.y = 100;
+LK.gui.top.addChild(instructionTxt);
+function initializeGame() {
+	// Create Powerpuff Girls
+	var girlTypes = ['blossom', 'bubbles', 'buttercup'];
+	var startY = 2400;
+	for (var i = 0; i < girlTypes.length; i++) {
+		var girl = new PowerpuffGirl(girlTypes[i]);
+		var startX = 512 + i * 512;
+		girl.setOriginalPosition(startX, startY);
+		powerpuffGirls.push(girl);
+		game.addChild(girl);
+	}
+	// Create dream bubbles
+	var dreamTypes = ['piano', 'cloud', 'lemonJuice'];
+	var bubbleY = 800;
+	for (var j = 0; j < dreamTypes.length; j++) {
+		var bubble = new DreamBubble(dreamTypes[j]);
+		var bubbleX = 512 + j * 512;
+		bubble.x = bubbleX;
+		bubble.y = bubbleY;
+		dreamBubbles.push(bubble);
+		game.addChild(bubble);
+	}
+	gameStarted = true;
+}
+function checkMatch(girl, bubble) {
+	return dreamMatches[girl.girlType] === bubble.dreamType;
+}
+function handleMatch(girl, bubble) {
+	girl.isMatched = true;
+	bubble.celebrate();
+	girl.x = bubble.x;
+	girl.y = bubble.y;
+	tween(girl, {
+		scaleX: 0.8,
+		scaleY: 0.8
+	}, {
+		duration: 300,
+		easing: tween.easeOut
+	});
+	LK.setScore(LK.getScore() + 100);
+	scoreTxt.setText('Score: ' + LK.getScore());
+	LK.getSound('match').play();
+	matchedCount++;
+	if (matchedCount >= 3) {
+		LK.setTimeout(function () {
+			LK.setScore(LK.getScore() + 500);
+			scoreTxt.setText('Score: ' + LK.getScore());
+			LK.getSound('celebration').play();
+			LK.effects.flashScreen(0xffd700, 1000);
+			LK.setTimeout(function () {
+				LK.showYouWin();
+			}, 1500);
+		}, 1000);
+	}
+}
+function createParticleEffect(x, y) {
+	for (var i = 0; i < 8; i++) {
+		var particle = new Particle();
+		particle.x = x;
+		particle.y = y;
+		particles.push(particle);
+		game.addChild(particle);
+	}
+}
+game.move = function (x, y, obj) {
+	if (dragTarget && dragTarget.isBeingDragged) {
+		dragTarget.x = x;
+		dragTarget.y = y;
+	}
+};
+game.down = function (x, y, obj) {
+	for (var i = 0; i < powerpuffGirls.length; i++) {
+		var girl = powerpuffGirls[i];
+		if (!girl.isMatched) {
+			var localPos = girl.toLocal({
+				x: x,
+				y: y
+			});
+			if (Math.abs(localPos.x) < 100 && Math.abs(localPos.y) < 100) {
+				dragTarget = girl;
+				break;
+			}
+		}
+	}
+};
+game.up = function (x, y, obj) {
+	if (dragTarget && dragTarget.isBeingDragged) {
+		var matched = false;
+		for (var i = 0; i < dreamBubbles.length; i++) {
+			var bubble = dreamBubbles[i];
+			if (dragTarget.intersects(bubble) && !bubble.isMatched) {
+				if (checkMatch(dragTarget, bubble)) {
+					handleMatch(dragTarget, bubble);
+					matched = true;
+					break;
+				}
+			}
+		}
+		if (!matched) {
+			dragTarget.returnToOriginal();
+		}
+	}
+	dragTarget = null;
+};
+game.update = function () {
+	if (!gameStarted) {
+		initializeGame();
+	}
+	// Update particles
+	for (var i = particles.length - 1; i >= 0; i--) {
+		if (particles[i] && particles[i].update) {
+			particles[i].update();
+		}
+	}
+};
\ No newline at end of file