User prompt
Fix Bug: 'Uncaught TypeError: Cannot set properties of undefined (setting '0')' in or related to this line: 'tileArray[i][j] = tile;' Line Number: 209
User prompt
Fix Bug: 'ReferenceError: tileArray is not defined' in or related to this line: 'var newBBall = new BBall(tileArray[0][0].x, tileArray[0][0].y - 150, 180, 180);' Line Number: 71
User prompt
When ball reaches bottom the sapwn new ball and trigger move. keep original ball initialization
User prompt
When ball reaches bottom the sapwn new ball and trigger move
User prompt
For ball control trigger when player first moves Zbert
User prompt
Seperate Zbert movement control from ball movement control so both work independantly
Code edit (1 edits merged)
Please save this source code
User prompt
In the BBall class add a loop that moves the ball randomly downR or Dleft, tile by tile, jumping as it does until it falls off grid
User prompt
run ball jumproutine when ball moves
User prompt
create loop in BBalll to move ball downRight until it falls off grid
User prompt
in BBall, add in code that moves the ball down the grid in a random manner by feeding commands to DownL and DownR controls until the ball falls off the grid
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'var bball = new BBall(tileArray[0][0].x, tileArray[0][0].y - 150, 180, 180);' Line Number: 271
User prompt
optimize code
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'move')' in or related to this line: 'bball.move();' Line Number: 278
User prompt
Fix Bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'move')' in or related to this line: 'bball.move();' Line Number: 276
User prompt
Fix Bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'move')' in or related to this line: 'bball.move();' Line Number: 274
User prompt
Fix Bug: 'Timeout.tick error: Cannot read properties of undefined (reading '0')' in or related to this line: 'var bball = new BBall(this.tileArray[0][0].x, this.tileArray[0][0].y - 150, 180, 180);' Line Number: 268
User prompt
in game code run BBall between every 30 to 80 seconds
User prompt
Add in tick to BBall to move ball until it falls off edge
User prompt
Add in tick to run BBall movement until ball falls off edge
User prompt
In BBalll classe create a random movement control that will move the ball down the grid (downL and downR directions only). Simulate movement as per direction contol with ball bouncing but remove tileflip
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'var bball = new BBall(tileArray[0][0].x, tileArray[0][0].y - 150, 180, 180);' Line Number: 271
User prompt
change order so that tiles are created before bball is added
/**** * Classes ****/ var ControlButton = Container.expand(function (assetId, x, y, rotation, controlDirection) { var self = Container.call(this); self.on('up', function (obj) { buttonGraphics.tint = 0xFFFFFF; // Remove tint }); var buttonGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5, x: x, y: y, rotation: rotation, alpha: 0.5 }); self.controlDirection = controlDirection; self.on('down', function (obj) { buttonGraphics.tint = 0x000000; // Tint button orange var zbert = game.grid.children.find(function (child) { return child instanceof Zbert; }); if (zbert) { zbert.move(self.controlDirection); //var bball = game.grid.children.find(function (child) { //return child instanceof BBall; //}); //if (bball) { //bball.move(self.controlDirection); } }); }); var BBall = Container.expand(function (gridX, gridY, width, height) { var self = Container.call(this); self.isJumping = false; self.move = function () { if (self.isJumping) { return; } self.isJumping = true; var tileWidth = 250; var tileHeight = 270; var arcHeight = 100; var directions = ['downLeft', 'downRight']; var direction = directions[Math.floor(Math.random() * directions.length)]; var targetX = self.x; var targetY = self.y; switch (direction) { case 'downLeft': targetX -= tileWidth / 2; targetY += tileHeight - 90; break; case 'downRight': targetX += tileWidth / 2; targetY += tileHeight - 90; break; } var startX = self.x; var startY = self.y; var distanceX = targetX - startX; var distanceY = targetY - startY; var startTime = Date.now(); var travelTime = 400; var tickHandler = function tickHandler() { var currentTime = Date.now(); var timeElapsed = currentTime - startTime; if (timeElapsed < travelTime) { var progress = timeElapsed / travelTime; var arcProgress = Math.sin(progress * Math.PI); self.x = startX + distanceX * progress; self.y = startY + distanceY * progress - arcHeight * arcProgress; } else { self.x = targetX; self.y = targetY; if (self.y > game.height) { self.destroy(); } else { startTime = Date.now(); direction = directions[Math.floor(Math.random() * directions.length)]; switch (direction) { case 'downLeft': targetX -= tileWidth / 2; targetY += tileHeight - 90; break; case 'downRight': targetX += tileWidth / 2; targetY += tileHeight - 90; break; } startX = self.x; startY = self.y; distanceX = targetX - startX; distanceY = targetY - startY; } } }; LK.on('tick', tickHandler); self.on('destroy', function () { LK.off('tick', tickHandler); }); }; var BBallGraphics = self.attachAsset('bouncingBall', { anchorX: 0.5, anchorY: 0.5 }); BBallGraphics.width = width; BBallGraphics.height = height; self.x = gridX; self.y = gridY; }); var Zbert = Container.expand(function (gridX, gridY, width, height) { var self = Container.call(this); self.isJumping = false; self.move = function (direction) { if (self.isJumping) { return; } self.isJumping = true; var moveX = 0; var moveY = 0; var tileWidth = 250; var tileHeight = 270; var arcHeight = 100; var targetX = self.x; var targetY = self.y; switch (direction) { case 'upLeft': targetX -= tileWidth / 2 + 2; targetY -= tileHeight - 90; break; case 'upRight': targetX += tileWidth / 2; targetY -= tileHeight - 90; break; case 'downLeft': targetX -= tileWidth / 2; targetY += tileHeight - 90; break; case 'downRight': targetX += tileWidth / 2; targetY += tileHeight - 90; break; } var startX = self.x; var startY = self.y; var distanceX = targetX - startX; var distanceY = targetY - startY; var startTime = Date.now(); var travelTime = 400; LK.on('tick', function () { var currentTime = Date.now(); var timeElapsed = currentTime - startTime; if (timeElapsed < travelTime) { var progress = timeElapsed / travelTime; var arcProgress = Math.sin(progress * Math.PI); self.x = startX + distanceX * progress; self.y = startY + distanceY * progress - arcHeight * arcProgress; } else { self.x = targetX; self.y = targetY; LK.off('tick'); self.isJumping = false; var tileBelow = game.grid.getTileAt(self.x, self.y + tileHeight); if (tileBelow) { tileBelow.flipColor(); } else { self.x = game.grid.x - self.width; self.y = 0; var fallToY = game.height - self.height / 2; var fallDuration = 4000; var fallStartTime = Date.now(); LK.on('tick', function () { var currentTime = Date.now(); var timeElapsed = currentTime - fallStartTime; if (timeElapsed < fallDuration) { var fallProgress = timeElapsed / fallDuration; self.y = fallProgress * fallToY; } else { self.y = fallToY; LK.off('tick'); self.isJumping = false; } }); } } }); }; var zbertGraphics = self.attachAsset('Zbert1', { anchorX: 0.5, anchorY: 0.5 }); zbertGraphics.width = width; zbertGraphics.height = height; self.x = gridX; self.y = gridY; }); // Grid class to manage the puzzle grid var Grid = Container.expand(function () { var self = Container.call(this); // Method to get the tile at a specific x and y position self.getTileAt = function (x, y) { for (var i = 0; i < tileArray.length; i++) { for (var j = 0; j < tileArray[i].length; j++) { var tile = tileArray[i][j]; if (x >= tile.x - tile.width / 2 && x <= tile.x + tile.width / 2 && y >= tile.y - tile.height / 2 && y <= tile.y + tile.height / 2) { return tile; } } } return null; }; this.gridSize = 13; // Gridsize control - 13 gives 7 wide middle var tileArray = []; // Array to hold the tiles var tileColorCounter = { whiteCount: 0, greenCount: 0 }; // Object to keep track of tile colors // Initialize the grid with tiles self.initGrid = function () { var tileWidth = 250; var tileHeight = 270; for (var i = 0; i < this.gridSize; i++) { tileArray[i] = []; var numTilesInRow = i < 7 ? i + 1 : this.gridSize - i; var rowOffset = (this.gridSize - numTilesInRow) * (tileWidth / 2); for (var j = 0; j < numTilesInRow; j++) { var tile = new Tile(i, j, tileWidth, tileHeight, this.gridSize); tile.x = rowOffset + j * tileWidth; tile.y = i * (tileHeight - 90); self.addChild(tile); tileArray[i][j] = tile; if (i === this.gridSize - 1 && j === 0) { var zbert = new Zbert(tile.x, tile.y - 150, 180, 180); self.addChild(zbert); } } } }; // Function to flip the color of a tile and its neighbors self.flipTiles = function (x, y) { // Highlight the clicked tile in red var tileToFlip = tileArray[x][y]; if (tileToFlip) { tileToFlip.highlight(0xff0000); // Flip the tile color after a delay LK.setTimeout(function () { tileToFlip.flipColor(); }, 500); } }; // Check if all tiles are the same color self.checkWinCondition = function () { var firstColor = tileArray[0][0].color; for (var i = 0; i < this.gridSize; i++) { for (var j = 0; j < tileArray[i].length; j++) { if (tileArray[i][j].color !== firstColor) { return false; } } } return true; }; Grid.prototype.spawnBBall = function () { var minDelay = 30000; // 30 seconds in milliseconds var maxDelay = 80000; // 80 seconds in milliseconds var delay = Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay; LK.setTimeout(function () { if (this.tileArray && this.tileArray.length > 0 && this.tileArray[0].length > 0) { var bball = new BBall(this.tileArray[0][0].x, this.tileArray[0][0].y - 150, 180, 180); } this.addChild(bball); bball.move(); this.spawnBBall(); // Recursively call to continue spawning BBalls }.bind(this), delay); }; }); var Tile = Container.expand(function (gridX, gridY, width, height, gridSize) { var self = Container.call(this); self.gridSize = gridSize; self.color = gridX === self.gridSize - 1 && gridY === 0 ? targetColours[targetColourIndex] : 0xFFFFFF; // Set all cells to white apart from the cell Zbert is on in the bottom left corner, set this cell to green var tileGraphics = self.attachAsset('tile', { anchorX: 0.5, anchorY: 0.5 }); tileGraphics.width = width; tileGraphics.height = height; tileGraphics.tint = self.color; // Function to highlight the tile self.highlight = function (color) { tileGraphics.tint = color; LK.setTimeout(function () { tileGraphics.tint = self.color; }, 500); // Reset tint after 500ms }; // Function to flip the color of the tile self.flipColor = function () { self.color = targetColours[targetColourIndex]; tileGraphics.tint = self.color; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Function to select and set background by variable number var targetColours = [0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0x800000, 0x808000, 0x008000, 0x800080, 0x008080, 0x000080]; var targetColourIndex = 0; var setBackgroundByNumber = function setBackgroundByNumber() { var backgroundNumber = Math.floor(Math.random() * 6) + 1; // Remove the current background if it exists if (game.background) { game.removeChild(game.background); } // Create a new background asset based on the provided number game.background = game.createAsset('backgroundImage' + backgroundNumber, {}); game.background.width = 3000; game.background.height = 3000; game.background.x = 2048 / 2 - game.background.width / 2; game.background.y = 2732 / 2 - game.background.height / 2; // Add the new background to the game game.addChildAt(game.background, 0); }; // Set an initial background setBackgroundByNumber(2); // Add Corner asset to the screen var CCupL = game.addChild(new ControlButton('CCupL', -120, 2500, -45, 'upLeft')); var CCupR = game.addChild(new ControlButton('CCupR', 2168, 2512, 45, 'upRight')); var CCdownL = game.addChild(new ControlButton('CCdownL', 345, 2785, -45, 'downLeft')); var CCdownR = game.addChild(new ControlButton('CCdownR', 1700, 2800, 45, 'downRight')); // Add the grid to the game game.grid = game.addChild(new Grid()); game.grid.initGrid(); game.grid.spawnBBall(); var tileWidth = 250; var tileHeight = 270; game.grid.x = (2048 - tileWidth * game.grid.gridSize) / 2 + tileWidth / 2; game.grid.y = (2732 - tileHeight * game.grid.gridSize) / 2 + tileHeight / 2 + 600; // Function to show win condition and increase grid size game.showWin = function () { LK.effects.flashScreen(0xFF0000, 1000); // Flash the screen green for 1 second if (game.grid.gridSize < 9) { game.grid.initGrid(); game.grid.x = (2048 - tileWidth * game.grid.gridSize) / 2 + tileWidth / 2 - 50; game.grid.y = (2732 - tileHeight * game.grid.gridSize) / 2 + tileHeight / 2 + 600; setBackgroundByNumber(Math.floor(Math.random() * 6) + 1); } else { LK.showGameOver(); // Show game over screen when max size is reached } }; LK.on('tick', function () { // Rest of the tick code... });
===================================================================
--- original.js
+++ change.js
@@ -266,16 +266,8 @@
var delay = Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay;
LK.setTimeout(function () {
if (this.tileArray && this.tileArray.length > 0 && this.tileArray[0].length > 0) {
var bball = new BBall(this.tileArray[0][0].x, this.tileArray[0][0].y - 150, 180, 180);
- if (bball) {
- if (bball) {
- if (bball) {
- this.addChild(bball);
- bball.move();
- }
- }
- }
}
this.addChild(bball);
bball.move();
this.spawnBBall(); // Recursively call to continue spawning BBalls
beautiful landscape. starry sky, pastel colours, high definition, alien world. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
beautiful landscape. starry sky, pastel colours, high definition, alien world.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
beautiful expansive landscape. starry sky, pastel colours, high definition, alien world.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
beautiful expansive landscape. starry sky, pastel colours, high definition, alien world.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A little cube person. 2 legs. back to viewer. facing 45 degrees to the right. multicoloured skin, cartoon style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
white circle. metallic. light bevel on edge. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Round furry, cute alien ball with big eyes. vivid colours, looking at 45 degrees to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
bright 3d present with bow, vivd colours. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Change to be vivid multicoloured cube
A simple Triangle, flat shaded, bevelled edges. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Speech bubble with expletive word in it. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
parachute. multicoloured. cartoon style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
white circle with a single thin black border. flat shade. simple graphic. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
small star shape, vivid metallic blue, varying length spikes on star. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.