/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Boss = Container.expand(function () {
	var self = Container.call(this);
	var bossGraphics = self.attachAsset('boss', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.speed = -4;
	self.health = 10;
	self.defeated = false;
	self.attackTimer = 0;
	self.takeDamage = function () {
		self.health--;
		LK.effects.flashObject(self, 0xff0000, 300);
		if (self.health <= 0) {
			self.defeated = true;
			LK.setScore(LK.getScore() + 100);
		}
	};
	self.update = function () {
		if (!self.defeated) {
			self.x += self.speed;
			self.attackTimer++;
			// Boss movement pattern
			if (self.attackTimer % 120 === 0) {
				self.y += Math.sin(self.attackTimer * 0.05) * 5;
			}
		}
	};
	return self;
});
var Coin = Container.expand(function () {
	var self = Container.call(this);
	var coinGraphics = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -8;
	self.collected = false;
	self.bobTimer = 0;
	self.collect = function () {
		if (!self.collected) {
			self.collected = true;
			LK.setScore(LK.getScore() + 5);
			LK.getSound('coin').play();
			self.alpha = 0;
		}
	};
	self.update = function () {
		self.x += self.speed;
		self.bobTimer++;
		coinGraphics.y = Math.sin(self.bobTimer * 0.2) * 10;
		coinGraphics.rotation += 0.1;
	};
	return self;
});
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.speed = -8;
	self.health = 1;
	self.defeated = false;
	self.takeDamage = function () {
		self.health--;
		if (self.health <= 0) {
			self.defeated = true;
			LK.effects.flashObject(self, 0xff0000, 200);
			LK.setScore(LK.getScore() + 10);
		}
	};
	self.update = function () {
		if (!self.defeated) {
			self.x += self.speed;
		}
	};
	return self;
});
var Ground = Container.expand(function () {
	var self = Container.call(this);
	var groundGraphics = self.attachAsset('ground', {
		anchorX: 0,
		anchorY: 0
	});
	self.speed = -8;
	self.update = function () {
		self.x += self.speed;
	};
	return self;
});
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.isJumping = false;
	self.jumpSpeed = 0;
	self.groundY = 2500;
	self.health = 3;
	self.attackCooldown = 0;
	self.powerUpTimer = 0;
	self.hasPowerUp = false;
	self.jump = function () {
		if (!self.isJumping) {
			self.isJumping = true;
			self.jumpSpeed = -25;
			LK.getSound('jump').play();
		}
	};
	self.attack = function () {
		if (self.attackCooldown <= 0) {
			self.attackCooldown = 20;
			LK.getSound('attack').play();
			// Flash hero blue for attack
			LK.effects.flashObject(self, 0x00ffff, 300);
			return true;
		}
		return false;
	};
	self.takeDamage = function () {
		if (self.powerUpTimer > 0) return; // Invulnerable during power-up
		self.health--;
		LK.effects.flashObject(self, 0xff0000, 500);
		LK.getSound('hit').play();
		if (self.health <= 0) {
			LK.showGameOver();
		}
	};
	self.collectPowerUp = function () {
		self.hasPowerUp = true;
		self.powerUpTimer = 300; // 5 seconds at 60fps
		heroGraphics.tint = 0xffff00; // Yellow tint for power-up
		LK.getSound('powerup').play();
	};
	self.update = function () {
		if (self.attackCooldown > 0) {
			self.attackCooldown--;
		}
		if (self.powerUpTimer > 0) {
			self.powerUpTimer--;
			if (self.powerUpTimer <= 0) {
				self.hasPowerUp = false;
				heroGraphics.tint = 0xffffff; // Reset tint
			}
		}
		// Handle jumping physics
		if (self.isJumping) {
			self.jumpSpeed += 1.2; // Gravity
			self.y += self.jumpSpeed;
			if (self.y >= self.groundY) {
				self.y = self.groundY;
				self.isJumping = false;
				self.jumpSpeed = 0;
			}
		}
	};
	return self;
});
var Pit = Container.expand(function () {
	var self = Container.call(this);
	var pitGraphics = self.attachAsset('pit', {
		anchorX: 0,
		anchorY: 0
	});
	self.speed = -8;
	self.update = function () {
		self.x += self.speed;
	};
	return self;
});
var PowerUp = Container.expand(function () {
	var self = Container.call(this);
	var powerUpGraphics = self.attachAsset('powerup', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -8;
	self.collected = false;
	self.pulseTimer = 0;
	self.collect = function () {
		if (!self.collected) {
			self.collected = true;
			self.alpha = 0;
		}
	};
	self.update = function () {
		self.x += self.speed;
		self.pulseTimer++;
		var scale = 1 + Math.sin(self.pulseTimer * 0.3) * 0.3;
		powerUpGraphics.scaleX = scale;
		powerUpGraphics.scaleY = scale;
		powerUpGraphics.rotation += 0.15;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87ceeb
});
/**** 
* Game Code
****/ 
// Game variables
var hero;
var groundPieces = [];
var pits = [];
var enemies = [];
var bosses = [];
var coins = [];
var powerUps = [];
var gameSpeed = 8;
var spawnTimer = 0;
var levelDistance = 0;
var currentLevel = 1;
// Initialize hero
hero = game.addChild(new Hero());
hero.x = 300;
hero.y = hero.groundY;
// Create UI
var scoreTxt = new Text2('Score: 0', {
	size: 80,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreTxt);
var healthTxt = new Text2('Health: 3', {
	size: 80,
	fill: 0xFF0000
});
healthTxt.anchor.set(0, 0);
healthTxt.y = 100;
LK.gui.topRight.addChild(healthTxt);
var levelTxt = new Text2('Level: 1', {
	size: 80,
	fill: 0x00FF00
});
levelTxt.anchor.set(0, 0);
levelTxt.y = 200;
LK.gui.topRight.addChild(levelTxt);
// Initialize ground
function createGroundPiece(x) {
	var ground = game.addChild(new Ground());
	ground.x = x;
	ground.y = 2560;
	groundPieces.push(ground);
	return ground;
}
// Create initial ground
for (var i = 0; i < 15; i++) {
	createGroundPiece(i * 200);
}
function spawnPit(x) {
	var pit = game.addChild(new Pit());
	pit.x = x;
	pit.y = 2560;
	pits.push(pit);
}
function spawnEnemy(x) {
	var enemy = game.addChild(new Enemy());
	enemy.x = x;
	enemy.y = hero.groundY;
	enemies.push(enemy);
}
function spawnBoss(x) {
	var boss = game.addChild(new Boss());
	boss.x = x;
	boss.y = hero.groundY;
	bosses.push(boss);
}
function spawnCoin(x) {
	var coin = game.addChild(new Coin());
	coin.x = x;
	coin.y = hero.groundY - 150;
	coins.push(coin);
}
function spawnPowerUp(x) {
	var powerUp = game.addChild(new PowerUp());
	powerUp.x = x;
	powerUp.y = hero.groundY - 200;
	powerUps.push(powerUp);
}
// Game input handling
game.down = function (x, y, obj) {
	var heroPos = hero.getBounds();
	var tapPos = {
		x: x,
		y: y
	};
	// Check if tapping on or near an enemy to attack
	var attacked = false;
	for (var i = 0; i < enemies.length; i++) {
		var enemy = enemies[i];
		if (!enemy.defeated && enemy.x > hero.x - 100 && enemy.x < hero.x + 200) {
			if (hero.attack()) {
				enemy.takeDamage();
				attacked = true;
				break;
			}
		}
	}
	// Check boss attacks
	for (var i = 0; i < bosses.length; i++) {
		var boss = bosses[i];
		if (!boss.defeated && boss.x > hero.x - 150 && boss.x < hero.x + 300) {
			if (hero.attack()) {
				boss.takeDamage();
				attacked = true;
				break;
			}
		}
	}
	// If not attacking, jump
	if (!attacked) {
		hero.jump();
	}
};
game.update = function () {
	spawnTimer++;
	levelDistance += gameSpeed;
	// Update UI
	scoreTxt.setText('Score: ' + LK.getScore());
	healthTxt.setText('Health: ' + hero.health);
	levelTxt.setText('Level: ' + currentLevel);
	// Level progression
	if (levelDistance > currentLevel * 3000) {
		currentLevel++;
		gameSpeed += 1;
	}
	// Spawn objects
	if (spawnTimer % 60 === 0) {
		var spawnX = 2200;
		var rand = Math.random();
		if (rand < 0.1) {
			spawnPit(spawnX);
		} else if (rand < 0.25) {
			spawnEnemy(spawnX);
		} else if (rand < 0.35) {
			spawnCoin(spawnX);
		} else if (rand < 0.4) {
			spawnPowerUp(spawnX);
		}
		// Boss spawn every 1000 points
		if (LK.getScore() > 0 && LK.getScore() % 1000 === 0 && spawnTimer % 600 === 0) {
			spawnBoss(spawnX + 200);
		}
	}
	// Spawn new ground pieces
	if (spawnTimer % 30 === 0) {
		var lastGround = groundPieces[groundPieces.length - 1];
		if (lastGround && lastGround.x < 2500) {
			createGroundPiece(lastGround.x + 200);
		}
	}
	// Clean up off-screen ground pieces
	for (var i = groundPieces.length - 1; i >= 0; i--) {
		var ground = groundPieces[i];
		if (ground.x < -300) {
			ground.destroy();
			groundPieces.splice(i, 1);
		}
	}
	// Handle pits
	for (var i = pits.length - 1; i >= 0; i--) {
		var pit = pits[i];
		// Check if hero falls into pit
		if (hero.intersects(pit) && hero.y >= pit.y - 30) {
			hero.takeDamage();
		}
		// Clean up off-screen pits
		if (pit.x < -200) {
			pit.destroy();
			pits.splice(i, 1);
		}
	}
	// Handle enemies
	for (var i = enemies.length - 1; i >= 0; i--) {
		var enemy = enemies[i];
		// Check collision with hero
		if (!enemy.defeated && hero.intersects(enemy)) {
			hero.takeDamage();
			enemy.defeated = true;
		}
		// Clean up off-screen or defeated enemies
		if (enemy.x < -100 || enemy.defeated) {
			if (enemy.defeated && enemy.alpha > 0) {
				tween(enemy, {
					alpha: 0
				}, {
					duration: 500,
					onFinish: function onFinish() {
						enemy.destroy();
					}
				});
			} else if (enemy.x < -100) {
				enemy.destroy();
			}
			enemies.splice(i, 1);
		}
	}
	// Handle bosses
	for (var i = bosses.length - 1; i >= 0; i--) {
		var boss = bosses[i];
		// Check collision with hero
		if (!boss.defeated && hero.intersects(boss)) {
			hero.takeDamage();
		}
		// Clean up off-screen or defeated bosses
		if (boss.x < -200 || boss.defeated) {
			if (boss.defeated && boss.alpha > 0) {
				tween(boss, {
					alpha: 0
				}, {
					duration: 1000,
					onFinish: function onFinish() {
						boss.destroy();
					}
				});
			} else if (boss.x < -200) {
				boss.destroy();
			}
			bosses.splice(i, 1);
		}
	}
	// Handle coins
	for (var i = coins.length - 1; i >= 0; i--) {
		var coin = coins[i];
		// Check collection
		if (!coin.collected && hero.intersects(coin)) {
			coin.collect();
		}
		// Clean up off-screen or collected coins
		if (coin.x < -100 || coin.collected) {
			coin.destroy();
			coins.splice(i, 1);
		}
	}
	// Handle power-ups
	for (var i = powerUps.length - 1; i >= 0; i--) {
		var powerUp = powerUps[i];
		// Check collection
		if (!powerUp.collected && hero.intersects(powerUp)) {
			powerUp.collect();
			hero.collectPowerUp();
		}
		// Clean up off-screen or collected power-ups
		if (powerUp.x < -100 || powerUp.collected) {
			powerUp.destroy();
			powerUps.splice(i, 1);
		}
	}
	// Win condition - reaching high score
	if (LK.getScore() >= 5000) {
		LK.showYouWin();
	}
};
// Start background music
LK.playMusic('bgmusic'); /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Boss = Container.expand(function () {
	var self = Container.call(this);
	var bossGraphics = self.attachAsset('boss', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.speed = -4;
	self.health = 10;
	self.defeated = false;
	self.attackTimer = 0;
	self.takeDamage = function () {
		self.health--;
		LK.effects.flashObject(self, 0xff0000, 300);
		if (self.health <= 0) {
			self.defeated = true;
			LK.setScore(LK.getScore() + 100);
		}
	};
	self.update = function () {
		if (!self.defeated) {
			self.x += self.speed;
			self.attackTimer++;
			// Boss movement pattern
			if (self.attackTimer % 120 === 0) {
				self.y += Math.sin(self.attackTimer * 0.05) * 5;
			}
		}
	};
	return self;
});
var Coin = Container.expand(function () {
	var self = Container.call(this);
	var coinGraphics = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -8;
	self.collected = false;
	self.bobTimer = 0;
	self.collect = function () {
		if (!self.collected) {
			self.collected = true;
			LK.setScore(LK.getScore() + 5);
			LK.getSound('coin').play();
			self.alpha = 0;
		}
	};
	self.update = function () {
		self.x += self.speed;
		self.bobTimer++;
		coinGraphics.y = Math.sin(self.bobTimer * 0.2) * 10;
		coinGraphics.rotation += 0.1;
	};
	return self;
});
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.speed = -8;
	self.health = 1;
	self.defeated = false;
	self.takeDamage = function () {
		self.health--;
		if (self.health <= 0) {
			self.defeated = true;
			LK.effects.flashObject(self, 0xff0000, 200);
			LK.setScore(LK.getScore() + 10);
		}
	};
	self.update = function () {
		if (!self.defeated) {
			self.x += self.speed;
		}
	};
	return self;
});
var Ground = Container.expand(function () {
	var self = Container.call(this);
	var groundGraphics = self.attachAsset('ground', {
		anchorX: 0,
		anchorY: 0
	});
	self.speed = -8;
	self.update = function () {
		self.x += self.speed;
	};
	return self;
});
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.isJumping = false;
	self.jumpSpeed = 0;
	self.groundY = 2500;
	self.health = 3;
	self.attackCooldown = 0;
	self.powerUpTimer = 0;
	self.hasPowerUp = false;
	self.jump = function () {
		if (!self.isJumping) {
			self.isJumping = true;
			self.jumpSpeed = -25;
			LK.getSound('jump').play();
		}
	};
	self.attack = function () {
		if (self.attackCooldown <= 0) {
			self.attackCooldown = 20;
			LK.getSound('attack').play();
			// Flash hero blue for attack
			LK.effects.flashObject(self, 0x00ffff, 300);
			return true;
		}
		return false;
	};
	self.takeDamage = function () {
		if (self.powerUpTimer > 0) return; // Invulnerable during power-up
		self.health--;
		LK.effects.flashObject(self, 0xff0000, 500);
		LK.getSound('hit').play();
		if (self.health <= 0) {
			LK.showGameOver();
		}
	};
	self.collectPowerUp = function () {
		self.hasPowerUp = true;
		self.powerUpTimer = 300; // 5 seconds at 60fps
		heroGraphics.tint = 0xffff00; // Yellow tint for power-up
		LK.getSound('powerup').play();
	};
	self.update = function () {
		if (self.attackCooldown > 0) {
			self.attackCooldown--;
		}
		if (self.powerUpTimer > 0) {
			self.powerUpTimer--;
			if (self.powerUpTimer <= 0) {
				self.hasPowerUp = false;
				heroGraphics.tint = 0xffffff; // Reset tint
			}
		}
		// Handle jumping physics
		if (self.isJumping) {
			self.jumpSpeed += 1.2; // Gravity
			self.y += self.jumpSpeed;
			if (self.y >= self.groundY) {
				self.y = self.groundY;
				self.isJumping = false;
				self.jumpSpeed = 0;
			}
		}
	};
	return self;
});
var Pit = Container.expand(function () {
	var self = Container.call(this);
	var pitGraphics = self.attachAsset('pit', {
		anchorX: 0,
		anchorY: 0
	});
	self.speed = -8;
	self.update = function () {
		self.x += self.speed;
	};
	return self;
});
var PowerUp = Container.expand(function () {
	var self = Container.call(this);
	var powerUpGraphics = self.attachAsset('powerup', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -8;
	self.collected = false;
	self.pulseTimer = 0;
	self.collect = function () {
		if (!self.collected) {
			self.collected = true;
			self.alpha = 0;
		}
	};
	self.update = function () {
		self.x += self.speed;
		self.pulseTimer++;
		var scale = 1 + Math.sin(self.pulseTimer * 0.3) * 0.3;
		powerUpGraphics.scaleX = scale;
		powerUpGraphics.scaleY = scale;
		powerUpGraphics.rotation += 0.15;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87ceeb
});
/**** 
* Game Code
****/ 
// Game variables
var hero;
var groundPieces = [];
var pits = [];
var enemies = [];
var bosses = [];
var coins = [];
var powerUps = [];
var gameSpeed = 8;
var spawnTimer = 0;
var levelDistance = 0;
var currentLevel = 1;
// Initialize hero
hero = game.addChild(new Hero());
hero.x = 300;
hero.y = hero.groundY;
// Create UI
var scoreTxt = new Text2('Score: 0', {
	size: 80,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreTxt);
var healthTxt = new Text2('Health: 3', {
	size: 80,
	fill: 0xFF0000
});
healthTxt.anchor.set(0, 0);
healthTxt.y = 100;
LK.gui.topRight.addChild(healthTxt);
var levelTxt = new Text2('Level: 1', {
	size: 80,
	fill: 0x00FF00
});
levelTxt.anchor.set(0, 0);
levelTxt.y = 200;
LK.gui.topRight.addChild(levelTxt);
// Initialize ground
function createGroundPiece(x) {
	var ground = game.addChild(new Ground());
	ground.x = x;
	ground.y = 2560;
	groundPieces.push(ground);
	return ground;
}
// Create initial ground
for (var i = 0; i < 15; i++) {
	createGroundPiece(i * 200);
}
function spawnPit(x) {
	var pit = game.addChild(new Pit());
	pit.x = x;
	pit.y = 2560;
	pits.push(pit);
}
function spawnEnemy(x) {
	var enemy = game.addChild(new Enemy());
	enemy.x = x;
	enemy.y = hero.groundY;
	enemies.push(enemy);
}
function spawnBoss(x) {
	var boss = game.addChild(new Boss());
	boss.x = x;
	boss.y = hero.groundY;
	bosses.push(boss);
}
function spawnCoin(x) {
	var coin = game.addChild(new Coin());
	coin.x = x;
	coin.y = hero.groundY - 150;
	coins.push(coin);
}
function spawnPowerUp(x) {
	var powerUp = game.addChild(new PowerUp());
	powerUp.x = x;
	powerUp.y = hero.groundY - 200;
	powerUps.push(powerUp);
}
// Game input handling
game.down = function (x, y, obj) {
	var heroPos = hero.getBounds();
	var tapPos = {
		x: x,
		y: y
	};
	// Check if tapping on or near an enemy to attack
	var attacked = false;
	for (var i = 0; i < enemies.length; i++) {
		var enemy = enemies[i];
		if (!enemy.defeated && enemy.x > hero.x - 100 && enemy.x < hero.x + 200) {
			if (hero.attack()) {
				enemy.takeDamage();
				attacked = true;
				break;
			}
		}
	}
	// Check boss attacks
	for (var i = 0; i < bosses.length; i++) {
		var boss = bosses[i];
		if (!boss.defeated && boss.x > hero.x - 150 && boss.x < hero.x + 300) {
			if (hero.attack()) {
				boss.takeDamage();
				attacked = true;
				break;
			}
		}
	}
	// If not attacking, jump
	if (!attacked) {
		hero.jump();
	}
};
game.update = function () {
	spawnTimer++;
	levelDistance += gameSpeed;
	// Update UI
	scoreTxt.setText('Score: ' + LK.getScore());
	healthTxt.setText('Health: ' + hero.health);
	levelTxt.setText('Level: ' + currentLevel);
	// Level progression
	if (levelDistance > currentLevel * 3000) {
		currentLevel++;
		gameSpeed += 1;
	}
	// Spawn objects
	if (spawnTimer % 60 === 0) {
		var spawnX = 2200;
		var rand = Math.random();
		if (rand < 0.1) {
			spawnPit(spawnX);
		} else if (rand < 0.25) {
			spawnEnemy(spawnX);
		} else if (rand < 0.35) {
			spawnCoin(spawnX);
		} else if (rand < 0.4) {
			spawnPowerUp(spawnX);
		}
		// Boss spawn every 1000 points
		if (LK.getScore() > 0 && LK.getScore() % 1000 === 0 && spawnTimer % 600 === 0) {
			spawnBoss(spawnX + 200);
		}
	}
	// Spawn new ground pieces
	if (spawnTimer % 30 === 0) {
		var lastGround = groundPieces[groundPieces.length - 1];
		if (lastGround && lastGround.x < 2500) {
			createGroundPiece(lastGround.x + 200);
		}
	}
	// Clean up off-screen ground pieces
	for (var i = groundPieces.length - 1; i >= 0; i--) {
		var ground = groundPieces[i];
		if (ground.x < -300) {
			ground.destroy();
			groundPieces.splice(i, 1);
		}
	}
	// Handle pits
	for (var i = pits.length - 1; i >= 0; i--) {
		var pit = pits[i];
		// Check if hero falls into pit
		if (hero.intersects(pit) && hero.y >= pit.y - 30) {
			hero.takeDamage();
		}
		// Clean up off-screen pits
		if (pit.x < -200) {
			pit.destroy();
			pits.splice(i, 1);
		}
	}
	// Handle enemies
	for (var i = enemies.length - 1; i >= 0; i--) {
		var enemy = enemies[i];
		// Check collision with hero
		if (!enemy.defeated && hero.intersects(enemy)) {
			hero.takeDamage();
			enemy.defeated = true;
		}
		// Clean up off-screen or defeated enemies
		if (enemy.x < -100 || enemy.defeated) {
			if (enemy.defeated && enemy.alpha > 0) {
				tween(enemy, {
					alpha: 0
				}, {
					duration: 500,
					onFinish: function onFinish() {
						enemy.destroy();
					}
				});
			} else if (enemy.x < -100) {
				enemy.destroy();
			}
			enemies.splice(i, 1);
		}
	}
	// Handle bosses
	for (var i = bosses.length - 1; i >= 0; i--) {
		var boss = bosses[i];
		// Check collision with hero
		if (!boss.defeated && hero.intersects(boss)) {
			hero.takeDamage();
		}
		// Clean up off-screen or defeated bosses
		if (boss.x < -200 || boss.defeated) {
			if (boss.defeated && boss.alpha > 0) {
				tween(boss, {
					alpha: 0
				}, {
					duration: 1000,
					onFinish: function onFinish() {
						boss.destroy();
					}
				});
			} else if (boss.x < -200) {
				boss.destroy();
			}
			bosses.splice(i, 1);
		}
	}
	// Handle coins
	for (var i = coins.length - 1; i >= 0; i--) {
		var coin = coins[i];
		// Check collection
		if (!coin.collected && hero.intersects(coin)) {
			coin.collect();
		}
		// Clean up off-screen or collected coins
		if (coin.x < -100 || coin.collected) {
			coin.destroy();
			coins.splice(i, 1);
		}
	}
	// Handle power-ups
	for (var i = powerUps.length - 1; i >= 0; i--) {
		var powerUp = powerUps[i];
		// Check collection
		if (!powerUp.collected && hero.intersects(powerUp)) {
			powerUp.collect();
			hero.collectPowerUp();
		}
		// Clean up off-screen or collected power-ups
		if (powerUp.x < -100 || powerUp.collected) {
			powerUp.destroy();
			powerUps.splice(i, 1);
		}
	}
	// Win condition - reaching high score
	if (LK.getScore() >= 5000) {
		LK.showYouWin();
	}
};
// Start background music
LK.playMusic('bgmusic');