/****
* Plugins
****/
var facekit = LK.import("@upit/facekit.v1");
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Duck class representing the player's duck
var Duck = Container.expand(function () {
var self = Container.call(this);
var duckGraphics = self.attachAsset('duck', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1; // Initial speed of the duck
self.speedVariation = 0; // Variable to keep track of the speed variation
self.update = function () {
if (countdown == 0) {
// Update the duck's speed using the tween plugin
tween(self, {
speedVariation: Math.random() * 2 - 1
}, {
duration: Math.random() * 1000,
// Random duration for the speed variation
easing: tween.easeInOut
});
self.x += self.speed + self.speedVariation;
}
};
});
// PlayerDuck class representing the player's duck
var PlayerDuck = Container.expand(function () {
var self = Container.call(this);
// Create a playerDuck graphic and assign it to the playerDuck instance
var playerDuckGraphics = self.attachAsset('playerDuck', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
if (countdown == 0) {
self.x += facekit.volume * self.speed;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Light blue background to simulate sky
});
/****
* Game Code
****/
//<Assets used in the game will automatically appear here>
// Initialize game elements
var ducks = [];
var countdown = 3;
var countdownText = new Text2(countdown.toString(), {
size: 150,
fill: 0xFFFFFF
});
countdownText.anchor.set(0.5, 0);
var startX = 100;
LK.gui.center.addChild(countdownText);
for (var i = 0; i < 5; i++) {
var duck = game.addChild(new Duck());
duck.x = startX; // Starting position of the duck
duck.y = 600 + i * 200 + i * 20; // Aligned vertically
ducks.push(duck);
}
var playerDuck = game.addChild(new PlayerDuck());
var finishLine = game.addChild(LK.getAsset('finishLine', {}));
finishLine.x = 2048 - finishLine.width - 50;
finishLine.y = 0;
// Create multiple wave instances and position them at the bottom of the screen
var waves = [];
for (var i = 0; i < 5; i++) {
var wave = game.addChild(LK.getAsset('wave', {}));
wave.x = i * wave.width;
wave.y = 2732 - wave.height;
waves.push(wave);
}
var lastDuck = ducks[ducks.length - 1];
playerDuck.y = lastDuck.y + lastDuck.height + 100;
playerDuck.x = startX;
var score = 0;
// Update function called every frame
game.update = function () {
if (countdown > 0 && LK.ticks % 60 == 0) {
countdown--;
countdownText.setText(countdown.toString());
if (countdown == 0) {
LK.gui.center.removeChild(countdownText);
// Reset the duck's speed variation
for (var j = 0; j < ducks.length; j++) {
var duck = ducks[j];
duck.speedVariation = 0;
}
}
}
if (playerDuck.x > finishLine.x) {
LK.showYouWin();
return;
}
// Make the waves move up and down in a wave movement
for (var i = 0; i < waves.length; i++) {
waves[i].y += Math.sin((LK.ticks + i * 10) / 60) * 5;
}
if (LK.ticks % Math.floor(Math.random() * 60 + 60) == 0) {
LK.getSound('quack').play();
}
for (var j = 0; j < ducks.length; j++) {
var duck = ducks[j];
duck.update();
// Check if duck has reached the end of the track
if (duck.x > finishLine.x) {
LK.showGameOver();
}
}
};