User prompt
cube_collapse must not occur in neighboring columns
User prompt
hitting a hero in a column where there is cube_collapse leads to an immediate collapse of this column and the two adjacent ones on the left and right
User prompt
Fix Bug: 'TypeError: poles[i].makeCubesFall is not a function' in or related to this line: 'poles[i].makeCubesFall();' Line Number: 190
User prompt
hitting a hero in a column where there is cube_collapse leads to the immediate collapse of this column and the two adjacent ones on the left and right
User prompt
Fix Bug: 'Uncaught ReferenceError: i is not defined' in or related to this line: 'var cube = (self.cubes.length + 1) % 10 === 0 && i % 2 === 0 ? new CollapsibleCube() : new Cube();' Line Number: 40
User prompt
cube_collapse should not be in neighbouring columns
User prompt
cube_collapse must not be in adjacent columns
User prompt
cube_collapse must not be in adjacent columns
User prompt
cube_collapse should not be one after the other
User prompt
cube_collapse should not be one after the other
User prompt
cube_collapse should not be one after the other
User prompt
cube_collapse should not be consecutive
User prompt
every 10th column should contain one cube_collapse instead of cube
User prompt
cube_collapse should occur more often and regularly
User prompt
cube_collapse should not be consecutive
User prompt
every 10th column should contain one cube_collapse instead of cube
User prompt
every 10th column on average should contain cube_collapse instead of cube
User prompt
cube_collapse should not be consecutive, but should occur regularly
User prompt
cube_collapse should not be consecutive, but should occur regularly
User prompt
cube_collapse should not be consecutive, but should occur regularly
User prompt
Instead of cube, place cube_collapse randomly at the top of some columns
User prompt
Fix Bug: 'TypeError: poles[i].cubes[j].update is not a function' in or related to this line: 'poles[i].cubes[j].update();' Line Number: 179
User prompt
Fix Bug: 'TypeError: poles[i].cubes[j].update is not a function' in or related to this line: 'poles[i].cubes[j].update();' Line Number: 179
User prompt
Fix Bug: 'TypeError: poles[i].cubes[j].update is not a function' in or related to this line: 'poles[i].cubes[j].update();' Line Number: 179
User prompt
Fix Bug: 'TypeError: poles[i].cubes[j].update is not a function' in or related to this line: 'poles[i].cubes[j].update();' Line Number: 180
/**** * Classes ****/ var CollapsibleCube = Container.expand(function () { var self = Container.call(this); self.attachAsset('cube_collapse', { anchorX: 0.5, anchorY: 0.5 }); self.isFalling = false; self.velocityY = 0; // Initial vertical velocity for falling cubes self.update = function () { if (self.isFalling) { self.velocityY += 0.75; // Acceleration due to gravity self.y += self.velocityY; // Fall speed with acceleration } }; }); // Class for individual cubes that can fall var Cube = Container.expand(function () { var self = Container.call(this); self.attachAsset('cube', { anchorX: 0.5, anchorY: 0.5 }); self.isFalling = false; self.velocityY = 0; // Initial vertical velocity for falling cubes self.update = function () { if (self.isFalling) { self.velocityY += 0.75; // Acceleration due to gravity increased by 50% self.y += self.velocityY; // Fall speed with acceleration } }; }); // Class for the poles consisting of cubes var Pole = Container.expand(function () { var self = Container.call(this); self.cubes = []; self.addCube = function () { var cube = (self.cubes.length + 1) % 10 === 0 ? new CollapsibleCube() : new Cube(); cube.y = -(self.cubes.length * 100) - (self.cubes.length - 1) * 2; self.addChild(cube); self.cubes.push(cube); }; self.collapsePoleAndAdjacent = function (polesArray) { var currentIndex = polesArray.indexOf(self); var indicesToCollapse = [currentIndex - 1, currentIndex, currentIndex + 1]; indicesToCollapse.forEach(function (index) { if (index >= 0 && index < polesArray.length) { var pole = polesArray[index]; for (var i = pole.cubes.length - 1; i >= 0; i--) { (function (cubeIndex) { LK.setTimeout(function () { pole.cubes[cubeIndex].isFalling = true; }, cubeIndex * 250); })(i); } } }); }; self.isSliding = false; self.slideDownUp = function () { if (!self.isSliding) { self.isSliding = true; var initialY = self.y; var step = 1; var distance = 10; var duration = 200; var steps = duration / (1000 / 60); var stepSize = distance / steps; var currentStep = 0; var slideInterval = LK.setInterval(function () { if (currentStep < steps) { self.y += stepSize; currentStep++; } else { LK.clearInterval(slideInterval); self.y = initialY; self.isSliding = false; } }, 1000 / 60); } }; self.getHeight = function () { return self.cubes.length * 100 + (self.cubes.length - 1) * 2; }; }); // Class for the player's hero var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); self.isOnGround = false; self.velocityY = 0; self.jump = function () { if (self.isOnGround) { self.velocityY = -15; self.isOnGround = false; } }; self.update = function () { self.y += self.velocityY; self.velocityY += 0.5; // Gravity effect }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Initialize assets used in the game. // Initialize important asset arrays var poles = []; var hero; // Create the hero hero = game.addChild(new Hero()); hero.x = 2048 / 2; hero.y = 2732 - 150; // Start above the bottom of the screen // Create initial poles function createInitialPoles() { var poleSpacing = 2; var poleWidth = 100 + poleSpacing; var numPoles = Math.ceil(2048 / poleWidth); for (var i = 0; i < numPoles; i++) { var pole = game.addChild(new Pole()); pole.x = i * poleWidth; pole.y = 2732 - 50; // Align base of pole with bottom of the screen and raise by 50 pixels for (var j = 0; j < 10; j++) { // Add 10 cubes to each pole to make them higher pole.addCube(); } poles.push(pole); } } createInitialPoles(); // Event listener for jump action game.on('down', function (obj) { hero.jump(); }); // Game tick update LK.on('tick', function () { hero.update(); // Collision detection with poles for (var i = 0; i < poles.length; i++) { var pole = poles[i]; if (hero.intersects(pole) && hero.velocityY > 0 && hero.y + hero.height / 2 < pole.y) { var hitCollapsibleCube = pole.cubes.some(function (cube) { return cube instanceof CollapsibleCube; }); if (hitCollapsibleCube) { pole.collapsePoleAndAdjacent(poles); } else { hero.y = pole.y - pole.getHeight() - hero.height / 2; hero.isOnGround = true; hero.velocityY = 0; pole.slideDownUp(); } } } // Remove off-screen poles and create new ones var poleSpacing = 2; var poleWidth = 100 + poleSpacing; if (poles.length > 0 && poles[0].x + poleWidth / 2 < 0) { poles[0].destroy(); poles.shift(); var newPole = game.addChild(new Pole()); newPole.x = poles[poles.length - 1].x + poleWidth; newPole.y = 2732 - 50; var prevPoleHeight = poles[poles.length - 1].cubes.length; var minCubes = Math.max(6, prevPoleHeight - 1); var maxCubes = Math.min(14, prevPoleHeight + 1); var cubesCount = Math.floor(Math.random() * (maxCubes - minCubes + 1)) + minCubes; for (var j = 0; j < cubesCount; j++) { newPole.addCube(); } poles.push(newPole); } // Move poles to the left to simulate hero running and make cubes fall after passing the middle for (var i = 0; i < poles.length; i++) { poles[i].x -= 5; if (poles[i].x < 2048 / 2 && !poles[i].hasMadeCubesFall) { poles[i].makeCubesFall(); poles[i].hasMadeCubesFall = true; } // Update each cube in the pole for (var j = 0; j < poles[i].cubes.length; j++) { poles[i].cubes[j].update(); } } });
===================================================================
--- original.js
+++ change.js
@@ -36,21 +36,28 @@
var Pole = Container.expand(function () {
var self = Container.call(this);
self.cubes = [];
self.addCube = function () {
- var cube = (self.cubes.length + 1) % 10 === 0 && self.cubes.length % 2 === 0 ? new CollapsibleCube() : new Cube();
+ var cube = (self.cubes.length + 1) % 10 === 0 ? new CollapsibleCube() : new Cube();
cube.y = -(self.cubes.length * 100) - (self.cubes.length - 1) * 2;
self.addChild(cube);
self.cubes.push(cube);
};
- self.makeCubesFall = function () {
- for (var i = self.cubes.length - 1; i >= 0; i--) {
- (function (index) {
- LK.setTimeout(function () {
- self.cubes[index].isFalling = true;
- }, index * 250); // Delay between each cube falling
- })(i);
- }
+ self.collapsePoleAndAdjacent = function (polesArray) {
+ var currentIndex = polesArray.indexOf(self);
+ var indicesToCollapse = [currentIndex - 1, currentIndex, currentIndex + 1];
+ indicesToCollapse.forEach(function (index) {
+ if (index >= 0 && index < polesArray.length) {
+ var pole = polesArray[index];
+ for (var i = pole.cubes.length - 1; i >= 0; i--) {
+ (function (cubeIndex) {
+ LK.setTimeout(function () {
+ pole.cubes[cubeIndex].isFalling = true;
+ }, cubeIndex * 250);
+ })(i);
+ }
+ }
+ });
};
self.isSliding = false;
self.slideDownUp = function () {
if (!self.isSliding) {
@@ -144,12 +151,19 @@
// Collision detection with poles
for (var i = 0; i < poles.length; i++) {
var pole = poles[i];
if (hero.intersects(pole) && hero.velocityY > 0 && hero.y + hero.height / 2 < pole.y) {
- hero.y = pole.y - pole.getHeight() - hero.height / 2;
- hero.isOnGround = true;
- hero.velocityY = 0;
- pole.slideDownUp();
+ var hitCollapsibleCube = pole.cubes.some(function (cube) {
+ return cube instanceof CollapsibleCube;
+ });
+ if (hitCollapsibleCube) {
+ pole.collapsePoleAndAdjacent(poles);
+ } else {
+ hero.y = pole.y - pole.getHeight() - hero.height / 2;
+ hero.isOnGround = true;
+ hero.velocityY = 0;
+ pole.slideDownUp();
+ }
}
}
// Remove off-screen poles and create new ones
var poleSpacing = 2;
girl sitting on Wrecking Ball, cartoon style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
construction cranes on the sides of the frame, depth of field blur, cartoon style, black and white. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
"ALARM" text bubble, comic style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
the surface is gray, concrete with a black square in the center. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Wrecking Ball with eyes, cartoon style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
the surface is red, concrete with a black square in the center.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
"ALARM" text bubble yellow, comic book style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
the surface is yellow, concrete with a black square in the center. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.