Code edit (25 edits merged)
Please save this source code
Code edit (10 edits merged)
Please save this source code
User prompt
Please fix the bug: 'PlayerDuck is not defined' in or related to this line: 'var playerDuck = game.addChild(new PlayerDuck());' Line Number: 100
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'self.attachAsset('playerDuck', {' Line Number: 47
Code edit (1 edits merged)
Please save this source code
User prompt
Make the bar to start from a little lower and more right
Code edit (5 edits merged)
Please save this source code
User prompt
Make the bar not move unless I speak
Code edit (5 edits merged)
Please save this source code
Code edit (5 edits merged)
Please save this source code
User prompt
Please fix the bug: 'volumeText is not defined' in or related to this line: 'volumeText.anchor.set(0.5, 0);' Line Number: 106
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'anchor')' in or related to this line: 'var volumeText = volumeText.anchor.set(0.5, 0);' Line Number: 106
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'startX is not defined' in or related to this line: 'duck.x = startX; // Starting position of the duck' Line Number: 109
Code edit (10 edits merged)
Please save this source code
User prompt
Put other two ducks (not players)
User prompt
Delete the last thing I asked you to do
Code edit (1 edits merged)
Please save this source code
User prompt
Make the player duck (white duck) more slow
User prompt
Perfect. Now I want to change a little the game. I want in the begging to select player. The players will be 8. I will insert a separate photo of each player in assets. And when the user selects a player, that specific player will be playing
Code edit (2 edits merged)
Please save this source code
User prompt
Make the ducks have more space between them
User prompt
In the end if I win, I want only just to be written "You Win!" and nothing more
User prompt
I also want it to be in the middle and a button saying "Play again"
/****
* 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;
}
};
});
// HzBar class representing the Hz bar
var HzBar = Container.expand(function () {
var self = Container.call(this);
var barGraphics = self.attachAsset('hzBar', {
width: 0,
// Initialize width to 0
anchorX: 0.0,
anchorY: 0.5
});
// Define the maximum pitch for full width
var maxPitch = 2000; // Set the maximum pitch value you expect
var screenWidth = 1500; // Adjust to your actual screen width for proper scaling
self.update = function () {
// Only update the bar's width and color when the player is speaking
if (facekit.volume > 0.5 && facekit.mouthOpen) {
// Scale the pitch to the bar width
barGraphics.width = Math.min(screenWidth, facekit.pitch / maxPitch * screenWidth);
// Change color based on the pitch value
if (facekit.pitch < 800) {
self.tint = 0x87CEEB; // Light blue for low pitch
} else {
self.tint = 0xFF0000; // Red for high pitch
}
}
};
return self;
});
// 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 && facekit.volume > 0.5 && facekit.mouthOpen) {
// Move only if volume is above the threshold and the player is speaking
// Update the speed based on the pitch
self.speed = facekit.pitch / 100;
self.x += self.speed;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Light blue background to simulate sky
});
/****
* Game Code
****/
// Initialize game elements
var ducks = [];
var countdown = 3;
var countdownText = new Text2(countdown.toString(), {
size: 150,
fill: 0xFFFFFF
});
var volumeText = new Text2('Volume: 0', {
size: 50,
fill: 0xFFFFFF
});
volumeText.anchor.set(0.5, 0);
LK.gui.top.addChild(volumeText);
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;
var hzBar = game.addChild(new HzBar());
hzBar.x = 100; // Start a few cm from the left end of the screen
hzBar.y = 100; // Start a little bit down from the top of the screen
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;
}
}
}
volumeText.setText('Volume: ' + Math.round(facekit.volume));
if (playerDuck.x > finishLine.x) {
LK.showYouWin();
return;
}
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();
}
}
};