User prompt
make the font size of the time counter smaller
User prompt
make the font size of the time counter smaller by half.
User prompt
make the time counter half as long
User prompt
in the upper right part of the screen make a counter of time spent in the game, font color - white, on top of all layers
User prompt
there's no time counter, fix it.
User prompt
in the upper right part of the screen make a counter of time spent in the game, font color - white
User prompt
in the upper right part of the screen make a counter of time spent in the game, font color - white
User prompt
in the upper right part of the screen make a counter of the time spent in the game
User prompt
in the upper right corner, make the time spent in the game count.
User prompt
Fix Bug: 'TypeError: timerText.setText is not a function' in or related to this line: 'timerText.setText(timeElapsed + 's'); // Update the timer text' Line Number: 32
User prompt
in the upper right corner, make the time spent in the game count.
User prompt
in the upper right corner, make the time spent in the game count.
User prompt
at the end of the game, do a yellow special effect.
User prompt
when the hero disappears from the screen, game over.
User prompt
the place where the cubes started to fall should return to the original point after 20 seconds
User prompt
Fix Bug: 'ReferenceError: resetFallPositionTimeout is not defined' in or related to this line: 'if (!resetFallPositionTimeout) {' Line Number: 347
User prompt
Fix Bug: 'ReferenceError: resetFallPositionTimeout is not defined' in or related to this line: 'if (!resetFallPositionTimeout) {' Line Number: 347
User prompt
the place where the cubes started to fall should return to the original point after 20 seconds
User prompt
Each time the hero hits cube_fast, the place where the cubes start to fall should shift 250 pixels to the right.
User prompt
Each time the hero hits cube_fast, the place where the cubes start to fall should shift 250 pixels to the right.
User prompt
Each time the hero hits cube_fast, the place where the cubes start to fall should shift 250 pixels to the right.
User prompt
Each time the hero hits cube_fast, the place where the cubes start to fall should shift 250 pixels to the right.
User prompt
Each time the hero hits cube_fast, the place where the cubes start to fall should shift 500 pixels to the right.
User prompt
Each time the hero hits cube_fast, the place where the cubes start to fall should shift 500 pixels to the right.
/****
* 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 fast cubes with distinct behavior
var FastCube = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('cube_fast', {
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 collapsing cubes with distinct behavior
var CollapsingCube = 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 the poles consisting of cubes
var Pole = Container.expand(function () {
var self = Container.call(this);
self.cubes = [];
self.addCube = function (isCollapsing) {
var cube;
if (poleCounter >= 100) {
if (isCollapsing) {
cube = new CollapsingCube();
} else if (poleCounter % 12 === 0) {
// Every twelfth pole has a fast cube in front of the player
cube = new FastCube();
} else {
cube = new Cube();
}
} else {
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.isOnGround = false;
}
};
self.update = function () {
self.y += self.velocityY;
self.velocityY += 0.5; // Gravity effect
// Check for collision with cubes and display Alarm or Alarm2 if hit
for (var i = 0; i < poles.length; i++) {
var pole = poles[i];
for (var j = 0; j < pole.cubes.length; j++) {
var cube = pole.cubes[j];
if (cube instanceof CollapsingCube && self.intersects(cube) && !cube.isFalling) {
// Make all poles collapse
poles.forEach(function (p) {
p.makeCubesFall();
});
// Display the Alarm
alarmDisplay.show();
break;
} else if (cube instanceof FastCube && self.intersects(cube) && !cube.isFalling) {
// Display the Alarm2
alarmDisplay2.show();
// Shift the position where cubes start to fall
fallStartPositionShift += 250;
break;
}
}
}
};
});
// Class for the background
var Background = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('background', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 2048 / 2;
self.y = 2732 / 2;
});
// Class for the second background
var Background2 = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('background2', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 2048 / 2;
self.y = 2732 - self.height / 2;
});
// Class for the Alarm display
var AlarmDisplay = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('Alarm', {
anchorX: 1.0,
// Anchor to the right
anchorY: 0.0 // Anchor to the top
});
self.x = 2048 - 400; // Position to the left by 400
self.y = 400; // Position down by 400
self.visible = false; // Initially not visible
self.show = function () {
self.visible = true;
var blinkCount = 0;
var flashInterval = LK.setInterval(function () {
self.visible = !self.visible;
if (self.visible) {
blinkCount++;
}
if (blinkCount >= 3) {
LK.clearInterval(flashInterval);
self.hide();
}
}, 1000);
};
self.hide = function () {
self.visible = false;
};
});
// Class for the second Alarm display
var AlarmDisplay2 = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('Alarm2', {
anchorX: 1.0,
anchorY: 0.0
});
self.x = 2048 - 50; // Position to the right by 50
self.y = 350; // Position down by 350
self.visible = false; // Initially not visible
self.show = function () {
self.visible = true;
var blinkCount = 0;
var flashInterval = LK.setInterval(function () {
self.visible = !self.visible;
if (self.visible) {
blinkCount++;
}
if (blinkCount >= 3) {
LK.clearInterval(flashInterval);
self.hide();
}
}, 1000);
};
self.hide = function () {
self.visible = false;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Instantiate AlarmDisplay
var alarmDisplay = game.addChild(new AlarmDisplay());
// Set the zIndex to ensure it's on top
// Create a time counter display
var timeCounter = new Text2('0', {
size: 150,
fill: "#ffffff"
});
timeCounter.anchor.set(1, 0); // Anchor to the top right
timeCounter.x = 2048; // Position at the right edge of the screen
timeCounter.y = 0; // Position at the top of the screen
LK.gui.topRight.addChild(timeCounter);
alarmDisplay.zIndex = 1;
// Instantiate AlarmDisplay2
var alarmDisplay2 = game.addChild(new AlarmDisplay2());
// Set the zIndex to ensure it's on top
alarmDisplay2.zIndex = 1;
// Create the second background
var background2 = game.addChild(new Background2());
background2.zIndex = -1;
// Create the background
var background = game.addChild(new Background());
background.zIndex = 0;
// Initialize assets used in the game.
// Initialize important asset arrays
var poles = [];
var poleCounter = 0;
var hero;
var fallStartPositionShift = 0;
var resetFallPositionTimeoutSet = false;
// 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 9 cubes to each pole and one collapsing cube every 50 poles
var isCollapsing = poleCounter % 17 === 0 && j === 9; // Make the top cube a collapsing cube every 50 poles
pole.addCube(isCollapsing);
}
poleCounter++;
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 isCollapsingCube = poleCounter % 50 === 0; // Determine if the new pole should have a collapsing cube
poleCounter++;
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++) {
// Add collapsing cube every 50 poles on the top
var isCollapsing = isCollapsingCube && j === cubesCount - 1;
newPole.addCube(isCollapsing);
}
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 + fallStartPositionShift && !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();
}
}
// Reset fallStartPositionShift after 20 seconds
if (!resetFallPositionTimeoutSet) {
resetFallPositionTimeoutSet = true;
LK.setTimeout(function () {
fallStartPositionShift = 0;
resetFallPositionTimeoutSet = false;
}, 20000);
}
// Update the time counter every tick
var gameTimeInSeconds = Math.floor(LK.ticks / 60);
timeCounter.setText(gameTimeInSeconds.toString());
// End the game if the hero falls off the bottom of the screen
if (hero.y > 2732) {
LK.showGameOver();
}
}); ===================================================================
--- original.js
+++ change.js
@@ -239,22 +239,21 @@
****/
// Instantiate AlarmDisplay
var alarmDisplay = game.addChild(new AlarmDisplay());
// Set the zIndex to ensure it's on top
+// Create a time counter display
+var timeCounter = new Text2('0', {
+ size: 150,
+ fill: "#ffffff"
+});
+timeCounter.anchor.set(1, 0); // Anchor to the top right
+timeCounter.x = 2048; // Position at the right edge of the screen
+timeCounter.y = 0; // Position at the top of the screen
+LK.gui.topRight.addChild(timeCounter);
alarmDisplay.zIndex = 1;
// Instantiate AlarmDisplay2
var alarmDisplay2 = game.addChild(new AlarmDisplay2());
// Set the zIndex to ensure it's on top
-// Create a timer display
-var timerDisplay = new Text2('0', {
- size: 100,
- fill: "#ffffff",
- anchorX: 1.0,
- // Anchor to the right
- anchorY: 0.0 // Anchor to the top
-});
-timerDisplay.x = 2048 - 20; // Position to the right
-LK.gui.topRight.addChild(timerDisplay);
alarmDisplay2.zIndex = 1;
// Create the second background
var background2 = game.addChild(new Background2());
background2.zIndex = -1;
@@ -271,17 +270,8 @@
// Create the hero
hero = game.addChild(new Hero());
hero.x = 2048 / 2;
hero.y = 2732 - 150; // Start above the bottom of the screen
-// Initialize elapsed time variable
-var elapsedTime = 0;
-// Create a function to update the timer display every second
-function updateTimerDisplay() {
- elapsedTime++; // Increment the elapsed time by 1 second
- timerDisplay.setText(elapsedTime.toString()); // Update the timer display text
-}
-// Set an interval to call updateTimerDisplay every 1000 milliseconds (1 second)
-LK.setInterval(updateTimerDisplay, 1000);
// Create initial poles
function createInitialPoles() {
var poleSpacing = 2;
var poleWidth = 100 + poleSpacing;
@@ -358,8 +348,11 @@
fallStartPositionShift = 0;
resetFallPositionTimeoutSet = false;
}, 20000);
}
+ // Update the time counter every tick
+ var gameTimeInSeconds = Math.floor(LK.ticks / 60);
+ timeCounter.setText(gameTimeInSeconds.toString());
// End the game if the hero falls off the bottom of the screen
if (hero.y > 2732) {
LK.showGameOver();
}
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.