Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls: Snowball Showdown
Initial prompt
The powerpuff girls: blossom is walking over with footprints in snow. Bubbles and buttercup are making 10 snowballs. Tap on bubbles or buttercup to make them throw 10 snowballs onto blossom. For the final of the snowball fight just tap on blossom’s bigger snowball to roll and jump onto bubbles and buttercup.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (characterType) {
var self = Container.call(this);
var characterGraphics = self.attachAsset(characterType, {
anchorX: 0.5,
anchorY: 1.0
});
self.characterType = characterType;
self.snowballCount = 10;
self.down = function (x, y, obj) {
if (gamePhase == 'attack' && self.snowballCount > 0 && (self.characterType == 'bubbles' || self.characterType == 'buttercup')) {
self.throwSnowball();
}
};
self.throwSnowball = function () {
if (self.snowballCount > 0) {
var newSnowball = new Snowball();
newSnowball.x = self.x;
newSnowball.y = self.y - 80;
newSnowball.launch(blossom.x, blossom.y - 75);
snowballs.push(newSnowball);
game.addChild(newSnowball);
self.snowballCount--;
LK.getSound('throw').play();
updateSnowballCounters();
if (bubbles.snowballCount == 0 && buttercup.snowballCount == 0) {
LK.setTimeout(function () {
startFinalePhase();
}, 1000);
}
}
};
return self;
});
var Footprint = Container.expand(function () {
var self = Container.call(this);
var footprintGraphics = self.attachAsset('footprint', {
anchorX: 0.5,
anchorY: 0.5
});
footprintGraphics.alpha = 0.6;
return self;
});
var GiantSnowball = Container.expand(function () {
var self = Container.call(this);
var snowballGraphics = self.attachAsset('giantSnowball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 0;
self.speedY = 0;
self.active = false;
self.jumpHeight = 0;
self.isJumping = false;
self.activate = function () {
self.active = true;
self.speedX = -8;
self.speedY = -2;
LK.getSound('roll').play();
};
self.down = function (x, y, obj) {
if (!self.active && gamePhase == 'finale') {
self.activate();
}
};
self.update = function () {
if (self.active) {
self.x += self.speedX;
self.y += self.speedY;
snowballGraphics.rotation += 0.2;
if (self.y > 2000 && !self.isJumping) {
self.isJumping = true;
self.speedY = -15;
}
if (self.isJumping) {
self.speedY += 0.8;
if (self.y > 2000) {
self.speedY = -10;
}
}
}
};
return self;
});
var SnowParticle = Container.expand(function () {
var self = Container.call(this);
var particleGraphics = self.attachAsset('snowParticle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = (Math.random() - 0.5) * 4;
self.speedY = (Math.random() - 0.5) * 4;
self.life = 60;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.life--;
particleGraphics.alpha = self.life / 60;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var Snowball = Container.expand(function () {
var self = Container.call(this);
var snowballGraphics = self.attachAsset('snowball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 0;
self.speedY = 0;
self.active = false;
self.launch = function (targetX, targetY) {
self.active = true;
var deltaX = targetX - self.x;
var deltaY = targetY - self.y;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
self.speedX = deltaX / distance * 12;
self.speedY = deltaY / distance * 12;
};
self.update = function () {
if (self.active) {
self.x += self.speedX;
self.y += self.speedY;
if (self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
self.active = false;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Game state variables
var gamePhase = 'setup'; // 'setup', 'attack', 'finale', 'victory'
var blossom, bubbles, buttercup;
var giantSnowball;
var snowballs = [];
var footprints = [];
var particles = [];
var footprintTimer = 0;
// UI elements
var bubblesCountText, buttercupCountText;
var instructionText;
// Initialize characters
blossom = game.addChild(new Character('blossom'));
blossom.x = -100;
blossom.y = 1800;
bubbles = game.addChild(new Character('bubbles'));
bubbles.x = 400;
bubbles.y = 2200;
buttercup = game.addChild(new Character('buttercup'));
buttercup.x = 1600;
buttercup.y = 2200;
// Initialize giant snowball (hidden initially)
giantSnowball = game.addChild(new GiantSnowball());
giantSnowball.x = 2200;
giantSnowball.y = 1800;
giantSnowball.alpha = 0;
// UI Setup
bubblesCountText = new Text2('Bubbles: 10', {
size: 60,
fill: 0xFFFFFF
});
bubblesCountText.anchor.set(0, 0);
LK.gui.topLeft.addChild(bubblesCountText);
bubblesCountText.x = 120;
bubblesCountText.y = 20;
buttercupCountText = new Text2('Buttercup: 10', {
size: 60,
fill: 0xFFFFFF
});
buttercupCountText.anchor.set(1, 0);
LK.gui.topRight.addChild(buttercupCountText);
instructionText = new Text2('Watch Blossom walk...', {
size: 80,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 150;
function updateSnowballCounters() {
bubblesCountText.setText('Bubbles: ' + bubbles.snowballCount);
buttercupCountText.setText('Buttercup: ' + buttercup.snowballCount);
}
function createFootprint(x, y) {
var footprint = new Footprint();
footprint.x = x;
footprint.y = y;
footprints.push(footprint);
game.addChild(footprint);
}
function createSnowParticles(x, y, count) {
for (var i = 0; i < count; i++) {
var particle = new SnowParticle();
particle.x = x + (Math.random() - 0.5) * 60;
particle.y = y + (Math.random() - 0.5) * 60;
particles.push(particle);
game.addChild(particle);
}
}
function startAttackPhase() {
gamePhase = 'attack';
instructionText.setText('Tap Bubbles & Buttercup to throw snowballs!');
}
function startFinalePhase() {
gamePhase = 'finale';
instructionText.setText('Tap the giant snowball to help Blossom!');
giantSnowball.alpha = 1;
tween(giantSnowball, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(giantSnowball, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.easeInOut
});
}
});
}
function checkVictory() {
if (giantSnowball.active && giantSnowball.x < 600) {
gamePhase = 'victory';
instructionText.setText('Blossom wins the snowball fight!');
LK.showYouWin();
}
}
// Game update loop
game.update = function () {
// Setup phase: Blossom walks across screen
if (gamePhase == 'setup') {
blossom.x += 3;
// Create footprints
footprintTimer++;
if (footprintTimer % 20 == 0) {
createFootprint(blossom.x - 30, blossom.y);
}
// Start attack phase when Blossom reaches center
if (blossom.x > 1024) {
startAttackPhase();
}
}
// Attack phase: Blossom continues walking slowly
if (gamePhase == 'attack') {
blossom.x += 1;
footprintTimer++;
if (footprintTimer % 30 == 0) {
createFootprint(blossom.x - 30, blossom.y);
}
}
// Check snowball collisions with Blossom
for (var i = snowballs.length - 1; i >= 0; i--) {
var snowball = snowballs[i];
if (snowball.active && snowball.intersects(blossom)) {
// Hit effect
LK.getSound('hit').play();
createSnowParticles(snowball.x, snowball.y, 8);
LK.effects.flashObject(blossom, 0xffffff, 300);
// Remove snowball
snowball.destroy();
snowballs.splice(i, 1);
// Add score
LK.setScore(LK.getScore() + 10);
} else if (!snowball.active) {
snowball.destroy();
snowballs.splice(i, 1);
}
}
// Clean up old particles
for (var j = particles.length - 1; j >= 0; j--) {
if (particles[j].life <= 0) {
particles.splice(j, 1);
}
}
// Check victory condition
if (gamePhase == 'finale') {
checkVictory();
}
// Fade old footprints
for (var k = 0; k < footprints.length; k++) {
if (footprints[k].alpha > 0) {
footprints[k].alpha -= 0.005;
}
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (characterType) {
var self = Container.call(this);
var characterGraphics = self.attachAsset(characterType, {
anchorX: 0.5,
anchorY: 1.0
});
self.characterType = characterType;
self.snowballCount = 10;
self.down = function (x, y, obj) {
if (gamePhase == 'attack' && self.snowballCount > 0 && (self.characterType == 'bubbles' || self.characterType == 'buttercup')) {
self.throwSnowball();
}
};
self.throwSnowball = function () {
if (self.snowballCount > 0) {
var newSnowball = new Snowball();
newSnowball.x = self.x;
newSnowball.y = self.y - 80;
newSnowball.launch(blossom.x, blossom.y - 75);
snowballs.push(newSnowball);
game.addChild(newSnowball);
self.snowballCount--;
LK.getSound('throw').play();
updateSnowballCounters();
if (bubbles.snowballCount == 0 && buttercup.snowballCount == 0) {
LK.setTimeout(function () {
startFinalePhase();
}, 1000);
}
}
};
return self;
});
var Footprint = Container.expand(function () {
var self = Container.call(this);
var footprintGraphics = self.attachAsset('footprint', {
anchorX: 0.5,
anchorY: 0.5
});
footprintGraphics.alpha = 0.6;
return self;
});
var GiantSnowball = Container.expand(function () {
var self = Container.call(this);
var snowballGraphics = self.attachAsset('giantSnowball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 0;
self.speedY = 0;
self.active = false;
self.jumpHeight = 0;
self.isJumping = false;
self.activate = function () {
self.active = true;
self.speedX = -8;
self.speedY = -2;
LK.getSound('roll').play();
};
self.down = function (x, y, obj) {
if (!self.active && gamePhase == 'finale') {
self.activate();
}
};
self.update = function () {
if (self.active) {
self.x += self.speedX;
self.y += self.speedY;
snowballGraphics.rotation += 0.2;
if (self.y > 2000 && !self.isJumping) {
self.isJumping = true;
self.speedY = -15;
}
if (self.isJumping) {
self.speedY += 0.8;
if (self.y > 2000) {
self.speedY = -10;
}
}
}
};
return self;
});
var SnowParticle = Container.expand(function () {
var self = Container.call(this);
var particleGraphics = self.attachAsset('snowParticle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = (Math.random() - 0.5) * 4;
self.speedY = (Math.random() - 0.5) * 4;
self.life = 60;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.life--;
particleGraphics.alpha = self.life / 60;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var Snowball = Container.expand(function () {
var self = Container.call(this);
var snowballGraphics = self.attachAsset('snowball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 0;
self.speedY = 0;
self.active = false;
self.launch = function (targetX, targetY) {
self.active = true;
var deltaX = targetX - self.x;
var deltaY = targetY - self.y;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
self.speedX = deltaX / distance * 12;
self.speedY = deltaY / distance * 12;
};
self.update = function () {
if (self.active) {
self.x += self.speedX;
self.y += self.speedY;
if (self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
self.active = false;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Game state variables
var gamePhase = 'setup'; // 'setup', 'attack', 'finale', 'victory'
var blossom, bubbles, buttercup;
var giantSnowball;
var snowballs = [];
var footprints = [];
var particles = [];
var footprintTimer = 0;
// UI elements
var bubblesCountText, buttercupCountText;
var instructionText;
// Initialize characters
blossom = game.addChild(new Character('blossom'));
blossom.x = -100;
blossom.y = 1800;
bubbles = game.addChild(new Character('bubbles'));
bubbles.x = 400;
bubbles.y = 2200;
buttercup = game.addChild(new Character('buttercup'));
buttercup.x = 1600;
buttercup.y = 2200;
// Initialize giant snowball (hidden initially)
giantSnowball = game.addChild(new GiantSnowball());
giantSnowball.x = 2200;
giantSnowball.y = 1800;
giantSnowball.alpha = 0;
// UI Setup
bubblesCountText = new Text2('Bubbles: 10', {
size: 60,
fill: 0xFFFFFF
});
bubblesCountText.anchor.set(0, 0);
LK.gui.topLeft.addChild(bubblesCountText);
bubblesCountText.x = 120;
bubblesCountText.y = 20;
buttercupCountText = new Text2('Buttercup: 10', {
size: 60,
fill: 0xFFFFFF
});
buttercupCountText.anchor.set(1, 0);
LK.gui.topRight.addChild(buttercupCountText);
instructionText = new Text2('Watch Blossom walk...', {
size: 80,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 150;
function updateSnowballCounters() {
bubblesCountText.setText('Bubbles: ' + bubbles.snowballCount);
buttercupCountText.setText('Buttercup: ' + buttercup.snowballCount);
}
function createFootprint(x, y) {
var footprint = new Footprint();
footprint.x = x;
footprint.y = y;
footprints.push(footprint);
game.addChild(footprint);
}
function createSnowParticles(x, y, count) {
for (var i = 0; i < count; i++) {
var particle = new SnowParticle();
particle.x = x + (Math.random() - 0.5) * 60;
particle.y = y + (Math.random() - 0.5) * 60;
particles.push(particle);
game.addChild(particle);
}
}
function startAttackPhase() {
gamePhase = 'attack';
instructionText.setText('Tap Bubbles & Buttercup to throw snowballs!');
}
function startFinalePhase() {
gamePhase = 'finale';
instructionText.setText('Tap the giant snowball to help Blossom!');
giantSnowball.alpha = 1;
tween(giantSnowball, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(giantSnowball, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.easeInOut
});
}
});
}
function checkVictory() {
if (giantSnowball.active && giantSnowball.x < 600) {
gamePhase = 'victory';
instructionText.setText('Blossom wins the snowball fight!');
LK.showYouWin();
}
}
// Game update loop
game.update = function () {
// Setup phase: Blossom walks across screen
if (gamePhase == 'setup') {
blossom.x += 3;
// Create footprints
footprintTimer++;
if (footprintTimer % 20 == 0) {
createFootprint(blossom.x - 30, blossom.y);
}
// Start attack phase when Blossom reaches center
if (blossom.x > 1024) {
startAttackPhase();
}
}
// Attack phase: Blossom continues walking slowly
if (gamePhase == 'attack') {
blossom.x += 1;
footprintTimer++;
if (footprintTimer % 30 == 0) {
createFootprint(blossom.x - 30, blossom.y);
}
}
// Check snowball collisions with Blossom
for (var i = snowballs.length - 1; i >= 0; i--) {
var snowball = snowballs[i];
if (snowball.active && snowball.intersects(blossom)) {
// Hit effect
LK.getSound('hit').play();
createSnowParticles(snowball.x, snowball.y, 8);
LK.effects.flashObject(blossom, 0xffffff, 300);
// Remove snowball
snowball.destroy();
snowballs.splice(i, 1);
// Add score
LK.setScore(LK.getScore() + 10);
} else if (!snowball.active) {
snowball.destroy();
snowballs.splice(i, 1);
}
}
// Clean up old particles
for (var j = particles.length - 1; j >= 0; j--) {
if (particles[j].life <= 0) {
particles.splice(j, 1);
}
}
// Check victory condition
if (gamePhase == 'finale') {
checkVictory();
}
// Fade old footprints
for (var k = 0; k < footprints.length; k++) {
if (footprints[k].alpha > 0) {
footprints[k].alpha -= 0.005;
}
}
};