Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls Musical Band
Initial prompt
The powerpuff girls: tap on blossom, or bubbles, or buttercup, or bliss to make blossom blow the trumpet, or make bubbles play the drum 🥁, or make buttercup play the accordion 🪗, or make bliss blow the party blower. (No levels).
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PowerpuffGirl = Container.expand(function (girlType, instrumentType, soundId) {
var self = Container.call(this);
// Store girl properties
self.girlType = girlType;
self.instrumentType = instrumentType;
self.soundId = soundId;
self.isPlaying = false;
// Create girl body
var girlBody = self.attachAsset(girlType, {
anchorX: 0.5,
anchorY: 0.5
});
// Create instrument
var instrument = self.attachAsset(instrumentType, {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -80
});
// Initially hide instrument
instrument.visible = false;
// Store references
self.girlBody = girlBody;
self.instrument = instrument;
// Method to play animation and sound
self.playMusic = function () {
if (self.isPlaying) return;
self.isPlaying = true;
// Show instrument
self.instrument.visible = true;
// Play sound
LK.getSound(self.soundId).play();
// Animate girl
tween(self.girlBody, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.girlBody, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
// Animate instrument based on type
if (self.instrumentType === 'trumpet') {
tween(self.instrument, {
rotation: 0.2
}, {
duration: 300,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.instrument, {
rotation: 0
}, {
duration: 300,
easing: tween.easeInOut
});
}
});
} else if (self.instrumentType === 'drums') {
tween(self.instrument, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.instrument, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150,
easing: tween.easeIn
});
}
});
} else if (self.instrumentType === 'accordion') {
tween(self.instrument, {
scaleX: 0.8,
scaleY: 1.2
}, {
duration: 250,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.instrument, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 250,
easing: tween.easeInOut
});
}
});
} else if (self.instrumentType === 'partyblower') {
tween(self.instrument, {
scaleX: 1.5,
rotation: 0.1
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.instrument, {
scaleX: 1.0,
rotation: 0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
}
// Hide instrument after animation
LK.setTimeout(function () {
self.instrument.visible = false;
self.isPlaying = false;
}, 800);
};
// Touch handler
self.down = function (x, y, obj) {
self.playMusic();
};
// Idle animation
self.startIdleAnimation = function () {
var _idleAnimation = function idleAnimation() {
if (!self.isPlaying) {
tween(self.girlBody, {
y: self.girlBody.y - 10
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.girlBody, {
y: self.girlBody.y + 10
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: _idleAnimation
});
}
});
} else {
LK.setTimeout(_idleAnimation, 100);
}
};
_idleAnimation();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
game.setBackgroundColor(0xFFB6C1);
// Create title text
var titleText = new Text2('Powerpuff Girls Musical Band', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
// Create instruction text
var instructionText = new Text2('Tap the Girls to Make Music!', {
size: 80,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
instructionText.y = -50;
// Create Powerpuff Girls
var blossom = new PowerpuffGirl('blossom', 'trumpet', 'trumpetSound');
var bubbles = new PowerpuffGirl('bubbles', 'drums', 'drumSound');
var buttercup = new PowerpuffGirl('buttercup', 'accordion', 'accordionSound');
var bliss = new PowerpuffGirl('bliss', 'partyblower', 'partyblowerSound');
// Position girls in a 2x2 grid
var centerX = 2048 / 2;
var centerY = 2732 / 2;
var spacing = 450;
// Top row
blossom.x = centerX - spacing / 2;
blossom.y = centerY - spacing / 2;
bubbles.x = centerX + spacing / 2;
bubbles.y = centerY - spacing / 2;
// Bottom row
buttercup.x = centerX - spacing / 2;
buttercup.y = centerY + spacing / 2;
bliss.x = centerX + spacing / 2;
bliss.y = centerY + spacing / 2;
// Add girls to game
game.addChild(blossom);
game.addChild(bubbles);
game.addChild(buttercup);
game.addChild(bliss);
// Start idle animations
blossom.startIdleAnimation();
LK.setTimeout(function () {
bubbles.startIdleAnimation();
}, 500);
LK.setTimeout(function () {
buttercup.startIdleAnimation();
}, 1000);
LK.setTimeout(function () {
bliss.startIdleAnimation();
}, 1500);
// Game update loop
game.update = function () {
// No specific updates needed for this musical game
// All interactions are handled by touch events on individual girls
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PowerpuffGirl = Container.expand(function (girlType, instrumentType, soundId) {
var self = Container.call(this);
// Store girl properties
self.girlType = girlType;
self.instrumentType = instrumentType;
self.soundId = soundId;
self.isPlaying = false;
// Create girl body
var girlBody = self.attachAsset(girlType, {
anchorX: 0.5,
anchorY: 0.5
});
// Create instrument
var instrument = self.attachAsset(instrumentType, {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -80
});
// Initially hide instrument
instrument.visible = false;
// Store references
self.girlBody = girlBody;
self.instrument = instrument;
// Method to play animation and sound
self.playMusic = function () {
if (self.isPlaying) return;
self.isPlaying = true;
// Show instrument
self.instrument.visible = true;
// Play sound
LK.getSound(self.soundId).play();
// Animate girl
tween(self.girlBody, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.girlBody, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
// Animate instrument based on type
if (self.instrumentType === 'trumpet') {
tween(self.instrument, {
rotation: 0.2
}, {
duration: 300,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.instrument, {
rotation: 0
}, {
duration: 300,
easing: tween.easeInOut
});
}
});
} else if (self.instrumentType === 'drums') {
tween(self.instrument, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.instrument, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150,
easing: tween.easeIn
});
}
});
} else if (self.instrumentType === 'accordion') {
tween(self.instrument, {
scaleX: 0.8,
scaleY: 1.2
}, {
duration: 250,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.instrument, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 250,
easing: tween.easeInOut
});
}
});
} else if (self.instrumentType === 'partyblower') {
tween(self.instrument, {
scaleX: 1.5,
rotation: 0.1
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.instrument, {
scaleX: 1.0,
rotation: 0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
}
// Hide instrument after animation
LK.setTimeout(function () {
self.instrument.visible = false;
self.isPlaying = false;
}, 800);
};
// Touch handler
self.down = function (x, y, obj) {
self.playMusic();
};
// Idle animation
self.startIdleAnimation = function () {
var _idleAnimation = function idleAnimation() {
if (!self.isPlaying) {
tween(self.girlBody, {
y: self.girlBody.y - 10
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.girlBody, {
y: self.girlBody.y + 10
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: _idleAnimation
});
}
});
} else {
LK.setTimeout(_idleAnimation, 100);
}
};
_idleAnimation();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
game.setBackgroundColor(0xFFB6C1);
// Create title text
var titleText = new Text2('Powerpuff Girls Musical Band', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
// Create instruction text
var instructionText = new Text2('Tap the Girls to Make Music!', {
size: 80,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
instructionText.y = -50;
// Create Powerpuff Girls
var blossom = new PowerpuffGirl('blossom', 'trumpet', 'trumpetSound');
var bubbles = new PowerpuffGirl('bubbles', 'drums', 'drumSound');
var buttercup = new PowerpuffGirl('buttercup', 'accordion', 'accordionSound');
var bliss = new PowerpuffGirl('bliss', 'partyblower', 'partyblowerSound');
// Position girls in a 2x2 grid
var centerX = 2048 / 2;
var centerY = 2732 / 2;
var spacing = 450;
// Top row
blossom.x = centerX - spacing / 2;
blossom.y = centerY - spacing / 2;
bubbles.x = centerX + spacing / 2;
bubbles.y = centerY - spacing / 2;
// Bottom row
buttercup.x = centerX - spacing / 2;
buttercup.y = centerY + spacing / 2;
bliss.x = centerX + spacing / 2;
bliss.y = centerY + spacing / 2;
// Add girls to game
game.addChild(blossom);
game.addChild(bubbles);
game.addChild(buttercup);
game.addChild(bliss);
// Start idle animations
blossom.startIdleAnimation();
LK.setTimeout(function () {
bubbles.startIdleAnimation();
}, 500);
LK.setTimeout(function () {
buttercup.startIdleAnimation();
}, 1000);
LK.setTimeout(function () {
bliss.startIdleAnimation();
}, 1500);
// Game update loop
game.update = function () {
// No specific updates needed for this musical game
// All interactions are handled by touch events on individual girls
};