Code edit (1 edits merged)
Please save this source code
User prompt
in SpawnBBall limit number of balls on screen to 3
Code edit (2 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: newBBall is not defined' in or related to this line: 'game.grid.addChild(newBBall);' Line Number: 66
Code edit (1 edits merged)
Please save this source code
User prompt
spawn new balls betwenn every 3 to 7 seconds
Code edit (3 edits merged)
Please save this source code
User prompt
if ball hits Zbert reduce live by 1
Code edit (1 edits merged)
Please save this source code
User prompt
when game starts set lives display to 5
User prompt
move life 200 to left
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toString')' in or related to this line: 'self.livesText = new Text2(initialLives.toString(), {' Line Number: 308
User prompt
display zberts lives on the screen
User prompt
add life system to game for Zbert. Start with 5 lifes. each time Zbert falls off or gets hit by ball then reduce life by 1 until dead and then end game
Code edit (2 edits merged)
Please save this source code
User prompt
check if BBall and Zbert interact. if so end game
Code edit (1 edits merged)
Please save this source code
User prompt
add squish animation to bouncing ball
User prompt
in BBall add animation to ball that squishes the ball a littl when it lands on a tile
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
/**** * 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.isBBallJumping = false; self.move = function () { if (self.isBBallJumping || !self.parent) { return; } self.isBBallJumping = true; 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 = 300; var bballTickHandler = function bballTickHandler() { 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', bballTickHandler); self.isBBallJumping = 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 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.on('tick', bballTickHandler); 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.isZbertJumping = false; self.move = function (direction) { if (self.isZbertJumping) { return; } self.isZbertJumping = 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 = 300; var zbertTickHandler = function zbertTickHandler() { 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', zbertTickHandler); self.isZbertJumping = false; var tileBelow = game.grid.getTileAt(self.x, self.y + tileHeight); if (tileBelow) { tileBelow.flipColor(); if (game.grid.checkWinCondition()) { game.showWin(); } } 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(); var zbertFallTickHandler = function zbertFallTickHandler() { 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', zbertFallTickHandler); self.isZbertJumping = false; } }; LK.on('tick', zbertFallTickHandler); } } }; LK.on('tick', zbertTickHandler); }; 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 < this.tileArray[i].length; j++) { if (this.tileArray[i][j].color !== targetColours[targetColourIndex]) { 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; }; }); var LevelManager = Container.expand(function () { var self = Container.call(this); self.showWin = function () { LK.effects.flashScreen(0xFF0000, 1000); // Flash the screen green for 1 second setBackgroundByNumber(Math.floor(Math.random() * 6) + 1); if (game.grid.checkWinCondition()) { // Move to the next target colour if (++targetColourIndex >= targetColours.length) { targetColourIndex = 0; } // Reset the grid for a new level with the next target colour setBackgroundByNumber(Math.floor(Math.random() * 6) + 1); game.grid.initGrid(); game.grid.x = (2048 - tileWidth * game.grid.gridSize) / 2 + tileWidth / 2; game.grid.y = (2732 - tileHeight * game.grid.gridSize) / 2 + tileHeight / 2 + 600; } }; }); /**** * Initialize Game ****/ // Instantiate LevelManager and replace the old showWin function var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Function to select and set background by variable number // Grid class to manage the puzzle grid 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; // Instantiate LevelManager and replace the old showWin function var levelManager = new LevelManager(); game.showWin = levelManager.showWin; LK.on('tick', function () { // Rest of the tick code... });
===================================================================
--- original.js
+++ change.js
@@ -273,15 +273,18 @@
var self = Container.call(this);
self.showWin = function () {
LK.effects.flashScreen(0xFF0000, 1000); // Flash the screen green for 1 second
setBackgroundByNumber(Math.floor(Math.random() * 6) + 1);
- if (!game.grid.checkWinCondition()) {
- // Reset the grid for a new level
+ if (game.grid.checkWinCondition()) {
+ // Move to the next target colour
+ if (++targetColourIndex >= targetColours.length) {
+ targetColourIndex = 0;
+ }
+ // Reset the grid for a new level with the next target colour
+ setBackgroundByNumber(Math.floor(Math.random() * 6) + 1);
game.grid.initGrid();
game.grid.x = (2048 - tileWidth * game.grid.gridSize) / 2 + tileWidth / 2;
game.grid.y = (2732 - tileHeight * game.grid.gridSize) / 2 + tileHeight / 2 + 600;
- } else {
- LK.showGameOver(); // Show game over screen when all tiles match
}
};
});
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.