/**** 
* 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
	});
	// Pulse animation
	self.pulseAnimation = function () {
		tween(coinGraphics, {
			scaleX: 1.2,
			scaleY: 1.2
		}, {
			duration: 500,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				tween(coinGraphics, {
					scaleX: 1,
					scaleY: 1
				}, {
					duration: 500,
					easing: tween.easeInOut,
					onFinish: self.pulseAnimation
				});
			}
		});
	};
	self.pulseAnimation();
	self.collect = function () {
		LK.getSound('coinCollect').play();
		// Animation for collection
		tween(self, {
			alpha: 0,
			scaleX: 1.5,
			scaleY: 1.5
		}, {
			duration: 300,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				self.destroy();
			}
		});
	};
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Player properties
	self.direction = "right"; // Initial direction
	self.speed = 5; // Initial speed
	self.alive = true;
	self.update = function () {
		if (!self.alive) {
			return;
		}
		// Move the player based on current direction
		switch (self.direction) {
			case "up":
				self.y -= self.speed;
				break;
			case "down":
				self.y += self.speed;
				break;
			case "left":
				self.x -= self.speed;
				break;
			case "right":
				self.x += self.speed;
				break;
		}
		// Check if player is out of bounds
		if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
			self.die();
		}
	};
	// Change direction by 90 degrees
	self.turn = function () {
		if (!self.alive) {
			return;
		}
		LK.getSound('turn').play();
		// Determine new direction (90-degree turn)
		switch (self.direction) {
			case "up":
			case "down":
				self.direction = Math.random() < 0.5 ? "left" : "right";
				break;
			case "left":
			case "right":
				self.direction = Math.random() < 0.5 ? "up" : "down";
				break;
		}
	};
	self.die = function () {
		if (!self.alive) {
			return;
		}
		self.alive = false;
		LK.getSound('death').play();
		LK.effects.flashObject(self, 0xff0000, 500);
		LK.setTimeout(function () {
			LK.showGameOver();
		}, 1000);
	};
	return self;
});
var Wall = Container.expand(function () {
	var self = Container.call(this);
	var wallGraphics = self.attachAsset('wall', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xecf0f1
});
/**** 
* Game Code
****/ 
// Game variables
var MazeGenerator = function MazeGenerator() {
	// Generate a maze configuration for the current level
	this.generateMaze = function (level) {
		var walls = [];
		var coins = [];
		// Base the number of walls and coins on the level
		var numWalls = Math.min(5 + level * 2, 30);
		var numCoins = Math.min(3 + level, 15);
		// Create a safe zone at the start
		var safeZoneRadius = 150;
		// Generate walls avoiding the safe zone
		for (var i = 0; i < numWalls; i++) {
			var x, y;
			var validPosition = false;
			// Try to find a valid position for the wall
			var attempts = 0;
			while (!validPosition && attempts < 50) {
				x = 100 + Math.random() * (2048 - 200);
				y = 100 + Math.random() * (2732 - 200);
				// Check if wall is away from the safe zone
				var distFromStart = Math.sqrt(Math.pow(x - player.x, 2) + Math.pow(y - player.y, 2));
				// Wall must be away from the safe zone
				validPosition = distFromStart > safeZoneRadius;
				// Check it's not too close to other walls
				if (validPosition) {
					for (var j = 0; j < walls.length; j++) {
						var existingWall = walls[j];
						var distBetweenWalls = Math.sqrt(Math.pow(x - existingWall.x, 2) + Math.pow(y - existingWall.y, 2));
						if (distBetweenWalls < 100) {
							validPosition = false;
							break;
						}
					}
				}
				attempts++;
			}
			if (validPosition) {
				var wall = new Wall();
				wall.x = x;
				wall.y = y;
				walls.push(wall);
			}
		}
		// Generate coins avoiding walls and the safe zone
		for (var i = 0; i < numCoins; i++) {
			var x, y;
			var validPosition = false;
			var attempts = 0;
			while (!validPosition && attempts < 50) {
				x = 100 + Math.random() * (2048 - 200);
				y = 100 + Math.random() * (2732 - 200);
				// Check if coin is away from the safe zone
				var distFromStart = Math.sqrt(Math.pow(x - player.x, 2) + Math.pow(y - player.y, 2));
				validPosition = distFromStart > safeZoneRadius;
				// Check it's not too close to walls
				if (validPosition) {
					for (var j = 0; j < walls.length; j++) {
						var wall = walls[j];
						var distFromWall = Math.sqrt(Math.pow(x - wall.x, 2) + Math.pow(y - wall.y, 2));
						if (distFromWall < 75) {
							validPosition = false;
							break;
						}
					}
				}
				// Check it's not too close to other coins
				if (validPosition) {
					for (var j = 0; j < coins.length; j++) {
						var existingCoin = coins[j];
						var distFromCoin = Math.sqrt(Math.pow(x - existingCoin.x, 2) + Math.pow(y - existingCoin.y, 2));
						if (distFromCoin < 100) {
							validPosition = false;
							break;
						}
					}
				}
				attempts++;
			}
			if (validPosition) {
				var coin = new Coin();
				coin.x = x;
				coin.y = y;
				coins.push(coin);
			}
		}
		return {
			walls: walls,
			coins: coins
		};
	};
};
var player;
var walls = [];
var coins = [];
var level = 1;
var mazeGenerator = new MazeGenerator();
var levelUpThreshold = 5; // Coins needed to level up
var coinsCollected = 0;
var speedIncreasePerLevel = 1;
// Setup UI
var scoreTxt = new Text2('0', {
	size: 80,
	fill: 0x2C3E50
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var levelTxt = new Text2('Level 1', {
	size: 60,
	fill: 0x2C3E50
});
levelTxt.anchor.set(0.5, 0);
levelTxt.y = 90;
LK.gui.top.addChild(levelTxt);
// Instructions text
var instructionsTxt = new Text2('Tap to change direction', {
	size: 50,
	fill: 0x7F8C8D
});
instructionsTxt.anchor.set(0.5, 0);
instructionsTxt.y = 170;
LK.gui.top.addChild(instructionsTxt);
// Hide instructions after a few seconds
LK.setTimeout(function () {
	tween(instructionsTxt, {
		alpha: 0
	}, {
		duration: 1000,
		easing: tween.easeOut
	});
}, 5000);
// Initialize player
function initializePlayer() {
	player = new Player();
	player.x = 2048 / 2;
	player.y = 2732 / 2;
	game.addChild(player);
}
// Load level
function loadLevel(level) {
	// Clear previous level elements
	clearLevel();
	// Update level text
	levelTxt.setText('Level ' + level);
	// Increase player speed with each level
	player.speed = 5 + (level - 1) * speedIncreasePerLevel;
	// Generate maze elements
	var maze = mazeGenerator.generateMaze(level);
	// Add walls
	for (var i = 0; i < maze.walls.length; i++) {
		var wall = maze.walls[i];
		game.addChild(wall);
		walls.push(wall);
	}
	// Add coins
	for (var i = 0; i < maze.coins.length; i++) {
		var coin = maze.coins[i];
		game.addChild(coin);
		coins.push(coin);
	}
}
// Clear level elements
function clearLevel() {
	// Remove all walls
	for (var i = 0; i < walls.length; i++) {
		walls[i].destroy();
	}
	walls = [];
	// Remove all coins
	for (var i = 0; i < coins.length; i++) {
		coins[i].destroy();
	}
	coins = [];
}
// Start the game
function startGame() {
	// Initialize player
	initializePlayer();
	// Load first level
	loadLevel(level);
	// Play background music
	LK.playMusic('bgMusic', {
		fade: {
			start: 0,
			end: 0.5,
			duration: 1000
		}
	});
}
// Handle game tap
game.down = function (x, y, obj) {
	// Change player direction on tap
	if (player && player.alive) {
		player.turn();
	}
};
// Main game update loop
game.update = function () {
	if (!player || !player.alive) {
		return;
	}
	// Check for coin collection
	for (var i = coins.length - 1; i >= 0; i--) {
		var coin = coins[i];
		if (player.intersects(coin)) {
			// Collect coin
			coin.collect();
			coins.splice(i, 1);
			// Update score
			coinsCollected++;
			LK.setScore(coinsCollected);
			scoreTxt.setText(coinsCollected);
			// Check for level up
			if (coinsCollected % levelUpThreshold === 0) {
				level++;
				// Flash screen green for level up
				LK.effects.flashScreen(0x2ecc71, 500);
				// Load next level
				loadLevel(level);
			}
		}
	}
	// Check for wall collisions
	for (var i = 0; i < walls.length; i++) {
		var wall = walls[i];
		if (player.intersects(wall)) {
			player.die();
			break;
		}
	}
	// Check if all coins are collected
	if (coins.length === 0) {
		level++;
		// Flash screen
		LK.effects.flashScreen(0x2ecc71, 500);
		// Load next level
		loadLevel(level);
	}
};
// Start the game
startGame(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,378 @@
-/****
+/**** 
+* 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
+	});
+	// Pulse animation
+	self.pulseAnimation = function () {
+		tween(coinGraphics, {
+			scaleX: 1.2,
+			scaleY: 1.2
+		}, {
+			duration: 500,
+			easing: tween.easeInOut,
+			onFinish: function onFinish() {
+				tween(coinGraphics, {
+					scaleX: 1,
+					scaleY: 1
+				}, {
+					duration: 500,
+					easing: tween.easeInOut,
+					onFinish: self.pulseAnimation
+				});
+			}
+		});
+	};
+	self.pulseAnimation();
+	self.collect = function () {
+		LK.getSound('coinCollect').play();
+		// Animation for collection
+		tween(self, {
+			alpha: 0,
+			scaleX: 1.5,
+			scaleY: 1.5
+		}, {
+			duration: 300,
+			easing: tween.easeOut,
+			onFinish: function onFinish() {
+				self.destroy();
+			}
+		});
+	};
+	return self;
+});
+var Player = Container.expand(function () {
+	var self = Container.call(this);
+	var playerGraphics = self.attachAsset('player', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	// Player properties
+	self.direction = "right"; // Initial direction
+	self.speed = 5; // Initial speed
+	self.alive = true;
+	self.update = function () {
+		if (!self.alive) {
+			return;
+		}
+		// Move the player based on current direction
+		switch (self.direction) {
+			case "up":
+				self.y -= self.speed;
+				break;
+			case "down":
+				self.y += self.speed;
+				break;
+			case "left":
+				self.x -= self.speed;
+				break;
+			case "right":
+				self.x += self.speed;
+				break;
+		}
+		// Check if player is out of bounds
+		if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
+			self.die();
+		}
+	};
+	// Change direction by 90 degrees
+	self.turn = function () {
+		if (!self.alive) {
+			return;
+		}
+		LK.getSound('turn').play();
+		// Determine new direction (90-degree turn)
+		switch (self.direction) {
+			case "up":
+			case "down":
+				self.direction = Math.random() < 0.5 ? "left" : "right";
+				break;
+			case "left":
+			case "right":
+				self.direction = Math.random() < 0.5 ? "up" : "down";
+				break;
+		}
+	};
+	self.die = function () {
+		if (!self.alive) {
+			return;
+		}
+		self.alive = false;
+		LK.getSound('death').play();
+		LK.effects.flashObject(self, 0xff0000, 500);
+		LK.setTimeout(function () {
+			LK.showGameOver();
+		}, 1000);
+	};
+	return self;
+});
+var Wall = Container.expand(function () {
+	var self = Container.call(this);
+	var wallGraphics = self.attachAsset('wall', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	return self;
+});
+
+/**** 
 * Initialize Game
-****/
+****/ 
 var game = new LK.Game({
-	backgroundColor: 0x000000
-});
\ No newline at end of file
+	backgroundColor: 0xecf0f1
+});
+
+/**** 
+* Game Code
+****/ 
+// Game variables
+var MazeGenerator = function MazeGenerator() {
+	// Generate a maze configuration for the current level
+	this.generateMaze = function (level) {
+		var walls = [];
+		var coins = [];
+		// Base the number of walls and coins on the level
+		var numWalls = Math.min(5 + level * 2, 30);
+		var numCoins = Math.min(3 + level, 15);
+		// Create a safe zone at the start
+		var safeZoneRadius = 150;
+		// Generate walls avoiding the safe zone
+		for (var i = 0; i < numWalls; i++) {
+			var x, y;
+			var validPosition = false;
+			// Try to find a valid position for the wall
+			var attempts = 0;
+			while (!validPosition && attempts < 50) {
+				x = 100 + Math.random() * (2048 - 200);
+				y = 100 + Math.random() * (2732 - 200);
+				// Check if wall is away from the safe zone
+				var distFromStart = Math.sqrt(Math.pow(x - player.x, 2) + Math.pow(y - player.y, 2));
+				// Wall must be away from the safe zone
+				validPosition = distFromStart > safeZoneRadius;
+				// Check it's not too close to other walls
+				if (validPosition) {
+					for (var j = 0; j < walls.length; j++) {
+						var existingWall = walls[j];
+						var distBetweenWalls = Math.sqrt(Math.pow(x - existingWall.x, 2) + Math.pow(y - existingWall.y, 2));
+						if (distBetweenWalls < 100) {
+							validPosition = false;
+							break;
+						}
+					}
+				}
+				attempts++;
+			}
+			if (validPosition) {
+				var wall = new Wall();
+				wall.x = x;
+				wall.y = y;
+				walls.push(wall);
+			}
+		}
+		// Generate coins avoiding walls and the safe zone
+		for (var i = 0; i < numCoins; i++) {
+			var x, y;
+			var validPosition = false;
+			var attempts = 0;
+			while (!validPosition && attempts < 50) {
+				x = 100 + Math.random() * (2048 - 200);
+				y = 100 + Math.random() * (2732 - 200);
+				// Check if coin is away from the safe zone
+				var distFromStart = Math.sqrt(Math.pow(x - player.x, 2) + Math.pow(y - player.y, 2));
+				validPosition = distFromStart > safeZoneRadius;
+				// Check it's not too close to walls
+				if (validPosition) {
+					for (var j = 0; j < walls.length; j++) {
+						var wall = walls[j];
+						var distFromWall = Math.sqrt(Math.pow(x - wall.x, 2) + Math.pow(y - wall.y, 2));
+						if (distFromWall < 75) {
+							validPosition = false;
+							break;
+						}
+					}
+				}
+				// Check it's not too close to other coins
+				if (validPosition) {
+					for (var j = 0; j < coins.length; j++) {
+						var existingCoin = coins[j];
+						var distFromCoin = Math.sqrt(Math.pow(x - existingCoin.x, 2) + Math.pow(y - existingCoin.y, 2));
+						if (distFromCoin < 100) {
+							validPosition = false;
+							break;
+						}
+					}
+				}
+				attempts++;
+			}
+			if (validPosition) {
+				var coin = new Coin();
+				coin.x = x;
+				coin.y = y;
+				coins.push(coin);
+			}
+		}
+		return {
+			walls: walls,
+			coins: coins
+		};
+	};
+};
+var player;
+var walls = [];
+var coins = [];
+var level = 1;
+var mazeGenerator = new MazeGenerator();
+var levelUpThreshold = 5; // Coins needed to level up
+var coinsCollected = 0;
+var speedIncreasePerLevel = 1;
+// Setup UI
+var scoreTxt = new Text2('0', {
+	size: 80,
+	fill: 0x2C3E50
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var levelTxt = new Text2('Level 1', {
+	size: 60,
+	fill: 0x2C3E50
+});
+levelTxt.anchor.set(0.5, 0);
+levelTxt.y = 90;
+LK.gui.top.addChild(levelTxt);
+// Instructions text
+var instructionsTxt = new Text2('Tap to change direction', {
+	size: 50,
+	fill: 0x7F8C8D
+});
+instructionsTxt.anchor.set(0.5, 0);
+instructionsTxt.y = 170;
+LK.gui.top.addChild(instructionsTxt);
+// Hide instructions after a few seconds
+LK.setTimeout(function () {
+	tween(instructionsTxt, {
+		alpha: 0
+	}, {
+		duration: 1000,
+		easing: tween.easeOut
+	});
+}, 5000);
+// Initialize player
+function initializePlayer() {
+	player = new Player();
+	player.x = 2048 / 2;
+	player.y = 2732 / 2;
+	game.addChild(player);
+}
+// Load level
+function loadLevel(level) {
+	// Clear previous level elements
+	clearLevel();
+	// Update level text
+	levelTxt.setText('Level ' + level);
+	// Increase player speed with each level
+	player.speed = 5 + (level - 1) * speedIncreasePerLevel;
+	// Generate maze elements
+	var maze = mazeGenerator.generateMaze(level);
+	// Add walls
+	for (var i = 0; i < maze.walls.length; i++) {
+		var wall = maze.walls[i];
+		game.addChild(wall);
+		walls.push(wall);
+	}
+	// Add coins
+	for (var i = 0; i < maze.coins.length; i++) {
+		var coin = maze.coins[i];
+		game.addChild(coin);
+		coins.push(coin);
+	}
+}
+// Clear level elements
+function clearLevel() {
+	// Remove all walls
+	for (var i = 0; i < walls.length; i++) {
+		walls[i].destroy();
+	}
+	walls = [];
+	// Remove all coins
+	for (var i = 0; i < coins.length; i++) {
+		coins[i].destroy();
+	}
+	coins = [];
+}
+// Start the game
+function startGame() {
+	// Initialize player
+	initializePlayer();
+	// Load first level
+	loadLevel(level);
+	// Play background music
+	LK.playMusic('bgMusic', {
+		fade: {
+			start: 0,
+			end: 0.5,
+			duration: 1000
+		}
+	});
+}
+// Handle game tap
+game.down = function (x, y, obj) {
+	// Change player direction on tap
+	if (player && player.alive) {
+		player.turn();
+	}
+};
+// Main game update loop
+game.update = function () {
+	if (!player || !player.alive) {
+		return;
+	}
+	// Check for coin collection
+	for (var i = coins.length - 1; i >= 0; i--) {
+		var coin = coins[i];
+		if (player.intersects(coin)) {
+			// Collect coin
+			coin.collect();
+			coins.splice(i, 1);
+			// Update score
+			coinsCollected++;
+			LK.setScore(coinsCollected);
+			scoreTxt.setText(coinsCollected);
+			// Check for level up
+			if (coinsCollected % levelUpThreshold === 0) {
+				level++;
+				// Flash screen green for level up
+				LK.effects.flashScreen(0x2ecc71, 500);
+				// Load next level
+				loadLevel(level);
+			}
+		}
+	}
+	// Check for wall collisions
+	for (var i = 0; i < walls.length; i++) {
+		var wall = walls[i];
+		if (player.intersects(wall)) {
+			player.die();
+			break;
+		}
+	}
+	// Check if all coins are collected
+	if (coins.length === 0) {
+		level++;
+		// Flash screen
+		LK.effects.flashScreen(0x2ecc71, 500);
+		// Load next level
+		loadLevel(level);
+	}
+};
+// Start the game
+startGame();
\ No newline at end of file