User prompt
have instructionText disappear once the game score reaches 2000.
Code edit (3 edits merged)
Please save this source code
User prompt
add code to prevent the ball from getting stuck inside the topwall
User prompt
add code to prevent the ball from getting stuck inside the topwall
User prompt
create a new asse for lavadrop
Code edit (6 edits merged)
Please save this source code
User prompt
update the code so new bricks and bombs only spawn within 300 and (screen width - 300) on the x axis
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
add three new assets called leftWall, rightWal and topWall on the left, right and top of the screen. the ball should bounce off these walls.
User prompt
add a wall on the left, right and top of the screen. the ball should bounce off these walls.
User prompt
scale the lavadrops to 0.5. add a collision check for the ball and lavadrops
Code edit (9 edits merged)
Please save this source code
User prompt
when the score reaches 3000, have lava drops come down from the top of the screen at a random location on the x axis towards the bottom of the screen. there should be no more than 4 lava drops on the screen at a time. the spawning rate should be between 4 to 6 seconds.
Code edit (1 edits merged)
Please save this source code
User prompt
check why instructionText is not visible
Code edit (1 edits merged)
Please save this source code
User prompt
add an instruction text below the start button. it should be "Click to bounce the ball up. Every click bounces it up. You have limited number of click! Ph, and how did the lava floor get there???"
Code edit (2 edits merged)
Please save this source code
User prompt
make it so that the clicks dont countdown until the game starts after clicking the start button
User prompt
make it so a new brick does not spawn within 100 pixels of the current position of the ball.
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
make it so a new bomb does not spawn within 100 pixels of the current position of the ball.
User prompt
on gameover, show the final score on the top of the screen
/**** * Classes ****/ var Explosion = Container.expand(function () { var self = Container.call(this); var explosionGraphics = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5 }); // Set a timer to destroy the explosion after 0.5 seconds self.timer = LK.setTimeout(function () { self.destroy(); }, 500); }); var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = -15; self.firstBounce = true; self.bounce = function () { self.velocityY = -15; if (self.firstBounce) { self.velocityX = 5; // slight horizontal velocity self.firstBounce = false; } }; self.velocityX = 0; self.move = function () { self.x += self.velocityX; self.y += self.velocityY; self.velocityY += 0.5; // gravity effect // Check for ball and bomb collision for (var i = game.children.length - 1; i >= 0; i--) { var obj = game.children[i]; if (obj instanceof Bomb && self.intersects(obj)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(scoreDisplay.updateScore(score)); return; } } // Check for collisions with walls and make the ball bounce if (self.x - self.width / 2 < leftWall.x + leftWall.width / 2 || self.x + self.width / 2 > rightWall.x - rightWall.width / 2) { self.velocityX *= -1; // Invert the horizontal velocity } if (self.y - self.height / 2 < topWall.y + topWall.height / 2) { self.y = topWall.y + topWall.height / 2 + self.height / 2; self.velocityY *= -1; // Invert the vertical velocity } }; }); var Bomb = Container.expand(function () { var self = Container.call(this); var bombGraphics = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.timer = LK.setTimeout(function () { self.explode(); }, 3000); self.explode = function () { if (self.parent) { var explosion = game.addChild(new Explosion()); explosion.x = self.x; explosion.y = self.y; self.destroy(); } }; }); var Brick = Container.expand(function () { var self = Container.call(this); var brickGraphics = self.attachAsset('brick', { anchorX: 0.5, anchorY: 0.5 }); }); var LavaDrop = Container.expand(function () { var self = Container.call(this); var lavaDropGraphics = self.attachAsset('lavaDrop', { anchorX: 0.5, anchorY: 0.5 }); self.speedY = 5; self.move = function () { self.y += self.speedY; // Destroy the lava drop if it goes off the bottom of the screen if (self.y > 2732) { self.destroy(); } }; }); var StartButton = Container.expand(function () { var self = Container.call(this); var startButtonGraphics = self.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); self.on('down', function () { game.start(); }); }); var Lava = Container.expand(function () { var self = Container.call(this); var lavaGraphics = self.attachAsset('lava', { anchorX: 0.5, anchorY: 0 }); self.y = 2800 - self.height; // position at the bottom of the screen }); var Wall = Container.expand(function (assetId) { var self = Container.call(this); var wallGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); }); var ScoreDisplay = Container.expand(function () { var self = Container.call(this); var scoreText = new Text2('Score: 0', { size: 80, fill: "#ffffff" }); scoreText.anchor.set(0, 0.5); self.addChild(scoreText); self.updateScore = function (newScore) { scoreText.setText('Score: ' + newScore.toString()); }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ var gameStarted = false; var score = 0; var clicksLeft = 10; var ball = game.addChild(new Ball()); ball.x = 2048 / 2; ball.y = 2732 / 2.2; var lavaTiles = []; var numberOfLavaTiles = Math.ceil(2048 / 400); // Calculate the number of lava tiles needed to cover the screen width for (var i = 0; i < numberOfLavaTiles; i++) { var lava = game.addChild(new Lava()); lava.x = i * 400 * 0.90 + 200; // Position each tile with a 5% overlap lavaTiles.push(lava); } var leftWall = game.addChild(new Wall('leftWall')); leftWall.x = leftWall.width / 2; leftWall.y = 2732 / 2; var rightWall = game.addChild(new Wall('rightWall')); rightWall.x = 2048 - rightWall.width / 2; rightWall.y = 2732 / 2; var topWall = game.addChild(new Wall('topWall')); topWall.x = 2048 / 2; topWall.y = topWall.height / 4; var scoreDisplay = game.addChild(new ScoreDisplay()); scoreDisplay.x = 80; // Position score display 50 pixels from the left scoreDisplay.y = 80; // Position score display 50 pixels from the top // Create and display clicks left text var clicksDisplay = new Text2('Clicks left: ' + clicksLeft.toString(), { size: 60, fill: "#ffffff" }); clicksDisplay.anchor.set(1, 0); // Anchor to the top right LK.gui.topRight.addChild(clicksDisplay); var bricks = []; var brickRowCount = 4; var brickColumnCount = 5; var brickPadding = 10; var brickOffsetTop = 400; var brickOffsetLeft = (2048 - brickColumnCount * (120 + brickPadding)) / 2; for (var i = 0; i < brickRowCount; i++) { for (var j = 0; j < brickColumnCount; j++) { var brick = game.addChild(new Brick()); brick.x = brickOffsetLeft + j * (120 + brickPadding); brick.y = brickOffsetTop + i * (103.67 + brickPadding); bricks.push(brick); } } var startButton = game.addChild(new StartButton()); startButton.x = 2048 / 2; startButton.y = 2732 / 2 - 150; // Add instruction text below the start button var instructionText = new Text2('š Click to bounce the ball up. š\nš Every click bounces the ball, but you have limited number of clicks! š\nš Breaking a brick gives you 3 clicks though. š\n\nš² Oh, where are those lava drops falling from??? š²\nš³ And cute little bombs are going to show up too??? š³', { size: 55, fill: "#ffffff", align: 'center' }); instructionText.anchor.set(0.5, 0); // Center anchor horizontally, top anchor vertically instructionText.x = 2048 / 2; instructionText.y = startButton.y + startButton.height / 2 + 420; // Position below the start button game.addChild(instructionText); game.start = function () { gameStarted = true; startButton.destroy(); }; game.on('down', function (obj) { if (gameStarted && clicksLeft > 0) { ball.bounce(); clicksLeft--; clicksDisplay.setText('Clicks left: ' + clicksLeft.toString()); } }); LK.on('tick', function () { if (gameStarted) { ball.move(); } // Check collision with bricks and make the ball bounce for (var i = bricks.length - 1; i >= 0; i--) { if (ball.intersects(bricks[i])) { bricks[i].destroy(); bricks.splice(i, 1); ball.velocityY *= -1; // Invert the velocity to make the ball bounce score += 100; scoreDisplay.updateScore(score); clicksLeft += 3; clicksDisplay.setText('Clicks left: ' + clicksLeft.toString()); } } // Check collision with lava if (ball.intersects(lava) || ball.y > 2732) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Spawn bricks and bombs at random locations on the top half of the screen if (bricks.length === 0 || bricks.length < 10 && LK.ticks % (180 + Math.floor(Math.random() * 121)) === 0) { if (score >= 2000 && instructionText.parent) { instructionText.destroy(); } if (score >= 2000) { var bomb; do { bomb = new Bomb(); bomb.x = 300 + Math.random() * (2048 - 600); bomb.y = 400 + Math.random() * (2732 / 2 - 200); } while (Math.abs(bomb.x - ball.x) < 300 && Math.abs(bomb.y - ball.y) < 300); game.addChild(bomb); } var newBrick; do { newBrick = new Brick(); newBrick.x = 300 + Math.random() * (2048 - 600); newBrick.y = 400 + Math.random() * (2732 / 2 - 200); } while (Math.abs(newBrick.x - ball.x) < 300 && Math.abs(newBrick.y - ball.y) < 300); game.addChild(newBrick); bricks.push(newBrick); } }); var lavaDrops = []; var lastLavaDropTime = 0; LK.on('tick', function () { // Spawn lava drops logic if (score >= 300 && lavaDrops.length < 4 && LK.ticks - lastLavaDropTime > 240 + Math.floor(Math.random() * 121)) { var lavaDrop = new LavaDrop(); lavaDrop.x = Math.random() * 2048; lavaDrop.y = -lavaDrop.height; game.addChild(lavaDrop); lavaDrops.push(lavaDrop); lastLavaDropTime = LK.ticks; } // Move and check collision with ball, then remove lava drops for (var i = lavaDrops.length - 1; i >= 0; i--) { lavaDrops[i].move(); if (ball.intersects(lavaDrops[i])) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } if (!lavaDrops[i].parent) { lavaDrops.splice(i, 1); } } });
===================================================================
--- original.js
+++ change.js
@@ -188,10 +188,10 @@
var startButton = game.addChild(new StartButton());
startButton.x = 2048 / 2;
startButton.y = 2732 / 2 - 150;
// Add instruction text below the start button
-var instructionText = new Text2('Click to bounce the ball up.\nEvery click bounces it up. You have limited number of click!\n Breaking a brick gives you 3 clicks.\n\nOh, and how did the lava floor get there???\n And cute little bombs are going to show up too???', {
- size: 50,
+var instructionText = new Text2('š Click to bounce the ball up. š\nš Every click bounces the ball, but you have limited number of clicks! š\nš Breaking a brick gives you 3 clicks though. š\n\nš² Oh, where are those lava drops falling from??? š²\nš³ And cute little bombs are going to show up too??? š³', {
+ size: 55,
fill: "#ffffff",
align: 'center'
});
instructionText.anchor.set(0.5, 0); // Center anchor horizontally, top anchor vertically
@@ -231,8 +231,11 @@
LK.showGameOver();
}
// Spawn bricks and bombs at random locations on the top half of the screen
if (bricks.length === 0 || bricks.length < 10 && LK.ticks % (180 + Math.floor(Math.random() * 121)) === 0) {
+ if (score >= 2000 && instructionText.parent) {
+ instructionText.destroy();
+ }
if (score >= 2000) {
var bomb;
do {
bomb = new Bomb();
@@ -254,9 +257,9 @@
var lavaDrops = [];
var lastLavaDropTime = 0;
LK.on('tick', function () {
// Spawn lava drops logic
- if (score >= 3000 && lavaDrops.length < 4 && LK.ticks - lastLavaDropTime > 240 + Math.floor(Math.random() * 121)) {
+ if (score >= 300 && lavaDrops.length < 4 && LK.ticks - lastLavaDropTime > 240 + Math.floor(Math.random() * 121)) {
var lavaDrop = new LavaDrop();
lavaDrop.x = Math.random() * 2048;
lavaDrop.y = -lavaDrop.height;
game.addChild(lavaDrop);
a cartoon red brick. bright. shiny. pixel art. no text.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a cartoon bomb. bright. shiny. pixel art. no text. front view. already lit.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A start button. rectangular. text says "start". pixel art style. red and white.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a cartoon explosion. pixel art style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a blue shiny ball. pixel art style. no shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a shiny silver brick.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a shiny gold brick.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a cartoon explosion made of red bricks. no shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.