User prompt
When resetting Zbert make sure Zbert is infront of tiles
User prompt
When grid reinitalises reset Zbert to orifginal start position#
User prompt
in level manager when grid is complete then reinitiate game but select the next target colour
User prompt
if all tiles have been flipped to target colour then run win routine
User prompt
Add a classe to hold level manager. do not include grid size change
User prompt
remove grid size change from level manage
Code edit (2 edits merged)
Please save this source code
User prompt
add a class that will manage level control
Code edit (1 edits merged)
Please save this source code
User prompt
update tick movement between Zbert And BBall so they do not interfere witheach other
Code edit (2 edits merged)
Please save this source code
User prompt
Change BBall movement logic and Zberts moevement logic to allow both to run together
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'removeChild')' in or related to this line: 'self.parent.removeChild(self);' Line Number: 63
Code edit (1 edits merged)
Please save this source code
User prompt
remove isjumping from bouncingball to avoid clash with zbert code
User prompt
When game first starts delay bouncing ball start until controlbutton is pressed
User prompt
add a trigger in game to start ball movment when game starts
User prompt
For Ball movement, sepate it from control buttons. create a seperate function to control it
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'self.parent.addChild(newBBall);' Line Number: 72
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: 216
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'var newBBall = new BBall(game.grid.tileArray[0][0].x, game.grid.tileArray[0][0].y - 150, 180, 180);' Line Number: 71
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading '0')' 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
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
/**** * 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); } if (!game.bballStarted) { var bball = new BBall(game.grid.tileArray[0][0].x, game.grid.tileArray[0][0].y - 150, 180, 180); game.grid.addChild(bball); bball.move(); game.bballStarted = true; } }); }); var BBall = Container.expand(function (gridX, gridY, width, height) { var self = Container.call(this); self.isJumping = false; self.move = function () { if (!self.parent) { return; } var tileWidth = 250; var tileHeight = 270; var arcHeight = 100; var direction = Math.random() < 0.5 ? 'downLeft' : 'downRight'; var targetX = self.x + (direction === 'downLeft' ? -tileWidth / 2 : tileWidth / 2); var targetY = self.y + tileHeight - 90; 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'); var tileBelow = game.grid.getTileAt(self.x, self.y + tileHeight / 2); if (!tileBelow) { self.parent.removeChild(self); // Spawn a new BBall at the top var newBBall = new BBall(game.grid.tileArray[0][0].x, game.grid.tileArray[0][0].y - 150, 180, 180); game.grid.addChild(newBBall); // Trigger the move of the new BBall newBBall.move(); } } }); LK.setTimeout(self.move, travelTime + 50); }; 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 < this.tileArray.length; i++) { for (var j = 0; j < this.tileArray[i].length; j++) { var tile = this.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 this.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++) { this.tileArray[i] = []; // Initialize the row in tileArray 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); this.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 = this.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 = this.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; }; }); 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 ****/ // Grid class to manage the puzzle grid // Function to select and set background by variable number function controlBBallMovement(direction) { var bball = game.grid.children.find(function (child) { return child instanceof BBall; }); if (bball) { bball.move(direction); } } var tileArray = []; 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(); 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
@@ -34,12 +34,11 @@
var BBall = Container.expand(function (gridX, gridY, width, height) {
var self = Container.call(this);
self.isJumping = false;
self.move = function () {
- if (self.isJumping || !self.parent) {
+ if (!self.parent) {
return;
}
- self.isJumping = true;
var tileWidth = 250;
var tileHeight = 270;
var arcHeight = 100;
var direction = Math.random() < 0.5 ? 'downLeft' : 'downRight';
@@ -62,9 +61,8 @@
} else {
self.x = targetX;
self.y = targetY;
LK.off('tick');
- self.isJumping = false;
var tileBelow = game.grid.getTileAt(self.x, self.y + tileHeight / 2);
if (!tileBelow) {
self.parent.removeChild(self);
// Spawn a new BBall at the top
@@ -273,10 +271,10 @@
/****
* Game Code
****/
-// Function to select and set background by variable number
// Grid class to manage the puzzle grid
+// Function to select and set background by variable number
function controlBBallMovement(direction) {
var bball = game.grid.children.find(function (child) {
return child instanceof BBall;
});
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.