User prompt
Undo the lava waves
User prompt
Make the waves on the lava bigger
User prompt
Make the lava have waves and move
User prompt
Make the score count in the center of screen
User prompt
Make the ball bounce in a random direction when it hits the paddle
User prompt
Make it so when the ball touches the paddle particles come out of the paddle
User prompt
make the ball bounce higher when it hits the paddle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Lava Bounce
Initial prompt
hey, can you make a game where there is a ball and a paddle and the ball falls down and if it hits the paddle the ball bounces up and you get one point and there lava at the bottom of the screen and if the ball touches the lava your points get reset
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.width = ballGraphics.width; self.height = ballGraphics.height; self.speedY = 5; self.speedX = 0; self.gravity = 0.2; self.maxSpeed = 15; self.reset = function () { self.x = 2048 / 2; self.y = 500; self.speedY = 5; self.speedX = Math.random() * 6 - 3; }; self.update = function () { // Apply gravity self.speedY += self.gravity; // Cap max speed if (self.speedY > self.maxSpeed) { self.speedY = self.maxSpeed; } // Update position self.x += self.speedX; self.y += self.speedY; // Bounce off walls if (self.x < self.width / 2) { self.x = self.width / 2; self.speedX = -self.speedX; } else if (self.x > 2048 - self.width / 2) { self.x = 2048 - self.width / 2; self.speedX = -self.speedX; } }; return self; }); var Lava = Container.expand(function () { var self = Container.call(this); var lavaGraphics = self.attachAsset('lava', { anchorX: 0.5, anchorY: 0.5 }); // Wave properties self.waveAmplitude = 15; self.waveFrequency = 0.5; self.waveSpeed = 0.05; self.waveOffset = 0; self.baseY = 0; self.wavePoints = []; self.numPoints = 10; // Initialize wave points self.initWavePoints = function () { self.baseY = self.y; for (var i = 0; i < self.numPoints; i++) { self.wavePoints[i] = { x: i / (self.numPoints - 1) * lavaGraphics.width - lavaGraphics.width / 2, y: 0, offset: Math.random() * Math.PI * 2 }; } }; // Update wave effect self.updateWave = function () { self.waveOffset += self.waveSpeed; // Apply wave motion to lava position var centerWave = Math.sin(self.waveOffset * self.waveFrequency) * self.waveAmplitude; self.y = self.baseY + centerWave; // Scale effect for more dynamic movement var scaleY = 1 + Math.sin(self.waveOffset * self.waveFrequency * 0.5) * 0.05; lavaGraphics.scaleY = scaleY; }; // Create a pulsing effect for the lava self.pulse = function () { tween(lavaGraphics, { alpha: 0.7 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(lavaGraphics, { alpha: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: self.pulse }); } }); }; self.pulse(); return self; }); var Paddle = Container.expand(function () { var self = Container.call(this); var paddleGraphics = self.attachAsset('paddle', { anchorX: 0.5, anchorY: 0.5 }); self.width = paddleGraphics.width; self.height = paddleGraphics.height; return self; }); var ParticleSystem = Container.expand(function () { var self = Container.call(this); self.particles = []; self.maxParticles = 20; self.createParticle = function (x, y, color) { var particle = new Container(); var particleGraphic = particle.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3 }); particleGraphic.tint = color; particle.x = x; particle.y = y; particle.alpha = 1; particle.speedX = Math.random() * 10 - 5; particle.speedY = -Math.random() * 5 - 2; particle.life = 30; self.addChild(particle); self.particles.push(particle); return particle; }; self.update = function () { for (var i = self.particles.length - 1; i >= 0; i--) { var particle = self.particles[i]; particle.x += particle.speedX; particle.y += particle.speedY; particle.speedY += 0.1; particle.life--; particle.alpha = particle.life / 30; if (particle.life <= 0) { self.removeChild(particle); self.particles.splice(i, 1); } } }; self.emitAt = function (x, y, color, count) { for (var i = 0; i < count; i++) { self.createParticle(x, y, color); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x220000 }); /**** * Game Code ****/ // Game variables var score = 0; var highScore = storage.highScore || 0; var difficulty = 1; var difficultyIncreaseTimer = null; // Create game objects var paddle = new Paddle(); var ball = new Ball(); var lava = new Lava(); var particles = new ParticleSystem(); // Initialize paddle position paddle.x = 2048 / 2; paddle.y = 2732 - 300; // Initialize ball position ball.reset(); // Initialize lava position lava.x = 2048 / 2; lava.y = 2732 - 100; lava.initWavePoints(); // Add objects to game game.addChild(paddle); game.addChild(ball); game.addChild(lava); game.addChild(particles); // Create score display var scoreTxt = new Text2('Score: 0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(scoreTxt); // Create high score display var highScoreTxt = new Text2('High Score: 0', { size: 40, fill: 0xFFBD00 }); highScoreTxt.anchor.set(1, 0); highScoreTxt.setText('High Score: ' + highScore); highScoreTxt.y = 70; LK.gui.topRight.addChild(highScoreTxt); // Touch/drag handling for paddle movement var isDragging = false; game.down = function (x, y, obj) { isDragging = true; paddle.x = x; }; game.move = function (x, y, obj) { if (isDragging) { paddle.x = x; // Clamp paddle position to keep it within screen bounds if (paddle.x < paddle.width / 2) { paddle.x = paddle.width / 2; } else if (paddle.x > 2048 - paddle.width / 2) { paddle.x = 2048 - paddle.width / 2; } } }; game.up = function (x, y, obj) { isDragging = false; }; // Function to update score display function updateScore() { scoreTxt.setText(score.toString()); // Update high score if current score is higher if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreTxt.setText('High Score: ' + highScore); } } // Function to increase difficulty over time function increaseDifficulty() { difficulty += 0.2; // Cap maximum difficulty if (difficulty > 3) { difficulty = 3; LK.clearInterval(difficultyIncreaseTimer); } // Update ball properties based on difficulty ball.gravity = 0.2 * difficulty; ball.maxSpeed = 15 * difficulty; } // Start difficulty increase timer difficultyIncreaseTimer = LK.setInterval(increaseDifficulty, 10000); // Play background music LK.playMusic('gameMusic', { fade: { start: 0, end: 0.5, duration: 1000 } }); // Game update loop game.update = function () { // Update ball position ball.update(); // Check for collision with paddle if (ball.speedY > 0 && ball.y + ball.height / 2 >= paddle.y - paddle.height / 2 && ball.y - ball.height / 2 <= paddle.y + paddle.height / 2 && ball.x + ball.width / 2 >= paddle.x - paddle.width / 2 && ball.x - ball.width / 2 <= paddle.x + paddle.width / 2) { // Bounce the ball in a random direction when it hits the paddle var angle = Math.random() * Math.PI * 0.7 - Math.PI * 0.35; // Random angle between -35 and +35 degrees var speed = Math.sqrt(ball.speedX * ball.speedX + ball.speedY * ball.speedY) * 1.5; // Keep overall speed but increase by 1.5x ball.speedY = -Math.cos(angle) * speed; // Vertical component (mostly upward) ball.speedX = Math.sin(angle) * speed; // Horizontal component // Add additional horizontal velocity based on where the ball hit the paddle var hitPosition = (ball.x - paddle.x) / (paddle.width / 2); ball.speedX += hitPosition * 5; // Add some influence from hit position, but less than before // Flash paddle to indicate hit LK.effects.flashObject(paddle, 0xffffff, 200); // Emit particles at collision point particles.emitAt(ball.x, paddle.y - paddle.height / 2, 0xffbd00, 15); // Add scale animation to paddle for bounce feedback tween(paddle, { scaleY: 0.7, y: paddle.y + 10 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(paddle, { scaleY: 1, y: 2732 - 300 }, { duration: 150, easing: tween.elasticOut }); } }); // Play bounce sound LK.getSound('bounce').play(); // Increment score score++; updateScore(); } // Check if ball touches lava if (ball.y + ball.height / 2 >= lava.y - lava.height / 2) { // Play lava hit sound LK.getSound('lava_hit').play(); // Flash screen red LK.effects.flashScreen(0xff0000, 500); // Reset score score = 0; updateScore(); // Reset ball ball.reset(); // Reset difficulty difficulty = 1; ball.gravity = 0.2; ball.maxSpeed = 15; // Restart difficulty increase timer LK.clearInterval(difficultyIncreaseTimer); difficultyIncreaseTimer = LK.setInterval(increaseDifficulty, 10000); } // If ball goes too high, change direction if (ball.y < 100) { ball.speedY = Math.abs(ball.speedY) * 0.5; } // Update particles particles.update(); // Update lava wave effect lava.updateWave(); };
===================================================================
--- original.js
+++ change.js
@@ -53,8 +53,37 @@
var lavaGraphics = self.attachAsset('lava', {
anchorX: 0.5,
anchorY: 0.5
});
+ // Wave properties
+ self.waveAmplitude = 15;
+ self.waveFrequency = 0.5;
+ self.waveSpeed = 0.05;
+ self.waveOffset = 0;
+ self.baseY = 0;
+ self.wavePoints = [];
+ self.numPoints = 10;
+ // Initialize wave points
+ self.initWavePoints = function () {
+ self.baseY = self.y;
+ for (var i = 0; i < self.numPoints; i++) {
+ self.wavePoints[i] = {
+ x: i / (self.numPoints - 1) * lavaGraphics.width - lavaGraphics.width / 2,
+ y: 0,
+ offset: Math.random() * Math.PI * 2
+ };
+ }
+ };
+ // Update wave effect
+ self.updateWave = function () {
+ self.waveOffset += self.waveSpeed;
+ // Apply wave motion to lava position
+ var centerWave = Math.sin(self.waveOffset * self.waveFrequency) * self.waveAmplitude;
+ self.y = self.baseY + centerWave;
+ // Scale effect for more dynamic movement
+ var scaleY = 1 + Math.sin(self.waveOffset * self.waveFrequency * 0.5) * 0.05;
+ lavaGraphics.scaleY = scaleY;
+ };
// Create a pulsing effect for the lava
self.pulse = function () {
tween(lavaGraphics, {
alpha: 0.7
@@ -157,8 +186,9 @@
ball.reset();
// Initialize lava position
lava.x = 2048 / 2;
lava.y = 2732 - 100;
+lava.initWavePoints();
// Add objects to game
game.addChild(paddle);
game.addChild(ball);
game.addChild(lava);
@@ -296,5 +326,7 @@
ball.speedY = Math.abs(ball.speedY) * 0.5;
}
// Update particles
particles.update();
+ // Update lava wave effect
+ lava.updateWave();
};
\ No newline at end of file