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
place cube_collapse randomly at the top of some columns
User prompt
inside some columns there should be empty space in random order where the cubes were
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of null (setting 'isFalling')' in or related to this line: 'self.cubes[index].isFalling = true;' Line Number: 38
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of null (setting 'isFalling')' in or related to this line: 'self.cubes[index].isFalling = true;' Line Number: 38
User prompt
inside some columns there should be empty space in random order where the cubes were
User prompt
There should be cubes missing randomly inside some columns
User prompt
the height of the column should differ from the previous column by no more than one cube
User prompt
columns should sometimes be missing cubes in random order
User prompt
the columns in the middle should sometimes be missing cubes in a random order
User prompt
the height of the column should differ from the previous column by no more than one cube
User prompt
герой должен взаимодействовать также с левой гранью куба на его пути
User prompt
the hero must move horizontally in sync with the cubes
User prompt
the hero must move horizontally in sync with the cubes
User prompt
the hero must fall to the top surface of the first cube he encounters
User prompt
the hero must fall to the first cube he encounters
User prompt
assign weight to the hero
User prompt
when the hero leaves the column, he must fall to the top surface of the cube that is below
User prompt
when the hero leaves the column, he must fall to the top surface of the cube that is below
User prompt
when the hero leaves the column he must fall to the top surface of the cube below
User prompt
the hero moves along the top surface of the cubes
User prompt
the hero falls until he lands on the cube
User prompt
cancel the automatic movement of the hero to the top, the hero must fall down if he does not get to the top as a result of a jump
User prompt
the hero must fall down if he does not get to the top as a result of a jump
/****
* Classes
****/
// 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 = 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.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.velocityX = 5; // Add horizontal velocity to jump forwards
self.isOnGround = false;
}
};
self.update = function () {
if (!self.isOnGround) {
self.y += self.velocityY;
self.velocityY += 0.5; // Gravity effect
self.x += self.velocityX; // Move hero forwards while in the air
if (self.y > 2732 - self.height / 2) {
LK.showGameOver(); // If hero falls below the screen, game over
}
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Initialize important asset arrays
// Initialize assets used in the game.
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) {
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 cubesCount = Math.floor(Math.random() * 9) + 6; // Random number of cubes between 6 and 14 to make poles higher
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();
}
}
});
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.