/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	highScore: 0
});
/**** 
* Classes
****/ 
var Block = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('block', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.broken = false;
	self.checkCollision = function (player) {
		if (self.broken || !player.isAlive) return false;
		var playerBottom = player.y + 50;
		var playerTop = player.y - 50;
		var playerLeft = player.x - 40;
		var playerRight = player.x + 40;
		var blockTop = self.y - 40;
		var blockBottom = self.y + 40;
		var blockLeft = self.x - 40;
		var blockRight = self.x + 40;
		// Player hitting block from below
		if (player.velocity.y < 0 && playerTop <= blockBottom && playerBottom > blockBottom && playerRight > blockLeft && playerLeft < blockRight) {
			player.velocity.y = 0;
			self.hit();
			return true;
		}
		// Player landing on block from above
		if (player.velocity.y > 0 && playerBottom >= blockTop && playerTop < blockTop && playerRight > blockLeft && playerLeft < blockRight) {
			player.y = blockTop - 50;
			player.land();
			return true;
		}
		// Side collisions
		if (playerRight > blockLeft && playerLeft < blockRight && playerBottom > blockTop && playerTop < blockBottom) {
			// Determine which side the collision is from
			var overlapRight = playerRight - blockLeft;
			var overlapLeft = blockRight - playerLeft;
			if (overlapRight < overlapLeft) {
				player.x = blockLeft - 40;
			} else {
				player.x = blockRight + 40;
			}
			player.velocity.x = 0;
			return true;
		}
		return false;
	};
	self.hit = function () {
		if (!self.broken) {
			// Animation for hit effect
			tween(self, {
				y: self.y - 10
			}, {
				duration: 100,
				easing: tween.easeOut,
				onFinish: function onFinish() {
					tween(self, {
						y: self.y + 10
					}, {
						duration: 100,
						easing: tween.easeIn
					});
				}
			});
		}
	};
	return self;
});
var Coin = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.collected = false;
	self.update = function () {
		if (!self.collected) {
			// Simple bobbing animation
			sprite.y = Math.sin(LK.ticks / 10) * 5;
		}
	};
	self.collect = function () {
		if (!self.collected) {
			self.collected = true;
			LK.getSound('coin_collect').play();
			// Animation for collection
			tween(self, {
				alpha: 0,
				y: self.y - 50
			}, {
				duration: 500,
				easing: tween.easeOut,
				onFinish: function onFinish() {
					self.destroy();
				}
			});
			return true;
		}
		return false;
	};
	self.checkCollision = function (player) {
		if (self.collected || !player.isAlive) return false;
		var distance = Math.sqrt(Math.pow(player.x - self.x, 2) + Math.pow(player.y - self.y, 2));
		if (distance < 60) {
			return self.collect();
		}
		return false;
	};
	return self;
});
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 2;
	self.direction = 1; // 1 = right, -1 = left
	self.alive = true;
	self.update = function () {
		if (self.alive) {
			self.x += self.speed * self.direction;
			// Change direction if at edge of patrol area
			if (self.x > self.patrolRight && self.direction > 0 || self.x < self.patrolLeft && self.direction < 0) {
				self.direction *= -1;
				sprite.scaleX = -sprite.scaleX;
			}
		}
	};
	self.setPatrolArea = function (left, right) {
		self.patrolLeft = left;
		self.patrolRight = right;
	};
	self.checkCollision = function (player) {
		if (!self.alive || !player.isAlive) return false;
		var playerBottom = player.y + 50;
		var playerTop = player.y - 50;
		var playerLeft = player.x - 40;
		var playerRight = player.x + 40;
		var enemyTop = self.y - 30;
		var enemyBottom = self.y + 30;
		var enemyLeft = self.x - 35;
		var enemyRight = self.x + 35;
		// Check if player is stomping on enemy from above
		if (player.velocity.y > 0 && playerBottom >= enemyTop && playerTop < enemyTop && playerRight > enemyLeft && playerLeft < enemyRight) {
			self.die();
			player.velocity.y = player.jumpForce * 0.7; // Bounce effect
			return true;
		}
		// Check if player collides with enemy (not from above)
		if (playerRight > enemyLeft && playerLeft < enemyRight && playerBottom > enemyTop && playerTop < enemyBottom) {
			player.die();
			return false;
		}
		return false;
	};
	self.die = function () {
		if (self.alive) {
			self.alive = false;
			LK.getSound('enemy_hit').play();
			// Animation for enemy death
			tween(self, {
				alpha: 0,
				y: self.y + 50
			}, {
				duration: 500,
				easing: tween.easeIn,
				onFinish: function onFinish() {
					self.destroy();
				}
			});
		}
	};
	return self;
});
var Platform = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('ground', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = sprite.width;
	self.height = sprite.height;
	self.checkCollision = function (player) {
		if (!player.isAlive) return false;
		var playerBottom = player.y + 50;
		var playerTop = player.y - 50;
		var playerLeft = player.x - 40;
		var playerRight = player.x + 40;
		var platformTop = self.y - self.height / 2;
		var platformBottom = self.y + self.height / 2;
		var platformLeft = self.x - self.width / 2;
		var platformRight = self.x + self.width / 2;
		// Check if player is above the platform and falling
		if (player.velocity.y > 0 && playerBottom >= platformTop && playerTop < platformTop && playerRight > platformLeft && playerLeft < platformRight) {
			player.y = platformTop - 50;
			player.land();
			return true;
		}
		return false;
	};
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Player properties
	self.velocity = {
		x: 0,
		y: 0
	};
	self.speed = 8;
	self.jumpForce = -20;
	self.gravity = 1;
	self.isJumping = false;
	self.isAlive = true;
	self.direction = 1; // 1 = right, -1 = left
	// Control the player's movement and jumping
	self.moveLeft = function () {
		self.velocity.x = -self.speed;
		self.direction = -1;
		sprite.scaleX = -1;
	};
	self.moveRight = function () {
		self.velocity.x = self.speed;
		self.direction = 1;
		sprite.scaleX = 1;
	};
	self.stopMoving = function () {
		self.velocity.x = 0;
	};
	self.jump = function () {
		if (!self.isJumping) {
			self.velocity.y = self.jumpForce;
			self.isJumping = true;
			LK.getSound('jump').play();
		}
	};
	self.update = function () {
		// Apply gravity
		self.velocity.y += self.gravity;
		// Apply velocity
		self.x += self.velocity.x;
		self.y += self.velocity.y;
		// Screen boundaries
		if (self.x < 50) {
			self.x = 50;
		} else if (self.x > 2000) {
			self.x = 2000;
		}
		// Check if fallen off the screen
		if (self.y > 2732 && self.isAlive) {
			self.die();
		}
	};
	self.land = function () {
		self.isJumping = false;
		self.velocity.y = 0;
	};
	self.die = function () {
		if (self.isAlive) {
			self.isAlive = false;
			LK.getSound('player_hit').play();
			LK.effects.flashObject(self, 0xFF0000, 1000);
			LK.setTimeout(function () {
				LK.effects.flashScreen(0xFF0000, 500);
				LK.showGameOver();
			}, 1000);
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Game variables
var player;
var platforms = [];
var coins = [];
var enemies = [];
var blocks = [];
var score = 0;
var isGameStarted = false;
var cameraPosX = 0;
// Create background
var background = LK.getAsset('background', {
	anchorX: 0,
	anchorY: 0,
	x: 0,
	y: 0
});
game.addChild(background);
// Create score text
var scoreText = new Text2('SCORE: 0', {
	size: 60,
	fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create high score text
var highScoreText = new Text2('HIGH SCORE: ' + storage.highScore, {
	size: 40,
	fill: 0xFFFFFF
});
highScoreText.anchor.set(0.5, 0);
highScoreText.y = 70;
LK.gui.top.addChild(highScoreText);
// Create instructions text
var instructionsText = new Text2('TAP TO START\nTAP LEFT/RIGHT TO MOVE\nTAP CENTER TO JUMP', {
	size: 60,
	fill: 0xFFFFFF
});
instructionsText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionsText);
// Initialize level
function initLevel() {
	// Create player
	player = new Player();
	player.x = 200;
	player.y = 500;
	game.addChild(player);
	// Create ground platforms
	createPlatform(400, 700, 800, 50);
	createPlatform(1200, 700, 800, 50);
	createPlatform(2000, 700, 800, 50);
	// Create elevated platforms
	createPlatform(600, 500, 300, 50);
	createPlatform(1100, 400, 300, 50);
	createPlatform(1700, 500, 300, 50);
	// Create coins
	createCoin(600, 400);
	createCoin(700, 400);
	createCoin(800, 400);
	createCoin(1100, 300);
	createCoin(1200, 300);
	createCoin(1300, 300);
	createCoin(1700, 400);
	createCoin(1800, 400);
	createCoin(1900, 400);
	// Create enemies
	createEnemy(800, 650, 600, 1000);
	createEnemy(1500, 650, 1300, 1700);
	// Create blocks
	createBlock(900, 500);
	createBlock(1400, 500);
	createBlock(1950, 350);
	// Play music
	LK.playMusic('game_music');
}
// Helper functions for creating game elements
function createPlatform(x, y, width, height) {
	var platform = new Platform();
	platform.x = x;
	platform.y = y;
	platform.width = width;
	platform.height = height;
	// Scale the platform to desired size
	var sprite = platform.getChildAt(0);
	sprite.scaleX = width / sprite.width;
	sprite.scaleY = height / sprite.height;
	platforms.push(platform);
	game.addChild(platform);
	return platform;
}
function createCoin(x, y) {
	var coin = new Coin();
	coin.x = x;
	coin.y = y;
	coins.push(coin);
	game.addChild(coin);
	return coin;
}
function createEnemy(x, y, patrolLeft, patrolRight) {
	var enemy = new Enemy();
	enemy.x = x;
	enemy.y = y;
	enemy.setPatrolArea(patrolLeft, patrolRight);
	enemies.push(enemy);
	game.addChild(enemy);
	return enemy;
}
function createBlock(x, y) {
	var block = new Block();
	block.x = x;
	block.y = y;
	blocks.push(block);
	game.addChild(block);
	return block;
}
// Update score display
function updateScore(points) {
	score += points;
	scoreText.setText('SCORE: ' + score);
	// Update high score if needed
	if (score > storage.highScore) {
		storage.highScore = score;
		highScoreText.setText('HIGH SCORE: ' + storage.highScore);
	}
}
// Handle input events
game.down = function (x, y, obj) {
	if (!isGameStarted) {
		isGameStarted = true;
		instructionsText.visible = false;
		initLevel();
		return;
	}
	if (!player || !player.isAlive) return;
	// Left third of screen - move left
	if (x < 680) {
		player.moveLeft();
	}
	// Right third of screen - move right
	else if (x > 1368) {
		player.moveRight();
	}
	// Middle third - jump
	else {
		player.jump();
	}
};
game.up = function (x, y, obj) {
	if (!player || !player.isAlive) return;
	// Stop horizontal movement on release
	if (x < 680 && player.velocity.x < 0 || x > 1368 && player.velocity.x > 0) {
		player.stopMoving();
	}
};
// Game update loop
game.update = function () {
	if (!isGameStarted || !player) return;
	// Update player
	player.update();
	// Camera follow player
	if (player.x > 1024 && player.x < 3000) {
		cameraPosX = player.x - 1024;
		game.x = -cameraPosX;
	}
	// Check platform collisions
	for (var i = 0; i < platforms.length; i++) {
		platforms[i].checkCollision(player);
	}
	// Check block collisions
	for (var i = 0; i < blocks.length; i++) {
		blocks[i].checkCollision(player);
	}
	// Check coin collisions
	for (var i = coins.length - 1; i >= 0; i--) {
		coins[i].update();
		if (coins[i].checkCollision(player)) {
			updateScore(10);
			coins.splice(i, 1);
		}
	}
	// Check enemy collisions
	for (var i = enemies.length - 1; i >= 0; i--) {
		enemies[i].update();
		if (enemies[i].checkCollision(player)) {
			updateScore(50);
			enemies.splice(i, 1);
		}
	}
	// Check if all coins collected
	if (coins.length === 0 && player.isAlive) {
		LK.setTimeout(function () {
			LK.showYouWin();
		}, 1000);
	}
}; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	highScore: 0
});
/**** 
* Classes
****/ 
var Block = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('block', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.broken = false;
	self.checkCollision = function (player) {
		if (self.broken || !player.isAlive) return false;
		var playerBottom = player.y + 50;
		var playerTop = player.y - 50;
		var playerLeft = player.x - 40;
		var playerRight = player.x + 40;
		var blockTop = self.y - 40;
		var blockBottom = self.y + 40;
		var blockLeft = self.x - 40;
		var blockRight = self.x + 40;
		// Player hitting block from below
		if (player.velocity.y < 0 && playerTop <= blockBottom && playerBottom > blockBottom && playerRight > blockLeft && playerLeft < blockRight) {
			player.velocity.y = 0;
			self.hit();
			return true;
		}
		// Player landing on block from above
		if (player.velocity.y > 0 && playerBottom >= blockTop && playerTop < blockTop && playerRight > blockLeft && playerLeft < blockRight) {
			player.y = blockTop - 50;
			player.land();
			return true;
		}
		// Side collisions
		if (playerRight > blockLeft && playerLeft < blockRight && playerBottom > blockTop && playerTop < blockBottom) {
			// Determine which side the collision is from
			var overlapRight = playerRight - blockLeft;
			var overlapLeft = blockRight - playerLeft;
			if (overlapRight < overlapLeft) {
				player.x = blockLeft - 40;
			} else {
				player.x = blockRight + 40;
			}
			player.velocity.x = 0;
			return true;
		}
		return false;
	};
	self.hit = function () {
		if (!self.broken) {
			// Animation for hit effect
			tween(self, {
				y: self.y - 10
			}, {
				duration: 100,
				easing: tween.easeOut,
				onFinish: function onFinish() {
					tween(self, {
						y: self.y + 10
					}, {
						duration: 100,
						easing: tween.easeIn
					});
				}
			});
		}
	};
	return self;
});
var Coin = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.collected = false;
	self.update = function () {
		if (!self.collected) {
			// Simple bobbing animation
			sprite.y = Math.sin(LK.ticks / 10) * 5;
		}
	};
	self.collect = function () {
		if (!self.collected) {
			self.collected = true;
			LK.getSound('coin_collect').play();
			// Animation for collection
			tween(self, {
				alpha: 0,
				y: self.y - 50
			}, {
				duration: 500,
				easing: tween.easeOut,
				onFinish: function onFinish() {
					self.destroy();
				}
			});
			return true;
		}
		return false;
	};
	self.checkCollision = function (player) {
		if (self.collected || !player.isAlive) return false;
		var distance = Math.sqrt(Math.pow(player.x - self.x, 2) + Math.pow(player.y - self.y, 2));
		if (distance < 60) {
			return self.collect();
		}
		return false;
	};
	return self;
});
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 2;
	self.direction = 1; // 1 = right, -1 = left
	self.alive = true;
	self.update = function () {
		if (self.alive) {
			self.x += self.speed * self.direction;
			// Change direction if at edge of patrol area
			if (self.x > self.patrolRight && self.direction > 0 || self.x < self.patrolLeft && self.direction < 0) {
				self.direction *= -1;
				sprite.scaleX = -sprite.scaleX;
			}
		}
	};
	self.setPatrolArea = function (left, right) {
		self.patrolLeft = left;
		self.patrolRight = right;
	};
	self.checkCollision = function (player) {
		if (!self.alive || !player.isAlive) return false;
		var playerBottom = player.y + 50;
		var playerTop = player.y - 50;
		var playerLeft = player.x - 40;
		var playerRight = player.x + 40;
		var enemyTop = self.y - 30;
		var enemyBottom = self.y + 30;
		var enemyLeft = self.x - 35;
		var enemyRight = self.x + 35;
		// Check if player is stomping on enemy from above
		if (player.velocity.y > 0 && playerBottom >= enemyTop && playerTop < enemyTop && playerRight > enemyLeft && playerLeft < enemyRight) {
			self.die();
			player.velocity.y = player.jumpForce * 0.7; // Bounce effect
			return true;
		}
		// Check if player collides with enemy (not from above)
		if (playerRight > enemyLeft && playerLeft < enemyRight && playerBottom > enemyTop && playerTop < enemyBottom) {
			player.die();
			return false;
		}
		return false;
	};
	self.die = function () {
		if (self.alive) {
			self.alive = false;
			LK.getSound('enemy_hit').play();
			// Animation for enemy death
			tween(self, {
				alpha: 0,
				y: self.y + 50
			}, {
				duration: 500,
				easing: tween.easeIn,
				onFinish: function onFinish() {
					self.destroy();
				}
			});
		}
	};
	return self;
});
var Platform = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('ground', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = sprite.width;
	self.height = sprite.height;
	self.checkCollision = function (player) {
		if (!player.isAlive) return false;
		var playerBottom = player.y + 50;
		var playerTop = player.y - 50;
		var playerLeft = player.x - 40;
		var playerRight = player.x + 40;
		var platformTop = self.y - self.height / 2;
		var platformBottom = self.y + self.height / 2;
		var platformLeft = self.x - self.width / 2;
		var platformRight = self.x + self.width / 2;
		// Check if player is above the platform and falling
		if (player.velocity.y > 0 && playerBottom >= platformTop && playerTop < platformTop && playerRight > platformLeft && playerLeft < platformRight) {
			player.y = platformTop - 50;
			player.land();
			return true;
		}
		return false;
	};
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	var sprite = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Player properties
	self.velocity = {
		x: 0,
		y: 0
	};
	self.speed = 8;
	self.jumpForce = -20;
	self.gravity = 1;
	self.isJumping = false;
	self.isAlive = true;
	self.direction = 1; // 1 = right, -1 = left
	// Control the player's movement and jumping
	self.moveLeft = function () {
		self.velocity.x = -self.speed;
		self.direction = -1;
		sprite.scaleX = -1;
	};
	self.moveRight = function () {
		self.velocity.x = self.speed;
		self.direction = 1;
		sprite.scaleX = 1;
	};
	self.stopMoving = function () {
		self.velocity.x = 0;
	};
	self.jump = function () {
		if (!self.isJumping) {
			self.velocity.y = self.jumpForce;
			self.isJumping = true;
			LK.getSound('jump').play();
		}
	};
	self.update = function () {
		// Apply gravity
		self.velocity.y += self.gravity;
		// Apply velocity
		self.x += self.velocity.x;
		self.y += self.velocity.y;
		// Screen boundaries
		if (self.x < 50) {
			self.x = 50;
		} else if (self.x > 2000) {
			self.x = 2000;
		}
		// Check if fallen off the screen
		if (self.y > 2732 && self.isAlive) {
			self.die();
		}
	};
	self.land = function () {
		self.isJumping = false;
		self.velocity.y = 0;
	};
	self.die = function () {
		if (self.isAlive) {
			self.isAlive = false;
			LK.getSound('player_hit').play();
			LK.effects.flashObject(self, 0xFF0000, 1000);
			LK.setTimeout(function () {
				LK.effects.flashScreen(0xFF0000, 500);
				LK.showGameOver();
			}, 1000);
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Game variables
var player;
var platforms = [];
var coins = [];
var enemies = [];
var blocks = [];
var score = 0;
var isGameStarted = false;
var cameraPosX = 0;
// Create background
var background = LK.getAsset('background', {
	anchorX: 0,
	anchorY: 0,
	x: 0,
	y: 0
});
game.addChild(background);
// Create score text
var scoreText = new Text2('SCORE: 0', {
	size: 60,
	fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create high score text
var highScoreText = new Text2('HIGH SCORE: ' + storage.highScore, {
	size: 40,
	fill: 0xFFFFFF
});
highScoreText.anchor.set(0.5, 0);
highScoreText.y = 70;
LK.gui.top.addChild(highScoreText);
// Create instructions text
var instructionsText = new Text2('TAP TO START\nTAP LEFT/RIGHT TO MOVE\nTAP CENTER TO JUMP', {
	size: 60,
	fill: 0xFFFFFF
});
instructionsText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionsText);
// Initialize level
function initLevel() {
	// Create player
	player = new Player();
	player.x = 200;
	player.y = 500;
	game.addChild(player);
	// Create ground platforms
	createPlatform(400, 700, 800, 50);
	createPlatform(1200, 700, 800, 50);
	createPlatform(2000, 700, 800, 50);
	// Create elevated platforms
	createPlatform(600, 500, 300, 50);
	createPlatform(1100, 400, 300, 50);
	createPlatform(1700, 500, 300, 50);
	// Create coins
	createCoin(600, 400);
	createCoin(700, 400);
	createCoin(800, 400);
	createCoin(1100, 300);
	createCoin(1200, 300);
	createCoin(1300, 300);
	createCoin(1700, 400);
	createCoin(1800, 400);
	createCoin(1900, 400);
	// Create enemies
	createEnemy(800, 650, 600, 1000);
	createEnemy(1500, 650, 1300, 1700);
	// Create blocks
	createBlock(900, 500);
	createBlock(1400, 500);
	createBlock(1950, 350);
	// Play music
	LK.playMusic('game_music');
}
// Helper functions for creating game elements
function createPlatform(x, y, width, height) {
	var platform = new Platform();
	platform.x = x;
	platform.y = y;
	platform.width = width;
	platform.height = height;
	// Scale the platform to desired size
	var sprite = platform.getChildAt(0);
	sprite.scaleX = width / sprite.width;
	sprite.scaleY = height / sprite.height;
	platforms.push(platform);
	game.addChild(platform);
	return platform;
}
function createCoin(x, y) {
	var coin = new Coin();
	coin.x = x;
	coin.y = y;
	coins.push(coin);
	game.addChild(coin);
	return coin;
}
function createEnemy(x, y, patrolLeft, patrolRight) {
	var enemy = new Enemy();
	enemy.x = x;
	enemy.y = y;
	enemy.setPatrolArea(patrolLeft, patrolRight);
	enemies.push(enemy);
	game.addChild(enemy);
	return enemy;
}
function createBlock(x, y) {
	var block = new Block();
	block.x = x;
	block.y = y;
	blocks.push(block);
	game.addChild(block);
	return block;
}
// Update score display
function updateScore(points) {
	score += points;
	scoreText.setText('SCORE: ' + score);
	// Update high score if needed
	if (score > storage.highScore) {
		storage.highScore = score;
		highScoreText.setText('HIGH SCORE: ' + storage.highScore);
	}
}
// Handle input events
game.down = function (x, y, obj) {
	if (!isGameStarted) {
		isGameStarted = true;
		instructionsText.visible = false;
		initLevel();
		return;
	}
	if (!player || !player.isAlive) return;
	// Left third of screen - move left
	if (x < 680) {
		player.moveLeft();
	}
	// Right third of screen - move right
	else if (x > 1368) {
		player.moveRight();
	}
	// Middle third - jump
	else {
		player.jump();
	}
};
game.up = function (x, y, obj) {
	if (!player || !player.isAlive) return;
	// Stop horizontal movement on release
	if (x < 680 && player.velocity.x < 0 || x > 1368 && player.velocity.x > 0) {
		player.stopMoving();
	}
};
// Game update loop
game.update = function () {
	if (!isGameStarted || !player) return;
	// Update player
	player.update();
	// Camera follow player
	if (player.x > 1024 && player.x < 3000) {
		cameraPosX = player.x - 1024;
		game.x = -cameraPosX;
	}
	// Check platform collisions
	for (var i = 0; i < platforms.length; i++) {
		platforms[i].checkCollision(player);
	}
	// Check block collisions
	for (var i = 0; i < blocks.length; i++) {
		blocks[i].checkCollision(player);
	}
	// Check coin collisions
	for (var i = coins.length - 1; i >= 0; i--) {
		coins[i].update();
		if (coins[i].checkCollision(player)) {
			updateScore(10);
			coins.splice(i, 1);
		}
	}
	// Check enemy collisions
	for (var i = enemies.length - 1; i >= 0; i--) {
		enemies[i].update();
		if (enemies[i].checkCollision(player)) {
			updateScore(50);
			enemies.splice(i, 1);
		}
	}
	// Check if all coins collected
	if (coins.length === 0 && player.isAlive) {
		LK.setTimeout(function () {
			LK.showYouWin();
		}, 1000);
	}
};