Code edit (1 edits merged)
Please save this source code
User prompt
Bubbles' Birthday Cake Celebration
Initial prompt
Toca birthday party 2 (2015). Blossom 🩷 and buttercup 💚 have a carrot and chocolate cake for bubbles 💙. Tap on 5 candles to make them light up, tap on the bush to see what it is, tap on bliss’s music to make her sing happy birthday to you 💜, tap on bubbles 💙 to make her blow out 5 candles 2 times till cake exploding and confetti.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Bush = Container.expand(function () { var self = Container.call(this); var bushGraphics = self.attachAsset('bush', { anchorX: 0.5, anchorY: 1 }); self.hasBeenTapped = false; self.down = function (x, y, obj) { if (!self.hasBeenTapped) { self.hasBeenTapped = true; tween(bushGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); tween(bushGraphics, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn }); LK.getSound('surprise').play(); // Create a small surprise effect var surpriseText = new Text2('Surprise!', { size: 40, fill: '#FF69B4' }); surpriseText.anchor.set(0.5, 0.5); surpriseText.x = self.x; surpriseText.y = self.y - 100; game.addChild(surpriseText); tween(surpriseText, { alpha: 0, y: surpriseText.y - 50 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { surpriseText.destroy(); } }); } }; return self; }); var Candle = Container.expand(function () { var self = Container.call(this); var candleBody = self.attachAsset('candle', { anchorX: 0.5, anchorY: 1 }); var flame = self.attachAsset('flame', { anchorX: 0.5, anchorY: 1, y: -60 }); self.isLit = false; flame.visible = false; self.light = function () { if (!self.isLit) { self.isLit = true; flame.visible = true; tween(flame, { scaleX: 1.3, scaleY: 1.3 }, { duration: 300, easing: tween.easeOut }); tween(flame, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeIn }); LK.getSound('lightCandle').play(); } }; self.extinguish = function () { if (self.isLit) { self.isLit = false; flame.visible = false; } }; self.down = function (x, y, obj) { if (!self.isLit) { self.light(); } }; return self; }); var Character = Container.expand(function (characterId) { var self = Container.call(this); var characterGraphics = self.attachAsset(characterId, { anchorX: 0.5, anchorY: 1 }); self.characterId = characterId; self.down = function (x, y, obj) { if (self.characterId === 'bubbles') { blowOutCandles(); } else if (self.characterId === 'bliss') { playHappyBirthday(); } }; return self; }); var Confetti = Container.expand(function () { var self = Container.call(this); var colors = [0xFF69B4, 0x00CED1, 0xFFD700, 0xFF6347, 0x98FB98]; var randomColor = colors[Math.floor(Math.random() * colors.length)]; var confettiGraphics = self.attachAsset('confetti', { anchorX: 0.5, anchorY: 0.5 }); confettiGraphics.tint = randomColor; self.speed = Math.random() * 3 + 2; self.rotation = Math.random() * 0.1 - 0.05; self.update = function () { self.y += self.speed; self.rotation += self.rotation; if (self.y > 2732 + 50) { self.destroy(); for (var i = confettiPieces.length - 1; i >= 0; i--) { if (confettiPieces[i] === self) { confettiPieces.splice(i, 1); break; } } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state variables var candles = []; var confettiPieces = []; var candlesBlownCount = 0; var gameComplete = false; // Create cake var cake = game.addChild(LK.getAsset('cake', { anchorX: 0.5, anchorY: 0.5 })); cake.x = 1024; cake.y = 1400; // Create candles around the cake var candlePositions = [{ x: 1024 - 120, y: 1320 }, { x: 1024 - 60, y: 1300 }, { x: 1024, y: 1290 }, { x: 1024 + 60, y: 1300 }, { x: 1024 + 120, y: 1320 }]; for (var i = 0; i < candlePositions.length; i++) { var candle = game.addChild(new Candle()); candle.x = candlePositions[i].x; candle.y = candlePositions[i].y; candles.push(candle); } // Create characters var bubbles = game.addChild(new Character('bubbles')); bubbles.x = 1024; bubbles.y = 1800; var blossom = game.addChild(new Character('blossom')); blossom.x = 400; blossom.y = 1700; var buttercup = game.addChild(new Character('buttercup')); buttercup.x = 1648; buttercup.y = 1700; var bliss = game.addChild(new Character('bliss')); bliss.x = 1024; bliss.y = 800; // Create music note above Bliss var musicNote = game.addChild(LK.getAsset('musicNote', { anchorX: 0.5, anchorY: 0.5 })); musicNote.x = bliss.x + 70; musicNote.y = bliss.y - 150; // Create bushes var bushPositions = [{ x: 200, y: 2000 }, { x: 1848, y: 2000 }, { x: 100, y: 1200 }, { x: 1948, y: 1200 }]; for (var i = 0; i < bushPositions.length; i++) { var bush = game.addChild(new Bush()); bush.x = bushPositions[i].x; bush.y = bushPositions[i].y; } // Create instruction text var instructionText = new Text2('Tap candles to light them!', { size: 50, fill: '#FFFFFF' }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); function areAllCandlesLit() { for (var i = 0; i < candles.length; i++) { if (!candles[i].isLit) { return false; } } return true; } function blowOutCandles() { if (areAllCandlesLit() && !gameComplete) { for (var i = 0; i < candles.length; i++) { candles[i].extinguish(); } candlesBlownCount++; LK.getSound('blowCandle').play(); // Animate Bubbles blowing tween(bubbles, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); tween(bubbles, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn }); if (candlesBlownCount === 1) { instructionText.setText('Great! Light them again and blow once more!'); } else if (candlesBlownCount === 2) { triggerCakeExplosion(); } } } function playHappyBirthday() { LK.getSound('happyBirthday').play(); // Animate music note tween(musicNote, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.easeOut }); tween(musicNote, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeIn }); // Show singing text var singingText = new Text2('♪ Happy Birthday! ♪', { size: 60, fill: '#FF69B4' }); singingText.anchor.set(0.5, 0.5); singingText.x = bliss.x; singingText.y = bliss.y - 200; game.addChild(singingText); tween(singingText, { alpha: 0, y: singingText.y - 100 }, { duration: 3000, easing: tween.easeOut, onFinish: function onFinish() { singingText.destroy(); } }); } function triggerCakeExplosion() { gameComplete = true; instructionText.setText('Happy Birthday Bubbles!'); // Create explosion effect var explosion = game.addChild(LK.getAsset('explosion', { anchorX: 0.5, anchorY: 0.5 })); explosion.x = cake.x; explosion.y = cake.y; explosion.alpha = 0.7; tween(explosion, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { explosion.destroy(); } }); LK.getSound('explosion').play(); // Create confetti for (var i = 0; i < 50; i++) { var confetti = new Confetti(); confetti.x = Math.random() * 2048; confetti.y = -50; game.addChild(confetti); confettiPieces.push(confetti); } // Animate cake tween(cake, { scaleX: 1.3, scaleY: 1.3 }, { duration: 500, easing: tween.easeOut }); tween(cake, { scaleX: 1, scaleY: 1 }, { duration: 500, easing: tween.easeIn }); } game.update = function () { // Update instruction text based on game state if (!gameComplete) { if (areAllCandlesLit()) { if (candlesBlownCount === 0) { instructionText.setText('Tap Bubbles to blow out the candles!'); } else if (candlesBlownCount === 1) { instructionText.setText('Light the candles again!'); } } else if (candlesBlownCount === 1) { instructionText.setText('Tap candles to light them again!'); } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,372 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Bush = Container.expand(function () {
+ var self = Container.call(this);
+ var bushGraphics = self.attachAsset('bush', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.hasBeenTapped = false;
+ self.down = function (x, y, obj) {
+ if (!self.hasBeenTapped) {
+ self.hasBeenTapped = true;
+ tween(bushGraphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ tween(bushGraphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeIn
+ });
+ LK.getSound('surprise').play();
+ // Create a small surprise effect
+ var surpriseText = new Text2('Surprise!', {
+ size: 40,
+ fill: '#FF69B4'
+ });
+ surpriseText.anchor.set(0.5, 0.5);
+ surpriseText.x = self.x;
+ surpriseText.y = self.y - 100;
+ game.addChild(surpriseText);
+ tween(surpriseText, {
+ alpha: 0,
+ y: surpriseText.y - 50
+ }, {
+ duration: 1000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ surpriseText.destroy();
+ }
+ });
+ }
+ };
+ return self;
+});
+var Candle = Container.expand(function () {
+ var self = Container.call(this);
+ var candleBody = self.attachAsset('candle', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ var flame = self.attachAsset('flame', {
+ anchorX: 0.5,
+ anchorY: 1,
+ y: -60
+ });
+ self.isLit = false;
+ flame.visible = false;
+ self.light = function () {
+ if (!self.isLit) {
+ self.isLit = true;
+ flame.visible = true;
+ tween(flame, {
+ scaleX: 1.3,
+ scaleY: 1.3
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ tween(flame, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ LK.getSound('lightCandle').play();
+ }
+ };
+ self.extinguish = function () {
+ if (self.isLit) {
+ self.isLit = false;
+ flame.visible = false;
+ }
+ };
+ self.down = function (x, y, obj) {
+ if (!self.isLit) {
+ self.light();
+ }
+ };
+ return self;
+});
+var Character = Container.expand(function (characterId) {
+ var self = Container.call(this);
+ var characterGraphics = self.attachAsset(characterId, {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.characterId = characterId;
+ self.down = function (x, y, obj) {
+ if (self.characterId === 'bubbles') {
+ blowOutCandles();
+ } else if (self.characterId === 'bliss') {
+ playHappyBirthday();
+ }
+ };
+ return self;
+});
+var Confetti = Container.expand(function () {
+ var self = Container.call(this);
+ var colors = [0xFF69B4, 0x00CED1, 0xFFD700, 0xFF6347, 0x98FB98];
+ var randomColor = colors[Math.floor(Math.random() * colors.length)];
+ var confettiGraphics = self.attachAsset('confetti', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ confettiGraphics.tint = randomColor;
+ self.speed = Math.random() * 3 + 2;
+ self.rotation = Math.random() * 0.1 - 0.05;
+ self.update = function () {
+ self.y += self.speed;
+ self.rotation += self.rotation;
+ if (self.y > 2732 + 50) {
+ self.destroy();
+ for (var i = confettiPieces.length - 1; i >= 0; i--) {
+ if (confettiPieces[i] === self) {
+ confettiPieces.splice(i, 1);
+ break;
+ }
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var candles = [];
+var confettiPieces = [];
+var candlesBlownCount = 0;
+var gameComplete = false;
+// Create cake
+var cake = game.addChild(LK.getAsset('cake', {
+ anchorX: 0.5,
+ anchorY: 0.5
+}));
+cake.x = 1024;
+cake.y = 1400;
+// Create candles around the cake
+var candlePositions = [{
+ x: 1024 - 120,
+ y: 1320
+}, {
+ x: 1024 - 60,
+ y: 1300
+}, {
+ x: 1024,
+ y: 1290
+}, {
+ x: 1024 + 60,
+ y: 1300
+}, {
+ x: 1024 + 120,
+ y: 1320
+}];
+for (var i = 0; i < candlePositions.length; i++) {
+ var candle = game.addChild(new Candle());
+ candle.x = candlePositions[i].x;
+ candle.y = candlePositions[i].y;
+ candles.push(candle);
+}
+// Create characters
+var bubbles = game.addChild(new Character('bubbles'));
+bubbles.x = 1024;
+bubbles.y = 1800;
+var blossom = game.addChild(new Character('blossom'));
+blossom.x = 400;
+blossom.y = 1700;
+var buttercup = game.addChild(new Character('buttercup'));
+buttercup.x = 1648;
+buttercup.y = 1700;
+var bliss = game.addChild(new Character('bliss'));
+bliss.x = 1024;
+bliss.y = 800;
+// Create music note above Bliss
+var musicNote = game.addChild(LK.getAsset('musicNote', {
+ anchorX: 0.5,
+ anchorY: 0.5
+}));
+musicNote.x = bliss.x + 70;
+musicNote.y = bliss.y - 150;
+// Create bushes
+var bushPositions = [{
+ x: 200,
+ y: 2000
+}, {
+ x: 1848,
+ y: 2000
+}, {
+ x: 100,
+ y: 1200
+}, {
+ x: 1948,
+ y: 1200
+}];
+for (var i = 0; i < bushPositions.length; i++) {
+ var bush = game.addChild(new Bush());
+ bush.x = bushPositions[i].x;
+ bush.y = bushPositions[i].y;
+}
+// Create instruction text
+var instructionText = new Text2('Tap candles to light them!', {
+ size: 50,
+ fill: '#FFFFFF'
+});
+instructionText.anchor.set(0.5, 0);
+LK.gui.top.addChild(instructionText);
+function areAllCandlesLit() {
+ for (var i = 0; i < candles.length; i++) {
+ if (!candles[i].isLit) {
+ return false;
+ }
+ }
+ return true;
+}
+function blowOutCandles() {
+ if (areAllCandlesLit() && !gameComplete) {
+ for (var i = 0; i < candles.length; i++) {
+ candles[i].extinguish();
+ }
+ candlesBlownCount++;
+ LK.getSound('blowCandle').play();
+ // Animate Bubbles blowing
+ tween(bubbles, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ tween(bubbles, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeIn
+ });
+ if (candlesBlownCount === 1) {
+ instructionText.setText('Great! Light them again and blow once more!');
+ } else if (candlesBlownCount === 2) {
+ triggerCakeExplosion();
+ }
+ }
+}
+function playHappyBirthday() {
+ LK.getSound('happyBirthday').play();
+ // Animate music note
+ tween(musicNote, {
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ tween(musicNote, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ // Show singing text
+ var singingText = new Text2('♪ Happy Birthday! ♪', {
+ size: 60,
+ fill: '#FF69B4'
+ });
+ singingText.anchor.set(0.5, 0.5);
+ singingText.x = bliss.x;
+ singingText.y = bliss.y - 200;
+ game.addChild(singingText);
+ tween(singingText, {
+ alpha: 0,
+ y: singingText.y - 100
+ }, {
+ duration: 3000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ singingText.destroy();
+ }
+ });
+}
+function triggerCakeExplosion() {
+ gameComplete = true;
+ instructionText.setText('Happy Birthday Bubbles!');
+ // Create explosion effect
+ var explosion = game.addChild(LK.getAsset('explosion', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ explosion.x = cake.x;
+ explosion.y = cake.y;
+ explosion.alpha = 0.7;
+ tween(explosion, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0
+ }, {
+ duration: 1000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ explosion.destroy();
+ }
+ });
+ LK.getSound('explosion').play();
+ // Create confetti
+ for (var i = 0; i < 50; i++) {
+ var confetti = new Confetti();
+ confetti.x = Math.random() * 2048;
+ confetti.y = -50;
+ game.addChild(confetti);
+ confettiPieces.push(confetti);
+ }
+ // Animate cake
+ tween(cake, {
+ scaleX: 1.3,
+ scaleY: 1.3
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ tween(cake, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 500,
+ easing: tween.easeIn
+ });
+}
+game.update = function () {
+ // Update instruction text based on game state
+ if (!gameComplete) {
+ if (areAllCandlesLit()) {
+ if (candlesBlownCount === 0) {
+ instructionText.setText('Tap Bubbles to blow out the candles!');
+ } else if (candlesBlownCount === 1) {
+ instructionText.setText('Light the candles again!');
+ }
+ } else if (candlesBlownCount === 1) {
+ instructionText.setText('Tap candles to light them again!');
+ }
+ }
+};
\ No newline at end of file