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
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
User prompt
direct the hero's jump forwards and upwards
User prompt
the hero must move horizontally in sync with the cubes.
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
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
direct the hero's jump forwards and upwards
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
direct the hero's jump forwards and upwards
User prompt
direct the hero's jump forwards and upwards
User prompt
direct the hero's jump forwards and upwards
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
After passing 10 percent of the screen, the cubes should fall one after another, starting with the bottom ones.
User prompt
The cubes should start falling immediately
User prompt
The falling of cubes should begin after the pillars have passed 90 percent of the screen
User prompt
The falling of cubes should begin after the pillars have passed 10 percent of the screen
User prompt
The cubes should start falling after passing 10 percent of the screen
User prompt
The cubes should start falling after passing 90 percent of the screen
User prompt
The cubes should start falling after passing 70 percent of the screen
User prompt
The cubes should start falling after passing 30 percent of the screen
User prompt
The cubes should start falling after passing 30 percent of the screen
User prompt
the hero must collide with the left side edge of the cube if it has no adjacent cubes to the left
/****
* 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.hasLeftEdge = false; // Indicates if the cube has a left edge for collision
self.leftEdge = null; // Reference to the left edge object
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
}
};
self.createLeftEdge = function () {
if (!self.hasLeftEdge) {
self.leftEdge = new CubeLeftEdge();
self.leftEdge.x = self.x - 50; // Position the left edge to the left of the cube
self.leftEdge.y = self.y;
self.hasLeftEdge = true;
game.addChild(self.leftEdge);
}
};
self.removeLeftEdge = function () {
if (self.hasLeftEdge && self.leftEdge) {
self.leftEdge.destroy();
self.hasLeftEdge = false;
self.leftEdge = null;
}
};
});
// Class for the left edge of the cube for collision detection
var CubeLeftEdge = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('cube', {
width: 2,
height: 100,
color: 0x000000,
// Invisible but can be used for collision
anchorX: 0.5,
anchorY: 0.5
});
});
// 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);
// Create a left edge for the top cube if there is no cube to its left
if (self.cubes.length === 1 || !self.cubes[self.cubes.length - 2]) {
cube.createLeftEdge();
}
};
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.velocityX = 0;
self.jump = function () {
if (self.isOnGround) {
self.velocityY = -15;
self.velocityX = 5;
self.isOnGround = false;
}
};
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.velocityY += 0.5; // Gravity effect
// Removed code that stops horizontal movement when on the ground
// to allow the hero to fall if not reaching the top as a result of a jump
};
});
/****
* 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.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
var heroMoveSpeed = 5;
for (var i = 0; i < poles.length; i++) {
poles[i].x -= heroMoveSpeed;
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();
}
}
// Move hero in sync with the cubes and check for collision with the left edge of the cubes
for (var i = 0; i < poles.length; i++) {
for (var j = 0; j < poles[i].cubes.length; j++) {
var cube = poles[i].cubes[j];
if (cube.hasLeftEdge && hero.intersects(cube.leftEdge)) {
hero.velocityX = 0; // Stop hero's horizontal movement on collision
}
}
}
hero.x -= heroMoveSpeed;
});
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.