User prompt
Make sure bricks can be touched in any part of their surface
User prompt
sometimes balls bounce close to a brick butu do not touch it and nor destroy it, can you fix that
User prompt
add a level sctructurue, level two should have more bricks and some should have 2 hitpints
User prompt
add levels to the game. once all bricks are destroyed, move to next level. show current level on screen in the top
User prompt
Imptove game perfoomance to handel many balls simultaneously
User prompt
create a config file were we can say home may bricks each level will have
User prompt
game is getting stuck when there are many bricks and balls. can we optimize the code to allow many balls and bricks in the screen at the same time
User prompt
can ou optimize it more. feels like the problems is with the bricks
User prompt
Please fix the bug: 'gridSize is not defined' in or related to this line: 'var gridX = Math.floor(brick.x / gridSize);' Line Number: 170
User prompt
Lets make level config a little more specific, and allow player to define groups of blocks for each level, and also set how many hitpoins those blocks will have
User prompt
theregrid size will be different per level
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'undefined')' in or related to this line: 'var gridSize = levelConfig[level].gridSize || 200; // Define grid size per level, default to 200 if not specified' Line Number: 96
Code edit (8 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 475
User prompt
remove power ups from game
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 473
User prompt
Fix level 2 not loading and showing game over
Code edit (4 edits merged)
Please save this source code
User prompt
Please fix the bug: 'GAME_WIDTH is not defined' in or related to this line: 'levelTxt.x = GAME_WIDTH / 2 - levelTxt.width / 2;' Line Number: 54
User prompt
Please fix the bug: 'BALL_COST is not defined' in or related to this line: 'var normalCostText = new Text2(BALL_COST.toString(), {' Line Number: 71
Code edit (3 edits merged)
Please save this source code
User prompt
can we put the current level in the center of the top of the screen
User prompt
can you adjust the hud
User prompt
actually put it in the center please
/****
* Classes
****/
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// Ball class representing the ball that breaks bricks
var Ball = Container.expand(function () {
var self = Container.call(this);
var ballGraphics = self.attachAsset('ball', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.direction = {
x: 1,
y: -1
};
self.update = function () {
self.x += self.speed * self.direction.x;
self.y += self.speed * self.direction.y;
// Bounce off walls
if (self.x <= 0 || self.x >= 2048) {
self.direction.x *= -1;
self.x = self.x <= 0 ? 0 : 2048; // Correct position to prevent getting stuck in the wall
}
if (self.y <= 0 || self.y >= 2632) {
self.direction.y *= -1;
self.y = self.y <= 0 ? 0 : 2632; // Correct position to prevent getting stuck in the wall
}
};
});
// Brick class representing the bricks to be broken
var Brick = Container.expand(function () {
var self = Container.call(this);
var brickGraphics = self.attachAsset('brick', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 1;
// Create a text object to display the brick's health
self.healthText = new Text2(self.health.toString(), {
size: 50,
fill: 0xFFFFFF
});
self.healthText.anchor.set(0.5, 0.5);
self.addChild(self.healthText);
self.hit = function () {
self.health -= 1;
self.healthText.setText(self.health.toString());
if (self.health <= 0) {
score += 1;
scoreTxt.setText(score.toString());
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize game variables
// Create a HUD to display the points and the buy button
var hud = new Container();
LK.gui.topRight.addChild(hud);
// Display the points
var scoreTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0); // Anchor to the top-right corner
hud.addChild(scoreTxt);
// Create a button to buy extra balls
var buyBallButton = LK.getAsset('BuyBall50', {
size: 80,
fill: 0xFFFFFF,
anchorX: 0.5,
anchorY: 0,
y: 0,
x: -300
});
var costText = new Text2('50', {
size: 50,
fill: 0xFFFFFF
});
costText.anchor.set(0.5, 0);
costText.y = 100;
buyBallButton.addChild(costText);
var ballIcon = buyBallButton.attachAsset('ball', {
anchorX: 0.5,
anchorY: -0.5,
scaleX: 0.5,
scaleY: 0.5
});
buyBallButton.down = function () {
if (score >= 50) {
score -= 50; // Deduct points
scoreTxt.setText(score.toString()); // Update score display
createBall(); // Add a new ball
}
};
hud.addChild(buyBallButton);
var balls = [];
var bricks = [];
var score = 10000;
// Create and position bricks
function createBricks() {
for (var i = 0; i < 5; i++) {
for (var j = 0; j < 10; j++) {
var brick = new Brick();
brick.x = 2048 / 2 - 10 * 160 / 2 + j * 160; // Center bricks horizontally
brick.y = 2732 / 2 - 5 * 120 / 2 + i * 120; // Center bricks vertically
bricks.push(brick);
game.addChild(brick);
}
}
}
// Create a new ball
function createBall() {
var ball = new Ball();
ball.x = 1024;
ball.y = 2000;
// Assign a random direction to the ball
ball.direction.x = Math.random() < 0.5 ? -1 : 1;
ball.direction.y = Math.random() < 0.5 ? -1 : 1;
balls.push(ball);
game.addChild(ball);
}
// Handle game updates
game.update = function () {
// Update balls
for (var i = balls.length - 1; i >= 0; i--) {
var ball = balls[i];
ball.update();
// Check for collisions with bricks
for (var j = bricks.length - 1; j >= 0; j--) {
var brick = bricks[j];
if (ball.intersects(brick)) {
brick.hit();
// Calculate bounce direction based on the position where the ball hit the brick
var hitPosition = (ball.x - brick.x) / brick.width;
ball.direction.x = hitPosition;
ball.direction.y *= -1;
// Remove the brick from the array
bricks.splice(j, 1);
}
}
// Remove ball if it goes off screen
if (ball.y > 2732) {
ball.destroy();
balls.splice(i, 1);
}
}
// Check for game over
if (balls.length === 0) {
createBall();
}
};
game.down = function (x, y, obj) {
console.log("Player tapped the screen at coordinates: ", x, y);
// Verify bricks array exists
if (!bricks || !Array.isArray(bricks)) {
console.error("Bricks array is invalid");
return;
}
// Define intersection check function
function checkIntersection(brick, rect) {
return brick.x < rect.x + rect.width && brick.x + brick.width > rect.x && brick.y < rect.y + rect.height && brick.y + brick.height > rect.y;
}
// Check if a brick was tapped
for (var i = 0; i < bricks.length; i++) {
var brick = bricks[i];
// Verify brick has required properties
if (!brick.x || !brick.y || !brick.width || !brick.height) {
console.error("Brick missing required properties at index:", i);
continue;
}
// Debug logging
console.log("Checking brick:", i);
console.log("Brick position:", brick.x, brick.y);
console.log("Brick size:", brick.width, brick.height);
// Convert coordinates to numbers and check collision
x = Number(x);
y = Number(y);
if (checkIntersection(brick, {
x: x,
y: y,
width: brick.width,
height: brick.height
})) {
console.log("Player tapped brick at:", brick.x, brick.y);
brick.hit(); // Trigger the hit function on the brick
return; // Return after the first brick is hit
}
}
console.log("No brick collision detected");
};
// Initialize game elements
createBricks();
createBall();