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();
ducksFed++;
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: ' + ducksFed + '/10');
// Check win condition
if (ducksFed >= 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
@@ -208,9 +208,9 @@
var seedDropped = false;
for (var i = 0; i < ducks.length; i++) {
if (!ducks[i].fed && draggedSeed.intersects(ducks[i])) {
ducks[i].feedDuck();
- ducksFixed++;
+ ducksFed++;
LK.getSound('feedSound').play();
seedDropped = true;
break;
}
@@ -232,11 +232,11 @@
// Update timer display
var remainingTime = Math.ceil((maxGameTime - gameTimer) / 60);
timerText.setText('Time: ' + remainingTime + 's');
// Update score display
- scoreText.setText('Ducks Fed: ' + ducksFixed + '/10');
+ scoreText.setText('Ducks Fed: ' + ducksFed + '/10');
// Check win condition
- if (ducksFixed >= 10) {
+ if (ducksFed >= 10) {
LK.showYouWin();
return;
}
// Check if goose should arrive