User prompt
make all the text white
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'target')' in or related to this line: 'if (obj.event.target && obj.event.target.down) {' Line Number: 412
User prompt
make a menu that has the name of the game 'Lava Bounce 2' on the top of the screen and then a start game button that starts the game and then a settings menu for when clicked on a menu pops up that adjusts the colors of the paddle, ball, and lava ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
remove the hits text and keep the number there
User prompt
why is it still not there
User prompt
still not there
User prompt
still not there
User prompt
add a score counter that is in the center of the screen and counts how many times the ball has hit the paddle
User prompt
move the score counter to the center
User prompt
remove the start menu
User prompt
fix that
User prompt
well fix that
User prompt
when i click play the game does not start
User prompt
make the buttons clickable
User prompt
Please fix the bug: 'storage.getValue is not a function' in or related to this line: 'var soundSetting = storage.getValue('soundEnabled');' Line Number: 288 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
make a start menu where there is settings and a play button
User prompt
move the score counter to the top center of the screen\
User prompt
move the score counter to the center
User prompt
when the ball falls into the lava make it respawn in the top center
User prompt
when you die the screen flashes red ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
when you die start again right away, no delay
User prompt
make the ball go faster
User prompt
when the ball hits the paddle make the ball go in a random direction
User prompt
when the ball hits the paddle your score only goes up by one
User prompt
make the ball spawn in the center
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphic = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = 0; self.speedY = 0; self.active = true; self.reset = function (speedMultiplier) { // Set position to center of screen self.x = 2048 / 2; self.y = 2732 / 2; // Random horizontal speed self.speedX = (Math.random() * 8 - 4) * speedMultiplier; self.speedY = (Math.random() * 2 + 3) * speedMultiplier; self.active = true; }; self.update = function () { if (!self.active) { return; } // Apply velocity self.x += self.speedX; self.y += self.speedY; // Bounce off sides if (self.x < 20 || self.x > 2028) { self.speedX = -self.speedX; // Keep the ball within the game boundaries self.x = Math.max(20, Math.min(2028, self.x)); } // Check if ball hits the top of the screen if (self.y < 20) { self.speedY = -self.speedY; self.y = 20; } }; return self; }); var Paddle = Container.expand(function () { var self = Container.call(this); var paddleGraphic = self.attachAsset('paddle', { anchorX: 0.5, anchorY: 0.5 }); self.width = paddleGraphic.width; self.height = paddleGraphic.height; self.update = function () { // Keep paddle within screen bounds self.x = Math.max(self.width / 2, Math.min(2048 - self.width / 2, self.x)); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x34495e }); /**** * Game Code ****/ // Game variables var paddle; var lava; var balls = []; var score = 0; var level = 1; var combo = 0; var lastBallHit = 0; var gameActive = true; var speedMultiplier = 1.0; var maxBalls = 1; var ballsInPlay = 0; var spawnInterval; // UI elements var scoreTxt; var levelTxt; var comboTxt; // Create background var background = LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(background); // Initialize lava lava = LK.getAsset('lava', { anchorX: 0.5, anchorY: 0, x: 2048 / 2, y: 2732 - 200 }); game.addChild(lava); // Initialize paddle paddle = new Paddle(); paddle.x = 2048 / 2; paddle.y = 2732 - 250; game.addChild(paddle); // Create score text scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); scoreTxt.x = 50; scoreTxt.y = 50; LK.gui.addChild(scoreTxt); // Create level text levelTxt = new Text2('Level: 1', { size: 80, fill: 0xFFFFFF }); levelTxt.anchor.set(1, 0); levelTxt.x = 2000; levelTxt.y = 50; LK.gui.addChild(levelTxt); // Create combo text comboTxt = new Text2('', { size: 60, fill: 0xF39C12 }); comboTxt.anchor.set(0.5, 0); comboTxt.x = 1024; comboTxt.y = 50; comboTxt.alpha = 0; LK.gui.addChild(comboTxt); // Initialize balls array function createBall() { if (ballsInPlay >= maxBalls || !gameActive) { return; } var ball = new Ball(); ball.reset(speedMultiplier); balls.push(ball); game.addChild(ball); ballsInPlay++; } // Handle paddle movement game.down = function (x, y, obj) { paddle.x = x; }; game.move = function (x, y, obj) { paddle.x = x; }; // Update function game.update = function () { if (!gameActive) { return; } // Only create a ball if none exists if (ballsInPlay === 0) { createBall(); } // Update paddle paddle.update(); // Update all balls for (var i = balls.length - 1; i >= 0; i--) { var ball = balls[i]; if (!ball.active) { continue; } ball.update(); // Check if ball hits paddle if (ball.speedY > 0 && ball.y + 20 >= paddle.y - paddle.height / 2 && ball.y - 20 <= paddle.y + paddle.height / 2 && ball.x + 20 >= paddle.x - paddle.width / 2 && ball.x - 20 <= paddle.x + paddle.width / 2) { // Calculate bounce angle based on where the ball hit the paddle var hitPos = (ball.x - paddle.x) / (paddle.width / 2); ball.speedX = hitPos * 8 * speedMultiplier; ball.speedY = -Math.abs(ball.speedY) - 0.5; // Move ball above paddle to prevent multiple collisions ball.y = paddle.y - paddle.height / 2 - 20; // Handle scoring var now = Date.now(); if (now - lastBallHit < 1500) { combo++; score += 10 * combo; comboTxt.setText('Combo x' + combo + '!'); comboTxt.alpha = 1; tween(comboTxt, { alpha: 0 }, { duration: 1500 }); } else { combo = 1; score += 10; } lastBallHit = now; // Update score scoreTxt.setText('Score: ' + score); LK.setScore(score); // Play bounce sound LK.getSound('bounce').play(); // Level up based on score if (score >= level * 100) { levelUp(); } } // Check if ball falls into lava if (ball.y > lava.y) { // Play lava sound LK.getSound('lava').play(); // Flash the lava tween(lava, { tint: 0xffffff }, { duration: 200, onFinish: function onFinish() { tween(lava, { tint: 0xe74c3c }, { duration: 200 }); } }); // Remove ball ball.active = false; ball.destroy(); balls.splice(i, 1); ballsInPlay--; // Check game over if (balls.length === 0 && ballsInPlay === 0) { gameOver(); } } } }; function levelUp() { level++; levelTxt.setText('Level: ' + level); // Show level up message var levelUpTxt = new Text2('LEVEL UP!', { size: 120, fill: 0x2ECC71 }); levelUpTxt.anchor.set(0.5, 0.5); levelUpTxt.x = 1024; levelUpTxt.y = 1366; LK.gui.addChild(levelUpTxt); // Animate level up message tween(levelUpTxt, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 1000, onFinish: function onFinish() { levelUpTxt.destroy(); } }); // Increase difficulty speedMultiplier += 0.1; maxBalls = 1; // Keep maxBalls at 1 } function gameOver() { gameActive = false; // Game over - let LK handle it LK.showGameOver(); } // Start the game function startGame() { // Reset variables score = 0; level = 1; combo = 0; lastBallHit = 0; gameActive = true; speedMultiplier = 1.0; maxBalls = 5; ballsInPlay = 0; // Update UI scoreTxt.setText('Score: 0'); levelTxt.setText('Level: 1'); comboTxt.setText(''); comboTxt.alpha = 0; // Clear any existing balls for (var i = 0; i < balls.length; i++) { balls[i].destroy(); } balls = []; // Start with one ball createBall(); // Play music LK.playMusic('gameMusic', { fade: { start: 0, end: 0.6, duration: 1000 } }); } // Start the game startGame();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGraphic = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 0;
self.speedY = 0;
self.active = true;
self.reset = function (speedMultiplier) {
// Set position to center of screen
self.x = 2048 / 2;
self.y = 2732 / 2;
// Random horizontal speed
self.speedX = (Math.random() * 8 - 4) * speedMultiplier;
self.speedY = (Math.random() * 2 + 3) * speedMultiplier;
self.active = true;
};
self.update = function () {
if (!self.active) {
return;
}
// Apply velocity
self.x += self.speedX;
self.y += self.speedY;
// Bounce off sides
if (self.x < 20 || self.x > 2028) {
self.speedX = -self.speedX;
// Keep the ball within the game boundaries
self.x = Math.max(20, Math.min(2028, self.x));
}
// Check if ball hits the top of the screen
if (self.y < 20) {
self.speedY = -self.speedY;
self.y = 20;
}
};
return self;
});
var Paddle = Container.expand(function () {
var self = Container.call(this);
var paddleGraphic = self.attachAsset('paddle', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = paddleGraphic.width;
self.height = paddleGraphic.height;
self.update = function () {
// Keep paddle within screen bounds
self.x = Math.max(self.width / 2, Math.min(2048 - self.width / 2, self.x));
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x34495e
});
/****
* Game Code
****/
// Game variables
var paddle;
var lava;
var balls = [];
var score = 0;
var level = 1;
var combo = 0;
var lastBallHit = 0;
var gameActive = true;
var speedMultiplier = 1.0;
var maxBalls = 1;
var ballsInPlay = 0;
var spawnInterval;
// UI elements
var scoreTxt;
var levelTxt;
var comboTxt;
// Create background
var background = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChild(background);
// Initialize lava
lava = LK.getAsset('lava', {
anchorX: 0.5,
anchorY: 0,
x: 2048 / 2,
y: 2732 - 200
});
game.addChild(lava);
// Initialize paddle
paddle = new Paddle();
paddle.x = 2048 / 2;
paddle.y = 2732 - 250;
game.addChild(paddle);
// Create score text
scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 50;
scoreTxt.y = 50;
LK.gui.addChild(scoreTxt);
// Create level text
levelTxt = new Text2('Level: 1', {
size: 80,
fill: 0xFFFFFF
});
levelTxt.anchor.set(1, 0);
levelTxt.x = 2000;
levelTxt.y = 50;
LK.gui.addChild(levelTxt);
// Create combo text
comboTxt = new Text2('', {
size: 60,
fill: 0xF39C12
});
comboTxt.anchor.set(0.5, 0);
comboTxt.x = 1024;
comboTxt.y = 50;
comboTxt.alpha = 0;
LK.gui.addChild(comboTxt);
// Initialize balls array
function createBall() {
if (ballsInPlay >= maxBalls || !gameActive) {
return;
}
var ball = new Ball();
ball.reset(speedMultiplier);
balls.push(ball);
game.addChild(ball);
ballsInPlay++;
}
// Handle paddle movement
game.down = function (x, y, obj) {
paddle.x = x;
};
game.move = function (x, y, obj) {
paddle.x = x;
};
// Update function
game.update = function () {
if (!gameActive) {
return;
}
// Only create a ball if none exists
if (ballsInPlay === 0) {
createBall();
}
// Update paddle
paddle.update();
// Update all balls
for (var i = balls.length - 1; i >= 0; i--) {
var ball = balls[i];
if (!ball.active) {
continue;
}
ball.update();
// Check if ball hits paddle
if (ball.speedY > 0 && ball.y + 20 >= paddle.y - paddle.height / 2 && ball.y - 20 <= paddle.y + paddle.height / 2 && ball.x + 20 >= paddle.x - paddle.width / 2 && ball.x - 20 <= paddle.x + paddle.width / 2) {
// Calculate bounce angle based on where the ball hit the paddle
var hitPos = (ball.x - paddle.x) / (paddle.width / 2);
ball.speedX = hitPos * 8 * speedMultiplier;
ball.speedY = -Math.abs(ball.speedY) - 0.5;
// Move ball above paddle to prevent multiple collisions
ball.y = paddle.y - paddle.height / 2 - 20;
// Handle scoring
var now = Date.now();
if (now - lastBallHit < 1500) {
combo++;
score += 10 * combo;
comboTxt.setText('Combo x' + combo + '!');
comboTxt.alpha = 1;
tween(comboTxt, {
alpha: 0
}, {
duration: 1500
});
} else {
combo = 1;
score += 10;
}
lastBallHit = now;
// Update score
scoreTxt.setText('Score: ' + score);
LK.setScore(score);
// Play bounce sound
LK.getSound('bounce').play();
// Level up based on score
if (score >= level * 100) {
levelUp();
}
}
// Check if ball falls into lava
if (ball.y > lava.y) {
// Play lava sound
LK.getSound('lava').play();
// Flash the lava
tween(lava, {
tint: 0xffffff
}, {
duration: 200,
onFinish: function onFinish() {
tween(lava, {
tint: 0xe74c3c
}, {
duration: 200
});
}
});
// Remove ball
ball.active = false;
ball.destroy();
balls.splice(i, 1);
ballsInPlay--;
// Check game over
if (balls.length === 0 && ballsInPlay === 0) {
gameOver();
}
}
}
};
function levelUp() {
level++;
levelTxt.setText('Level: ' + level);
// Show level up message
var levelUpTxt = new Text2('LEVEL UP!', {
size: 120,
fill: 0x2ECC71
});
levelUpTxt.anchor.set(0.5, 0.5);
levelUpTxt.x = 1024;
levelUpTxt.y = 1366;
LK.gui.addChild(levelUpTxt);
// Animate level up message
tween(levelUpTxt, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 1000,
onFinish: function onFinish() {
levelUpTxt.destroy();
}
});
// Increase difficulty
speedMultiplier += 0.1;
maxBalls = 1; // Keep maxBalls at 1
}
function gameOver() {
gameActive = false;
// Game over - let LK handle it
LK.showGameOver();
}
// Start the game
function startGame() {
// Reset variables
score = 0;
level = 1;
combo = 0;
lastBallHit = 0;
gameActive = true;
speedMultiplier = 1.0;
maxBalls = 5;
ballsInPlay = 0;
// Update UI
scoreTxt.setText('Score: 0');
levelTxt.setText('Level: 1');
comboTxt.setText('');
comboTxt.alpha = 0;
// Clear any existing balls
for (var i = 0; i < balls.length; i++) {
balls[i].destroy();
}
balls = [];
// Start with one ball
createBall();
// Play music
LK.playMusic('gameMusic', {
fade: {
start: 0,
end: 0.6,
duration: 1000
}
});
}
// Start the game
startGame();