User prompt
Please fix the bug: 'ReferenceError: Can't find variable: ducksFixed' in or related to this line: 'scoreText.setText('Ducks Fed: ' + ducksFixed + '/10');' Line Number: 254
Code edit (1 edits merged)
Please save this source code
User prompt
Duck Feeding Frenzy
Initial prompt
Toca duck feeding (2015). Today the powerpuff girls are feeding the ducks. They have 3 bags of seeds for the ducks. Place the duck seeds onto the ducks to feed 10 of them, before a big goose go “squawk squawk!” To scare them to scream with tears falling
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Duck = Container.expand(function () { var self = Container.call(this); var duckGraphics = self.attachAsset('duck', { anchorX: 0.5, anchorY: 0.5 }); self.fed = false; self.moveDirection = Math.random() * Math.PI * 2; self.speed = 1 + Math.random() * 2; self.changeDirectionTimer = 0; self.update = function () { if (self.fed) return; self.changeDirectionTimer++; if (self.changeDirectionTimer > 60) { self.moveDirection = Math.random() * Math.PI * 2; self.changeDirectionTimer = 0; } var newX = self.x + Math.cos(self.moveDirection) * self.speed; var newY = self.y + Math.sin(self.moveDirection) * self.speed; // Keep duck within pond bounds if (newX < 400 || newX > 1648 || newY < 300 || newY > 1200) { self.moveDirection += Math.PI; } else { self.x = newX; self.y = newY; } }; self.feedDuck = function () { if (self.fed) return; self.fed = true; LK.getSound('duckQuack').play(); // Happy animation tween(duckGraphics, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300 }); tween(duckGraphics, { alpha: 0 }, { duration: 800, onFinish: function onFinish() { self.destroy(); } }); }; self.fleeDuck = function () { if (self.fed) return; // Crying animation tween(duckGraphics, { tint: 0x0000FF }, { duration: 200 }); tween(self, { x: -200, y: -200 }, { duration: 1000, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var Goose = Container.expand(function () { var self = Container.call(this); var gooseGraphics = self.attachAsset('goose', { anchorX: 0.5, anchorY: 0.5 }); self.visible = false; self.arrive = function () { self.visible = true; self.x = 1024; self.y = 200; LK.getSound('gooseSound').play(); // Scare animation tween(gooseGraphics, { scaleX: 2, scaleY: 2 }, { duration: 500 }); // Make all remaining ducks flee for (var i = 0; i < ducks.length; i++) { if (!ducks[i].fed) { ducks[i].fleeDuck(); } } // Game over after animation LK.setTimeout(function () { LK.showGameOver(); }, 2000); }; return self; }); var Seed = Container.expand(function () { var self = Container.call(this); var seedGraphics = self.attachAsset('seed', { anchorX: 0.5, anchorY: 0.5 }); self.beingDragged = false; self.down = function (x, y, obj) { self.beingDragged = true; draggedSeed = self; }; return self; }); var SeedBag = Container.expand(function () { var self = Container.call(this); var bagGraphics = self.attachAsset('seedBag', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { createNewSeed(self.x, self.y); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var ducks = []; var seeds = []; var seedBags = []; var draggedSeed = null; var ducksFed = 0; var gameTimer = 0; var maxGameTime = 3600; // 60 seconds at 60fps var goose = null; // Create pond var pond = game.addChild(LK.getAsset('pond', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 866 })); // Create seed bags for (var i = 0; i < 3; i++) { var bag = game.addChild(new SeedBag()); bag.x = 400 + i * 400; bag.y = 2400; seedBags.push(bag); } // Create ducks for (var i = 0; i < 10; i++) { var duck = game.addChild(new Duck()); duck.x = 500 + Math.random() * 1000; duck.y = 400 + Math.random() * 800; ducks.push(duck); } // Create goose goose = game.addChild(new Goose()); // UI Elements var scoreText = new Text2('Ducks Fed: 0/10', { size: 80, fill: 0x000000 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var timerText = new Text2('Time: 60s', { size: 60, fill: 0xFF0000 }); timerText.anchor.set(1, 0); LK.gui.topRight.addChild(timerText); // Create new seed function function createNewSeed(x, y) { var seed = game.addChild(new Seed()); seed.x = x; seed.y = y; seeds.push(seed); draggedSeed = seed; seed.beingDragged = true; } // Game event handlers game.move = function (x, y, obj) { if (draggedSeed && draggedSeed.beingDragged) { draggedSeed.x = x; draggedSeed.y = y; } }; game.up = function (x, y, obj) { if (draggedSeed && draggedSeed.beingDragged) { draggedSeed.beingDragged = false; // Check if seed is dropped on any duck var seedDropped = false; for (var i = 0; i < ducks.length; i++) { if (!ducks[i].fed && draggedSeed.intersects(ducks[i])) { ducks[i].feedDuck(); ducksFixed++; LK.getSound('feedSound').play(); seedDropped = true; break; } } // Remove seed whether it was used or not for (var j = seeds.length - 1; j >= 0; j--) { if (seeds[j] === draggedSeed) { seeds[j].destroy(); seeds.splice(j, 1); break; } } draggedSeed = null; } }; // Main game update loop game.update = function () { gameTimer++; // Update timer display var remainingTime = Math.ceil((maxGameTime - gameTimer) / 60); timerText.setText('Time: ' + remainingTime + 's'); // Update score display scoreText.setText('Ducks Fed: ' + ducksFixed + '/10'); // Check win condition if (ducksFixed >= 10) { LK.showYouWin(); return; } // Check if goose should arrive if (gameTimer >= maxGameTime && !goose.visible) { goose.arrive(); } // Clean up destroyed ducks from array for (var i = ducks.length - 1; i >= 0; i--) { if (ducks[i].fed && ducks[i].alpha <= 0) { ducks.splice(i, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,252 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Duck = Container.expand(function () {
+ var self = Container.call(this);
+ var duckGraphics = self.attachAsset('duck', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fed = false;
+ self.moveDirection = Math.random() * Math.PI * 2;
+ self.speed = 1 + Math.random() * 2;
+ self.changeDirectionTimer = 0;
+ self.update = function () {
+ if (self.fed) return;
+ self.changeDirectionTimer++;
+ if (self.changeDirectionTimer > 60) {
+ self.moveDirection = Math.random() * Math.PI * 2;
+ self.changeDirectionTimer = 0;
+ }
+ var newX = self.x + Math.cos(self.moveDirection) * self.speed;
+ var newY = self.y + Math.sin(self.moveDirection) * self.speed;
+ // Keep duck within pond bounds
+ if (newX < 400 || newX > 1648 || newY < 300 || newY > 1200) {
+ self.moveDirection += Math.PI;
+ } else {
+ self.x = newX;
+ self.y = newY;
+ }
+ };
+ self.feedDuck = function () {
+ if (self.fed) return;
+ self.fed = true;
+ LK.getSound('duckQuack').play();
+ // Happy animation
+ tween(duckGraphics, {
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300
+ });
+ tween(duckGraphics, {
+ alpha: 0
+ }, {
+ duration: 800,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ self.fleeDuck = function () {
+ if (self.fed) return;
+ // Crying animation
+ tween(duckGraphics, {
+ tint: 0x0000FF
+ }, {
+ duration: 200
+ });
+ tween(self, {
+ x: -200,
+ y: -200
+ }, {
+ duration: 1000,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ return self;
+});
+var Goose = Container.expand(function () {
+ var self = Container.call(this);
+ var gooseGraphics = self.attachAsset('goose', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.visible = false;
+ self.arrive = function () {
+ self.visible = true;
+ self.x = 1024;
+ self.y = 200;
+ LK.getSound('gooseSound').play();
+ // Scare animation
+ tween(gooseGraphics, {
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 500
+ });
+ // Make all remaining ducks flee
+ for (var i = 0; i < ducks.length; i++) {
+ if (!ducks[i].fed) {
+ ducks[i].fleeDuck();
+ }
+ }
+ // Game over after animation
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 2000);
+ };
+ return self;
+});
+var Seed = Container.expand(function () {
+ var self = Container.call(this);
+ var seedGraphics = self.attachAsset('seed', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.beingDragged = false;
+ self.down = function (x, y, obj) {
+ self.beingDragged = true;
+ draggedSeed = self;
+ };
+ return self;
+});
+var SeedBag = Container.expand(function () {
+ var self = Container.call(this);
+ var bagGraphics = self.attachAsset('seedBag', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.down = function (x, y, obj) {
+ createNewSeed(self.x, self.y);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var ducks = [];
+var seeds = [];
+var seedBags = [];
+var draggedSeed = null;
+var ducksFed = 0;
+var gameTimer = 0;
+var maxGameTime = 3600; // 60 seconds at 60fps
+var goose = null;
+// Create pond
+var pond = game.addChild(LK.getAsset('pond', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 866
+}));
+// Create seed bags
+for (var i = 0; i < 3; i++) {
+ var bag = game.addChild(new SeedBag());
+ bag.x = 400 + i * 400;
+ bag.y = 2400;
+ seedBags.push(bag);
+}
+// Create ducks
+for (var i = 0; i < 10; i++) {
+ var duck = game.addChild(new Duck());
+ duck.x = 500 + Math.random() * 1000;
+ duck.y = 400 + Math.random() * 800;
+ ducks.push(duck);
+}
+// Create goose
+goose = game.addChild(new Goose());
+// UI Elements
+var scoreText = new Text2('Ducks Fed: 0/10', {
+ size: 80,
+ fill: 0x000000
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var timerText = new Text2('Time: 60s', {
+ size: 60,
+ fill: 0xFF0000
+});
+timerText.anchor.set(1, 0);
+LK.gui.topRight.addChild(timerText);
+// Create new seed function
+function createNewSeed(x, y) {
+ var seed = game.addChild(new Seed());
+ seed.x = x;
+ seed.y = y;
+ seeds.push(seed);
+ draggedSeed = seed;
+ seed.beingDragged = true;
+}
+// Game event handlers
+game.move = function (x, y, obj) {
+ if (draggedSeed && draggedSeed.beingDragged) {
+ draggedSeed.x = x;
+ draggedSeed.y = y;
+ }
+};
+game.up = function (x, y, obj) {
+ if (draggedSeed && draggedSeed.beingDragged) {
+ draggedSeed.beingDragged = false;
+ // Check if seed is dropped on any duck
+ var seedDropped = false;
+ for (var i = 0; i < ducks.length; i++) {
+ if (!ducks[i].fed && draggedSeed.intersects(ducks[i])) {
+ ducks[i].feedDuck();
+ ducksFixed++;
+ LK.getSound('feedSound').play();
+ seedDropped = true;
+ break;
+ }
+ }
+ // Remove seed whether it was used or not
+ for (var j = seeds.length - 1; j >= 0; j--) {
+ if (seeds[j] === draggedSeed) {
+ seeds[j].destroy();
+ seeds.splice(j, 1);
+ break;
+ }
+ }
+ draggedSeed = null;
+ }
+};
+// Main game update loop
+game.update = function () {
+ gameTimer++;
+ // Update timer display
+ var remainingTime = Math.ceil((maxGameTime - gameTimer) / 60);
+ timerText.setText('Time: ' + remainingTime + 's');
+ // Update score display
+ scoreText.setText('Ducks Fed: ' + ducksFixed + '/10');
+ // Check win condition
+ if (ducksFixed >= 10) {
+ LK.showYouWin();
+ return;
+ }
+ // Check if goose should arrive
+ if (gameTimer >= maxGameTime && !goose.visible) {
+ goose.arrive();
+ }
+ // Clean up destroyed ducks from array
+ for (var i = ducks.length - 1; i >= 0; i--) {
+ if (ducks[i].fed && ducks[i].alpha <= 0) {
+ ducks.splice(i, 1);
+ }
+ }
+};
\ No newline at end of file