User prompt
Delete ground and recode it because this is a parkour game and there needs to be space in between
User prompt
Place a border at the end of the finishLine and when the player touches it, he is eliminated.
User prompt
At the beginning and when you pass to finishLine, put a 3-second timer and the game will start after 3 seconds. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Keep distance between coins and spikes
User prompt
Increase the spacing between spikes. Enlarge the platform and increase the distance from one platform to another. Two platforms should not be next to each other and should not touch each other. Reduce the spike spawn rate.
User prompt
Make game over menu
User prompt
Oyuncu hızını arttır, oyuncuyu küçült, platform yatay uzunluğunu arttır ve bir platform ile başka bir platform aralığı 85 yap
User prompt
Bir platform başka bir platform ile en az 50 px uzaklıkta olmalı
User prompt
Add to player more speed and make objets bigger
User prompt
Make coins and player more bigger
User prompt
Make lava infinite
User prompt
Platformun aşağısına lav koy ve yerçekimini düzelt
User prompt
Make objects bigger
User prompt
Aşağı düşünce ölsün
Code edit (1 edits merged)
Please save this source code
User prompt
Cube Rush - 2D Parkour Adventure
Initial prompt
Cube parkour game 2d
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
self.update = function () {
// Coin no longer spins - removed rotation animation
};
return self;
});
var DeathBorder = Container.expand(function () {
var self = Container.call(this);
var borderGraphics = self.attachAsset('border', {
anchorX: 0.5,
anchorY: 0.0
});
return self;
});
var FinishLine = Container.expand(function () {
var self = Container.call(this);
var finishGraphics = self.attachAsset('finishLine', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
var Lava = Container.expand(function () {
var self = Container.call(this);
var lavaGraphics = self.attachAsset('lava', {
anchorX: 0,
anchorY: 0
});
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.isGrounded = false;
self.jumpForce = -20;
self.gravity = 0.8;
self.groundY = 0;
self.isJumping = false;
self.jumpCount = 0;
self.maxJumps = 2;
self.jump = function () {
if ((self.isGrounded || self.jumpCount < self.maxJumps) && gameStarted) {
self.velocityY = self.jumpForce;
self.isGrounded = false;
self.isJumping = true;
self.jumpCount++;
LK.getSound('jump').play();
}
};
self.strongJump = function () {
if ((self.isGrounded || self.jumpCount < self.maxJumps) && gameStarted) {
self.velocityY = self.jumpForce * 1.5;
self.isGrounded = false;
self.isJumping = true;
self.jumpCount++;
LK.getSound('jump').play();
}
};
self.update = function () {
// Apply gravity
if (!self.isGrounded) {
self.velocityY += self.gravity;
}
// Update position
self.y += self.velocityY;
// Platform collision detection is handled in main game loop
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Game variables
var player;
var platforms = [];
var coins = [];
var finishLine;
var deathBorder;
var cameraOffsetX = 0;
var gameSpeed = 16;
var currentLevel = storage.currentLevel || 1;
var levelComplete = false;
var isJumpPressed = false;
var jumpHoldTime = 0;
var maxJumpHoldTime = 15;
var gameStarted = false;
var countdownActive = false;
var countdownNumber = 3;
var levelLength = 0;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0);
scoreTxt.x = -20;
scoreTxt.y = 20;
LK.gui.topRight.addChild(scoreTxt);
var levelTxt = new Text2('Level: ' + currentLevel, {
size: 60,
fill: 0xFFFFFF
});
levelTxt.anchor.set(1, 0);
levelTxt.x = -20;
levelTxt.y = 90;
LK.gui.topRight.addChild(levelTxt);
var countdownTxt = new Text2('3', {
size: 200,
fill: 0xFFFFFF
});
countdownTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(countdownTxt);
countdownTxt.alpha = 0;
// Initialize player
player = game.addChild(new Player());
player.x = 300;
player.y = 2200;
player.groundY = 2200;
// Level generation function
function generateLevel() {
// Clear existing level elements
for (var i = platforms.length - 1; i >= 0; i--) {
platforms[i].destroy();
}
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].destroy();
}
if (finishLine) {
finishLine.destroy();
}
if (deathBorder) {
deathBorder.destroy();
}
platforms = [];
coins = [];
// Generate floating platforms with gaps
levelLength = 3000 + currentLevel * 500;
var currentX = 200;
var baseY = 2300;
var allSpikePositions = [];
var platformCount = 0;
var maxPlatforms = currentLevel + 5; // Level + 5 = number of platforms
// Create starting platform
var startPlatform = game.addChild(new Platform());
startPlatform.x = 200;
startPlatform.y = baseY;
platforms.push(startPlatform);
currentX = 700; // Start next platforms after gap
while (currentX < levelLength && platformCount < maxPlatforms) {
// Keep all platforms at the same height
var platformY = baseY;
// Create platform
var platform = game.addChild(new Platform());
platform.x = currentX;
platform.y = platformY;
platforms.push(platform);
// Add coins
if (Math.random() < 0.9) {
var coinX = currentX + (Math.random() - 0.5) * 150;
var coinY = platformY - 120 - Math.random() * 80;
var coin = game.addChild(new Coin());
coin.x = coinX;
coin.y = coinY;
coins.push(coin);
}
// Add additional coins at different heights
if (Math.random() < 0.4) {
var extraCoinX = currentX + (Math.random() - 0.5) * 200;
var extraCoinY = platformY - 200 - Math.random() * 100;
var extraCoin = game.addChild(new Coin());
extraCoin.x = extraCoinX;
extraCoin.y = extraCoinY;
coins.push(extraCoin);
}
// Add bonus coins for higher levels
if (currentLevel > 2 && Math.random() < 0.3) {
var bonusCoinX = currentX + (Math.random() - 0.5) * 250;
var bonusCoinY = platformY - 300 - Math.random() * 120;
var bonusCoin = game.addChild(new Coin());
bonusCoin.x = bonusCoinX;
bonusCoin.y = bonusCoinY;
coins.push(bonusCoin);
}
// Create gaps of at least 750 pixels between platforms
currentX += 750 + Math.random() * 250; // Min 750px, max 1000px gap
platformCount++;
}
// Add infinite lava background
var lavaY = 2500;
var lavaX = 0;
while (lavaX < levelLength + 2048) {
var lava = game.addChild(new Lava());
lava.x = lavaX;
lava.y = lavaY;
lavaX += 2048; // Move to next lava tile position
}
// Create finish platform
var finishPlatform = game.addChild(new Platform());
finishPlatform.x = levelLength - 200;
finishPlatform.y = baseY;
platforms.push(finishPlatform);
// Add finish line
finishLine = game.addChild(new FinishLine());
finishLine.x = levelLength - 200;
finishLine.y = baseY - 40;
// Add death border at end of level with unlimited height
deathBorder = game.addChild(new DeathBorder());
deathBorder.x = levelLength + 50;
deathBorder.y = 0; // Position at top with unlimited height
// Reset player position
player.x = 200;
player.y = baseY - 100;
player.velocityY = 0;
player.isGrounded = true;
player.jumpCount = 0;
player.groundY = baseY;
cameraOffsetX = 0;
levelComplete = false;
startCountdown();
}
// Keyboard input handling for space bar
LK.on('keydown', function (event) {
if (event.code === 'Space' && !isJumpPressed) {
isJumpPressed = true;
jumpHoldTime = 0;
}
});
LK.on('keyup', function (event) {
if (event.code === 'Space' && isJumpPressed) {
if (jumpHoldTime < 5) {
player.jump();
} else {
player.strongJump();
}
isJumpPressed = false;
jumpHoldTime = 0;
}
});
// Input handling
game.down = function (x, y, obj) {
isJumpPressed = true;
jumpHoldTime = 0;
};
game.up = function (x, y, obj) {
if (isJumpPressed) {
if (jumpHoldTime < 5) {
player.jump();
} else {
player.strongJump();
}
isJumpPressed = false;
jumpHoldTime = 0;
}
};
// Game update loop
game.update = function () {
if (levelComplete || !gameStarted || countdownActive) {
return;
}
// Handle jump input
if (isJumpPressed) {
jumpHoldTime++;
if (jumpHoldTime >= maxJumpHoldTime) {
player.strongJump();
isJumpPressed = false;
jumpHoldTime = 0;
}
}
// Move player forward automatically
player.x += gameSpeed;
// Update camera
cameraOffsetX = player.x - 400;
game.x = -cameraOffsetX;
// Check platform collision
var onPlatform = false;
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
// Check if player is within horizontal bounds of platform
if (player.x > platform.x - 200 && player.x < platform.x + 200) {
var platformTop = platform.y - 40;
var platformBottom = platform.y + 40;
var playerBottom = player.y;
var playerTop = player.y - 180; // Player height is 180
var previousPlayerBottom = player.y - player.velocityY;
// Check if player is intersecting with platform
if (playerBottom > platformTop && playerTop < platformBottom) {
// Player is overlapping with platform
if (player.velocityY >= 0) {
// Player is falling or stationary, place on top of platform
player.y = platformTop;
player.velocityY = 0;
player.isGrounded = true;
player.isJumping = false;
player.jumpCount = 0;
onPlatform = true;
} else {
// Player is moving up, stop at bottom of platform
player.y = platformBottom + 180;
player.velocityY = 0;
}
break;
}
// Check if player is landing on platform from above
else if (player.velocityY >= 0 && previousPlayerBottom <= platformTop && playerBottom >= platformTop) {
player.y = platformTop;
player.velocityY = 0;
player.isGrounded = true;
player.isJumping = false;
player.jumpCount = 0;
onPlatform = true;
break;
}
}
}
if (!onPlatform) {
player.isGrounded = false;
}
// Check border collision - trigger next level when touching border
if (player.x >= levelLength + 25) {
if (!levelComplete) {
levelComplete = true;
currentLevel++;
storage.currentLevel = currentLevel;
levelTxt.setText('Level: ' + currentLevel);
// Flash screen green and generate next level
LK.effects.flashScreen(0x00ff00, 1000);
LK.setTimeout(function () {
generateLevel();
}, 1000);
}
}
// Check coin collection
for (var i = 0; i < coins.length; i++) {
var coin = coins[i];
if (!coin.collected && player.intersects(coin)) {
coin.collected = true;
coin.alpha = 0;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('coin').play();
}
}
// Check finish line
if (finishLine && player.intersects(finishLine)) {
levelComplete = true;
currentLevel++;
storage.currentLevel = currentLevel;
levelTxt.setText('Level: ' + currentLevel);
// Flash screen green and generate next level
LK.effects.flashScreen(0x00ff00, 1000);
LK.setTimeout(function () {
generateLevel();
}, 1000);
}
// Check if player fell into lava or fell below ground level
if (player.y > 2500 || player.y > player.groundY + 100) {
LK.getSound('death').play();
LK.effects.flashScreen(0xff0000, 500);
resetLevel();
}
};
function startCountdown() {
countdownActive = true;
gameStarted = false;
countdownNumber = 3;
countdownTxt.setText(countdownNumber.toString());
countdownTxt.alpha = 1;
countdownTxt.scaleX = 1;
countdownTxt.scaleY = 1;
function nextCountdown() {
// Scale up and fade out current number
tween(countdownTxt, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
countdownNumber--;
if (countdownNumber > 0) {
// Show next number
countdownTxt.setText(countdownNumber.toString());
countdownTxt.alpha = 1;
countdownTxt.scaleX = 1;
countdownTxt.scaleY = 1;
LK.setTimeout(nextCountdown, 200);
} else {
// Show GO! and start game
countdownTxt.setText('GO!');
countdownTxt.alpha = 1;
countdownTxt.scaleX = 1;
countdownTxt.scaleY = 1;
tween(countdownTxt, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
countdownActive = false;
gameStarted = true;
}
});
}
}
});
}
LK.setTimeout(nextCountdown, 200);
}
function resetLevel() {
LK.showGameOver();
}
function resetCurrentLevel() {
generateLevel();
}
// Game reset function (called when game restarts)
function resetGame() {
currentLevel = 1;
storage.currentLevel = currentLevel;
LK.setScore(0);
scoreTxt.setText('Score: 0');
levelTxt.setText('Level: ' + currentLevel);
generateLevel();
}
// Initialize first level
generateLevel(); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
self.update = function () {
// Coin no longer spins - removed rotation animation
};
return self;
});
var DeathBorder = Container.expand(function () {
var self = Container.call(this);
var borderGraphics = self.attachAsset('border', {
anchorX: 0.5,
anchorY: 0.0
});
return self;
});
var FinishLine = Container.expand(function () {
var self = Container.call(this);
var finishGraphics = self.attachAsset('finishLine', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
var Lava = Container.expand(function () {
var self = Container.call(this);
var lavaGraphics = self.attachAsset('lava', {
anchorX: 0,
anchorY: 0
});
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.isGrounded = false;
self.jumpForce = -20;
self.gravity = 0.8;
self.groundY = 0;
self.isJumping = false;
self.jumpCount = 0;
self.maxJumps = 2;
self.jump = function () {
if ((self.isGrounded || self.jumpCount < self.maxJumps) && gameStarted) {
self.velocityY = self.jumpForce;
self.isGrounded = false;
self.isJumping = true;
self.jumpCount++;
LK.getSound('jump').play();
}
};
self.strongJump = function () {
if ((self.isGrounded || self.jumpCount < self.maxJumps) && gameStarted) {
self.velocityY = self.jumpForce * 1.5;
self.isGrounded = false;
self.isJumping = true;
self.jumpCount++;
LK.getSound('jump').play();
}
};
self.update = function () {
// Apply gravity
if (!self.isGrounded) {
self.velocityY += self.gravity;
}
// Update position
self.y += self.velocityY;
// Platform collision detection is handled in main game loop
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Game variables
var player;
var platforms = [];
var coins = [];
var finishLine;
var deathBorder;
var cameraOffsetX = 0;
var gameSpeed = 16;
var currentLevel = storage.currentLevel || 1;
var levelComplete = false;
var isJumpPressed = false;
var jumpHoldTime = 0;
var maxJumpHoldTime = 15;
var gameStarted = false;
var countdownActive = false;
var countdownNumber = 3;
var levelLength = 0;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0);
scoreTxt.x = -20;
scoreTxt.y = 20;
LK.gui.topRight.addChild(scoreTxt);
var levelTxt = new Text2('Level: ' + currentLevel, {
size: 60,
fill: 0xFFFFFF
});
levelTxt.anchor.set(1, 0);
levelTxt.x = -20;
levelTxt.y = 90;
LK.gui.topRight.addChild(levelTxt);
var countdownTxt = new Text2('3', {
size: 200,
fill: 0xFFFFFF
});
countdownTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(countdownTxt);
countdownTxt.alpha = 0;
// Initialize player
player = game.addChild(new Player());
player.x = 300;
player.y = 2200;
player.groundY = 2200;
// Level generation function
function generateLevel() {
// Clear existing level elements
for (var i = platforms.length - 1; i >= 0; i--) {
platforms[i].destroy();
}
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].destroy();
}
if (finishLine) {
finishLine.destroy();
}
if (deathBorder) {
deathBorder.destroy();
}
platforms = [];
coins = [];
// Generate floating platforms with gaps
levelLength = 3000 + currentLevel * 500;
var currentX = 200;
var baseY = 2300;
var allSpikePositions = [];
var platformCount = 0;
var maxPlatforms = currentLevel + 5; // Level + 5 = number of platforms
// Create starting platform
var startPlatform = game.addChild(new Platform());
startPlatform.x = 200;
startPlatform.y = baseY;
platforms.push(startPlatform);
currentX = 700; // Start next platforms after gap
while (currentX < levelLength && platformCount < maxPlatforms) {
// Keep all platforms at the same height
var platformY = baseY;
// Create platform
var platform = game.addChild(new Platform());
platform.x = currentX;
platform.y = platformY;
platforms.push(platform);
// Add coins
if (Math.random() < 0.9) {
var coinX = currentX + (Math.random() - 0.5) * 150;
var coinY = platformY - 120 - Math.random() * 80;
var coin = game.addChild(new Coin());
coin.x = coinX;
coin.y = coinY;
coins.push(coin);
}
// Add additional coins at different heights
if (Math.random() < 0.4) {
var extraCoinX = currentX + (Math.random() - 0.5) * 200;
var extraCoinY = platformY - 200 - Math.random() * 100;
var extraCoin = game.addChild(new Coin());
extraCoin.x = extraCoinX;
extraCoin.y = extraCoinY;
coins.push(extraCoin);
}
// Add bonus coins for higher levels
if (currentLevel > 2 && Math.random() < 0.3) {
var bonusCoinX = currentX + (Math.random() - 0.5) * 250;
var bonusCoinY = platformY - 300 - Math.random() * 120;
var bonusCoin = game.addChild(new Coin());
bonusCoin.x = bonusCoinX;
bonusCoin.y = bonusCoinY;
coins.push(bonusCoin);
}
// Create gaps of at least 750 pixels between platforms
currentX += 750 + Math.random() * 250; // Min 750px, max 1000px gap
platformCount++;
}
// Add infinite lava background
var lavaY = 2500;
var lavaX = 0;
while (lavaX < levelLength + 2048) {
var lava = game.addChild(new Lava());
lava.x = lavaX;
lava.y = lavaY;
lavaX += 2048; // Move to next lava tile position
}
// Create finish platform
var finishPlatform = game.addChild(new Platform());
finishPlatform.x = levelLength - 200;
finishPlatform.y = baseY;
platforms.push(finishPlatform);
// Add finish line
finishLine = game.addChild(new FinishLine());
finishLine.x = levelLength - 200;
finishLine.y = baseY - 40;
// Add death border at end of level with unlimited height
deathBorder = game.addChild(new DeathBorder());
deathBorder.x = levelLength + 50;
deathBorder.y = 0; // Position at top with unlimited height
// Reset player position
player.x = 200;
player.y = baseY - 100;
player.velocityY = 0;
player.isGrounded = true;
player.jumpCount = 0;
player.groundY = baseY;
cameraOffsetX = 0;
levelComplete = false;
startCountdown();
}
// Keyboard input handling for space bar
LK.on('keydown', function (event) {
if (event.code === 'Space' && !isJumpPressed) {
isJumpPressed = true;
jumpHoldTime = 0;
}
});
LK.on('keyup', function (event) {
if (event.code === 'Space' && isJumpPressed) {
if (jumpHoldTime < 5) {
player.jump();
} else {
player.strongJump();
}
isJumpPressed = false;
jumpHoldTime = 0;
}
});
// Input handling
game.down = function (x, y, obj) {
isJumpPressed = true;
jumpHoldTime = 0;
};
game.up = function (x, y, obj) {
if (isJumpPressed) {
if (jumpHoldTime < 5) {
player.jump();
} else {
player.strongJump();
}
isJumpPressed = false;
jumpHoldTime = 0;
}
};
// Game update loop
game.update = function () {
if (levelComplete || !gameStarted || countdownActive) {
return;
}
// Handle jump input
if (isJumpPressed) {
jumpHoldTime++;
if (jumpHoldTime >= maxJumpHoldTime) {
player.strongJump();
isJumpPressed = false;
jumpHoldTime = 0;
}
}
// Move player forward automatically
player.x += gameSpeed;
// Update camera
cameraOffsetX = player.x - 400;
game.x = -cameraOffsetX;
// Check platform collision
var onPlatform = false;
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
// Check if player is within horizontal bounds of platform
if (player.x > platform.x - 200 && player.x < platform.x + 200) {
var platformTop = platform.y - 40;
var platformBottom = platform.y + 40;
var playerBottom = player.y;
var playerTop = player.y - 180; // Player height is 180
var previousPlayerBottom = player.y - player.velocityY;
// Check if player is intersecting with platform
if (playerBottom > platformTop && playerTop < platformBottom) {
// Player is overlapping with platform
if (player.velocityY >= 0) {
// Player is falling or stationary, place on top of platform
player.y = platformTop;
player.velocityY = 0;
player.isGrounded = true;
player.isJumping = false;
player.jumpCount = 0;
onPlatform = true;
} else {
// Player is moving up, stop at bottom of platform
player.y = platformBottom + 180;
player.velocityY = 0;
}
break;
}
// Check if player is landing on platform from above
else if (player.velocityY >= 0 && previousPlayerBottom <= platformTop && playerBottom >= platformTop) {
player.y = platformTop;
player.velocityY = 0;
player.isGrounded = true;
player.isJumping = false;
player.jumpCount = 0;
onPlatform = true;
break;
}
}
}
if (!onPlatform) {
player.isGrounded = false;
}
// Check border collision - trigger next level when touching border
if (player.x >= levelLength + 25) {
if (!levelComplete) {
levelComplete = true;
currentLevel++;
storage.currentLevel = currentLevel;
levelTxt.setText('Level: ' + currentLevel);
// Flash screen green and generate next level
LK.effects.flashScreen(0x00ff00, 1000);
LK.setTimeout(function () {
generateLevel();
}, 1000);
}
}
// Check coin collection
for (var i = 0; i < coins.length; i++) {
var coin = coins[i];
if (!coin.collected && player.intersects(coin)) {
coin.collected = true;
coin.alpha = 0;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('coin').play();
}
}
// Check finish line
if (finishLine && player.intersects(finishLine)) {
levelComplete = true;
currentLevel++;
storage.currentLevel = currentLevel;
levelTxt.setText('Level: ' + currentLevel);
// Flash screen green and generate next level
LK.effects.flashScreen(0x00ff00, 1000);
LK.setTimeout(function () {
generateLevel();
}, 1000);
}
// Check if player fell into lava or fell below ground level
if (player.y > 2500 || player.y > player.groundY + 100) {
LK.getSound('death').play();
LK.effects.flashScreen(0xff0000, 500);
resetLevel();
}
};
function startCountdown() {
countdownActive = true;
gameStarted = false;
countdownNumber = 3;
countdownTxt.setText(countdownNumber.toString());
countdownTxt.alpha = 1;
countdownTxt.scaleX = 1;
countdownTxt.scaleY = 1;
function nextCountdown() {
// Scale up and fade out current number
tween(countdownTxt, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
countdownNumber--;
if (countdownNumber > 0) {
// Show next number
countdownTxt.setText(countdownNumber.toString());
countdownTxt.alpha = 1;
countdownTxt.scaleX = 1;
countdownTxt.scaleY = 1;
LK.setTimeout(nextCountdown, 200);
} else {
// Show GO! and start game
countdownTxt.setText('GO!');
countdownTxt.alpha = 1;
countdownTxt.scaleX = 1;
countdownTxt.scaleY = 1;
tween(countdownTxt, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
countdownActive = false;
gameStarted = true;
}
});
}
}
});
}
LK.setTimeout(nextCountdown, 200);
}
function resetLevel() {
LK.showGameOver();
}
function resetCurrentLevel() {
generateLevel();
}
// Game reset function (called when game restarts)
function resetGame() {
currentLevel = 1;
storage.currentLevel = currentLevel;
LK.setScore(0);
scoreTxt.setText('Score: 0');
levelTxt.setText('Level: ' + currentLevel);
generateLevel();
}
// Initialize first level
generateLevel();