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