User prompt
sağa üzt köşede BetlSrc yazsın
User prompt
health yazısı biraz daha sağa doğru olsun
User prompt
öldükten sonra ilk başladığımız çubukta spawn olsun
User prompt
health bölümünde 3 tane kalp resmi olsun
User prompt
karakter öldüğünde tekrar çubuğun üzerinde spawn olsun
User prompt
yukarıda gösteerilen 3 tane kalp olsun ve her kırmızıya değdiğinde 1 can gitsin
User prompt
biraz dah yükseğe zıplasın
User prompt
zıplama tuşu çalışsın
User prompt
zıplama tuşu çalışsın
User prompt
zıplama ve yana gitme tuşlarını yan yana yap
User prompt
karakter çubuğun üzerinden spawnlansın
User prompt
start above the character bar
User prompt
start above the chracter bar
Code edit (1 edits merged)
Please save this source code
User prompt
Super Jump Adventure
Initial prompt
ı have a mario game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Button = Container.expand(function () { var self = Container.call(this); // Create button var buttonShape = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 100 }); // Text for button var buttonText = new Text2('', { size: 50, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); // Setup button self.setup = function (text, color) { buttonText.setText(text); buttonShape.tint = color || 0x444444; }; // Event handlers self.down = function (x, y, obj) { buttonShape.alpha = 0.7; if (self.onPress) { self.onPress(); } }; self.up = function (x, y, obj) { buttonShape.alpha = 1; }; return self; }); var Coin = Container.expand(function () { var self = Container.call(this); // Create coin sprite var coinSprite = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); // Add spinning animation self.update = function () { coinSprite.rotation += 0.05; }; // Collect animation self.collect = function () { // Play collection sound LK.getSound('coin').play(); // Animate coin collection tween(self, { scaleX: 0, scaleY: 0, alpha: 0 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); // Create enemy sprite var enemySprite = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); // Physics and behavior properties self.vx = -2; // Initial direction self.patrolDistance = 300; self.startX = 0; // Initialize patrol points self.setup = function (startX) { self.startX = startX; self.leftBound = startX - self.patrolDistance / 2; self.rightBound = startX + self.patrolDistance / 2; self.x = startX; }; // Update enemy behavior self.update = function () { // Move horizontally self.x += self.vx; // Change direction if reached patrol bounds if (self.x <= self.leftBound) { self.vx = Math.abs(self.vx); } else if (self.x >= self.rightBound) { self.vx = -Math.abs(self.vx); } }; return self; }); var Hero = Container.expand(function () { var self = Container.call(this); // Create hero sprite var heroSprite = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); // Physics properties self.vx = 0; self.vy = 0; self.onGround = false; self.jumpForce = -20; self.gravity = 1; self.maxVy = 20; self.speed = 10; self.health = 3; // Flag to track if hero is moving self.isMovingRight = false; self.isMovingLeft = false; // Used to track if jump button is pressed self.isJumping = false; // Update hero physics self.update = function () { // Apply movement based on direction if (self.isMovingRight) { self.vx = self.speed; } else if (self.isMovingLeft) { self.vx = -self.speed; } else { self.vx = 0; } // Apply gravity if (!self.onGround) { self.vy += self.gravity; if (self.vy > self.maxVy) { self.vy = self.maxVy; } } // Update position self.x += self.vx; self.y += self.vy; // Reset onGround flag every frame // Will be set to true during collision detection if applicable self.onGround = false; }; // Handle jump self.jump = function () { if (self.onGround) { self.vy = self.jumpForce; self.onGround = false; LK.getSound('jump').play(); } }; // Handle collision with platforms self.handlePlatformCollision = function (platform) { // Get bounding boxes var heroBox = { x: self.x - heroSprite.width / 2, y: self.y - heroSprite.height / 2, width: heroSprite.width, height: heroSprite.height }; var platformBox = { x: platform.x - platform.width / 2, y: platform.y - platform.height / 2, width: platform.width, height: platform.height }; // Calculate overlap var overlapX = Math.max(0, Math.min(heroBox.x + heroBox.width, platformBox.x + platformBox.width) - Math.max(heroBox.x, platformBox.x)); var overlapY = Math.max(0, Math.min(heroBox.y + heroBox.height, platformBox.y + platformBox.height) - Math.max(heroBox.y, platformBox.y)); // Handle collision if there is overlap if (overlapX > 0 && overlapY > 0) { // Determine if collision is more horizontal or vertical if (overlapX > overlapY) { // Vertical collision // Coming from above if (heroBox.y + heroBox.height / 2 < platformBox.y + platformBox.height / 2) { self.y = platformBox.y - heroBox.height / 2; self.vy = 0; self.onGround = true; } // Coming from below else if (self.vy < 0) { self.y = platformBox.y + platformBox.height + heroBox.height / 2; self.vy = 0; } } else { // Horizontal collision if (heroBox.x + heroBox.width / 2 < platformBox.x + platformBox.width / 2) { self.x = platformBox.x - heroBox.width / 2; } else { self.x = platformBox.x + platformBox.width + heroBox.width / 2; } self.vx = 0; } return true; } return false; }; // Handle damage self.takeDamage = function () { if (!self.invulnerable) { self.health--; self.invulnerable = true; // Flash effect LK.effects.flashObject(self, 0xFF0000, 1000); // Make vulnerable again after 1.5 seconds LK.setTimeout(function () { self.invulnerable = false; }, 1500); // Play hit sound LK.getSound('hit').play(); // Check for game over if (self.health <= 0) { LK.showGameOver(); } } }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); // Create platform sprite var platformSprite = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Background music // Sound effects // Collectible assets // Character assets // Platform assets // Game state variables var hero; var platforms = []; var enemies = []; var coins = []; var level = 1; var score = 0; var cameraOffset = 0; var gameStarted = false; var leftButton; var rightButton; var jumpButton; // UI elements var scoreTxt; var levelTxt; var healthTxt; // Level configuration var levelConfig = { // Platform configurations for different levels platforms: [ // Level 1 [{ x: 300, y: 2500 }, { x: 600, y: 2300 }, { x: 900, y: 2100 }, { x: 1200, y: 2300 }, { x: 1500, y: 2100 }, { x: 1800, y: 1900 }, { x: 300, y: 1700 }, { x: 600, y: 1500 }, { x: 1200, y: 1500 }, { x: 1800, y: 1300 }, { x: 300, y: 1100 }, { x: 600, y: 900 }, { x: 900, y: 700 }, { x: 1200, y: 500 }, { x: 1500, y: 300 }, { x: 1800, y: 100 }]], // Enemy configurations enemies: [ // Level 1 [{ x: 900, y: 2070 }, { x: 1500, y: 2070 }, { x: 600, y: 1470 }, { x: 1200, y: 1470 }, { x: 900, y: 670 }]], // Coin configurations coins: [ // Level 1 [{ x: 300, y: 2450 }, { x: 600, y: 2250 }, { x: 900, y: 2050 }, { x: 1200, y: 2250 }, { x: 1500, y: 2050 }, { x: 1800, y: 1850 }, { x: 300, y: 1650 }, { x: 600, y: 1450 }, { x: 1200, y: 1450 }, { x: 1800, y: 1250 }, { x: 300, y: 1050 }, { x: 600, y: 850 }, { x: 900, y: 650 }, { x: 1200, y: 450 }, { x: 1500, y: 250 }, { x: 1800, y: 50 }]] }; // Initialize level function setupLevel() { // Clear existing objects clearLevel(); // Create ground var ground = new Platform(); ground.x = 2048 / 2; ground.y = 2732 - 40; game.addChild(ground); platforms.push(ground); // Create platforms var levelPlatforms = levelConfig.platforms[level - 1] || levelConfig.platforms[0]; for (var i = 0; i < levelPlatforms.length; i++) { var platform = new Platform(); platform.x = levelPlatforms[i].x; platform.y = levelPlatforms[i].y; game.addChild(platform); platforms.push(platform); } // Create enemies var levelEnemies = levelConfig.enemies[level - 1] || levelConfig.enemies[0]; for (var i = 0; i < levelEnemies.length; i++) { var enemy = new Enemy(); enemy.setup(levelEnemies[i].x); enemy.y = levelEnemies[i].y; game.addChild(enemy); enemies.push(enemy); } // Create coins var levelCoins = levelConfig.coins[level - 1] || levelConfig.coins[0]; for (var i = 0; i < levelCoins.length; i++) { var coin = new Coin(); coin.x = levelCoins[i].x; coin.y = levelCoins[i].y; game.addChild(coin); coins.push(coin); } // Create hero hero = new Hero(); hero.x = 200; hero.y = 2600; game.addChild(hero); // Update score display updateUI(); } // Clear all level objects function clearLevel() { // Remove platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].destroy(); } platforms = []; // Remove enemies for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); } enemies = []; // Remove coins for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); } coins = []; // Remove hero if exists if (hero) { hero.destroy(); hero = null; } } // Update UI displays function updateUI() { scoreTxt.setText("Score: " + score); levelTxt.setText("Level: " + level); healthTxt.setText("Health: " + (hero ? hero.health : 0)); } // Setup controls function setupControls() { // Left movement button leftButton = new Button(); leftButton.setup("<", 0x4444FF); leftButton.x = 150; leftButton.y = 2532; leftButton.onPress = function () { hero.isMovingLeft = true; hero.isMovingRight = false; }; leftButton.up = function () { hero.isMovingLeft = false; }; game.addChild(leftButton); // Right movement button rightButton = new Button(); rightButton.setup(">", 0x4444FF); rightButton.x = 300; rightButton.y = 2532; rightButton.onPress = function () { hero.isMovingRight = true; hero.isMovingLeft = false; }; rightButton.up = function () { hero.isMovingRight = false; }; game.addChild(rightButton); // Jump button jumpButton = new Button(); jumpButton.setup("^", 0xFF4444); jumpButton.x = 1748; jumpButton.y = 2532; jumpButton.onPress = function () { hero.jump(); }; game.addChild(jumpButton); } // Setup UI function setupUI() { // Score display scoreTxt = new Text2("Score: 0", { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(scoreTxt); // Level display levelTxt = new Text2("Level: 1", { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); // Health display healthTxt = new Text2("Health: 3", { size: 60, fill: 0xFFFFFF }); healthTxt.anchor.set(1, 0); LK.gui.topLeft.addChild(healthTxt); healthTxt.x = 150; // Move away from top left corner as per guidelines } // Initialize game function initGame() { // Set score to zero score = 0; LK.setScore(0); // Setup UI elements setupUI(); // Setup level setupLevel(); // Setup controls setupControls(); // Play background music LK.playMusic('bgmusic', { fade: { start: 0, end: 0.7, duration: 1000 } }); // Mark game as started gameStarted = true; } // Handle collisions function handleCollisions() { // Hero-platform collisions for (var i = 0; i < platforms.length; i++) { hero.handlePlatformCollision(platforms[i]); } // Hero-enemy collisions for (var i = enemies.length - 1; i >= 0; i--) { if (hero.intersects(enemies[i])) { // Check if hero is jumping on enemy from above if (hero.vy > 0 && hero.y < enemies[i].y - 30) { // Destroy enemy enemies[i].destroy(); enemies.splice(i, 1); // Bounce hero hero.vy = hero.jumpForce * 0.6; // Add score score += 100; LK.setScore(score); updateUI(); } else { // Hero takes damage hero.takeDamage(); updateUI(); } } } // Hero-coin collisions for (var i = coins.length - 1; i >= 0; i--) { if (hero.intersects(coins[i])) { // Collect coin coins[i].collect(); coins.splice(i, 1); // Add score score += 10; LK.setScore(score); updateUI(); } } // Check for level completion (all coins collected) if (coins.length === 0) { // Level completed level++; // Check if player completed all levels if (level > levelConfig.platforms.length) { // Game completed LK.showYouWin(); } else { // Setup next level setupLevel(); } } } // Keep hero within bounds function enforceWorldBounds() { // Keep hero within horizontal bounds if (hero.x < 50) { hero.x = 50; } else if (hero.x > 2048 - 50) { hero.x = 2048 - 50; } // Check if hero fell off the bottom if (hero.y > 2732 + 100) { hero.takeDamage(); // Reset position hero.x = 200; hero.y = 2600; hero.vx = 0; hero.vy = 0; updateUI(); } // Check if hero reached the top (level complete) if (hero.y < 0) { // Level completed level++; // Check if player completed all levels if (level > levelConfig.platforms.length) { // Game completed LK.showYouWin(); } else { // Setup next level setupLevel(); } } } // Handle global touch events game.down = function (x, y, obj) { if (!gameStarted) { initGame(); } }; // Game update loop game.update = function () { if (!gameStarted) { return; } // Update hero if (hero) { hero.update(); } // Update enemies for (var i = 0; i < enemies.length; i++) { enemies[i].update(); } // Update coins for (var i = 0; i < coins.length; i++) { coins[i].update(); } // Handle collisions handleCollisions(); // Enforce world boundaries enforceWorldBounds(); }; // Setup initial "tap to start" message var startText = new Text2("Tap to Start", { size: 100, fill: 0xFFFFFF }); startText.anchor.set(0.5, 0.5); startText.x = 2048 / 2; startText.y = 2732 / 2; game.addChild(startText); // Remove start text when game starts LK.setInterval(function () { if (gameStarted && startText.parent) { startText.destroy(); } }, 100);
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,678 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Button = Container.expand(function () {
+ var self = Container.call(this);
+ // Create button
+ var buttonShape = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ width: 100,
+ height: 100
+ });
+ // Text for button
+ var buttonText = new Text2('', {
+ size: 50,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ // Setup button
+ self.setup = function (text, color) {
+ buttonText.setText(text);
+ buttonShape.tint = color || 0x444444;
+ };
+ // Event handlers
+ self.down = function (x, y, obj) {
+ buttonShape.alpha = 0.7;
+ if (self.onPress) {
+ self.onPress();
+ }
+ };
+ self.up = function (x, y, obj) {
+ buttonShape.alpha = 1;
+ };
+ return self;
+});
+var Coin = Container.expand(function () {
+ var self = Container.call(this);
+ // Create coin sprite
+ var coinSprite = self.attachAsset('coin', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Add spinning animation
+ self.update = function () {
+ coinSprite.rotation += 0.05;
+ };
+ // Collect animation
+ self.collect = function () {
+ // Play collection sound
+ LK.getSound('coin').play();
+ // Animate coin collection
+ tween(self, {
+ scaleX: 0,
+ scaleY: 0,
+ alpha: 0
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ return self;
+});
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ // Create enemy sprite
+ var enemySprite = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Physics and behavior properties
+ self.vx = -2; // Initial direction
+ self.patrolDistance = 300;
+ self.startX = 0;
+ // Initialize patrol points
+ self.setup = function (startX) {
+ self.startX = startX;
+ self.leftBound = startX - self.patrolDistance / 2;
+ self.rightBound = startX + self.patrolDistance / 2;
+ self.x = startX;
+ };
+ // Update enemy behavior
+ self.update = function () {
+ // Move horizontally
+ self.x += self.vx;
+ // Change direction if reached patrol bounds
+ if (self.x <= self.leftBound) {
+ self.vx = Math.abs(self.vx);
+ } else if (self.x >= self.rightBound) {
+ self.vx = -Math.abs(self.vx);
+ }
+ };
+ return self;
+});
+var Hero = Container.expand(function () {
+ var self = Container.call(this);
+ // Create hero sprite
+ var heroSprite = self.attachAsset('hero', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Physics properties
+ self.vx = 0;
+ self.vy = 0;
+ self.onGround = false;
+ self.jumpForce = -20;
+ self.gravity = 1;
+ self.maxVy = 20;
+ self.speed = 10;
+ self.health = 3;
+ // Flag to track if hero is moving
+ self.isMovingRight = false;
+ self.isMovingLeft = false;
+ // Used to track if jump button is pressed
+ self.isJumping = false;
+ // Update hero physics
+ self.update = function () {
+ // Apply movement based on direction
+ if (self.isMovingRight) {
+ self.vx = self.speed;
+ } else if (self.isMovingLeft) {
+ self.vx = -self.speed;
+ } else {
+ self.vx = 0;
+ }
+ // Apply gravity
+ if (!self.onGround) {
+ self.vy += self.gravity;
+ if (self.vy > self.maxVy) {
+ self.vy = self.maxVy;
+ }
+ }
+ // Update position
+ self.x += self.vx;
+ self.y += self.vy;
+ // Reset onGround flag every frame
+ // Will be set to true during collision detection if applicable
+ self.onGround = false;
+ };
+ // Handle jump
+ self.jump = function () {
+ if (self.onGround) {
+ self.vy = self.jumpForce;
+ self.onGround = false;
+ LK.getSound('jump').play();
+ }
+ };
+ // Handle collision with platforms
+ self.handlePlatformCollision = function (platform) {
+ // Get bounding boxes
+ var heroBox = {
+ x: self.x - heroSprite.width / 2,
+ y: self.y - heroSprite.height / 2,
+ width: heroSprite.width,
+ height: heroSprite.height
+ };
+ var platformBox = {
+ x: platform.x - platform.width / 2,
+ y: platform.y - platform.height / 2,
+ width: platform.width,
+ height: platform.height
+ };
+ // Calculate overlap
+ var overlapX = Math.max(0, Math.min(heroBox.x + heroBox.width, platformBox.x + platformBox.width) - Math.max(heroBox.x, platformBox.x));
+ var overlapY = Math.max(0, Math.min(heroBox.y + heroBox.height, platformBox.y + platformBox.height) - Math.max(heroBox.y, platformBox.y));
+ // Handle collision if there is overlap
+ if (overlapX > 0 && overlapY > 0) {
+ // Determine if collision is more horizontal or vertical
+ if (overlapX > overlapY) {
+ // Vertical collision
+ // Coming from above
+ if (heroBox.y + heroBox.height / 2 < platformBox.y + platformBox.height / 2) {
+ self.y = platformBox.y - heroBox.height / 2;
+ self.vy = 0;
+ self.onGround = true;
+ }
+ // Coming from below
+ else if (self.vy < 0) {
+ self.y = platformBox.y + platformBox.height + heroBox.height / 2;
+ self.vy = 0;
+ }
+ } else {
+ // Horizontal collision
+ if (heroBox.x + heroBox.width / 2 < platformBox.x + platformBox.width / 2) {
+ self.x = platformBox.x - heroBox.width / 2;
+ } else {
+ self.x = platformBox.x + platformBox.width + heroBox.width / 2;
+ }
+ self.vx = 0;
+ }
+ return true;
+ }
+ return false;
+ };
+ // Handle damage
+ self.takeDamage = function () {
+ if (!self.invulnerable) {
+ self.health--;
+ self.invulnerable = true;
+ // Flash effect
+ LK.effects.flashObject(self, 0xFF0000, 1000);
+ // Make vulnerable again after 1.5 seconds
+ LK.setTimeout(function () {
+ self.invulnerable = false;
+ }, 1500);
+ // Play hit sound
+ LK.getSound('hit').play();
+ // Check for game over
+ if (self.health <= 0) {
+ LK.showGameOver();
+ }
+ }
+ };
+ return self;
+});
+var Platform = Container.expand(function () {
+ var self = Container.call(this);
+ // Create platform sprite
+ var platformSprite = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB // Sky blue background
+});
+
+/****
+* Game Code
+****/
+// Background music
+// Sound effects
+// Collectible assets
+// Character assets
+// Platform assets
+// Game state variables
+var hero;
+var platforms = [];
+var enemies = [];
+var coins = [];
+var level = 1;
+var score = 0;
+var cameraOffset = 0;
+var gameStarted = false;
+var leftButton;
+var rightButton;
+var jumpButton;
+// UI elements
+var scoreTxt;
+var levelTxt;
+var healthTxt;
+// Level configuration
+var levelConfig = {
+ // Platform configurations for different levels
+ platforms: [
+ // Level 1
+ [{
+ x: 300,
+ y: 2500
+ }, {
+ x: 600,
+ y: 2300
+ }, {
+ x: 900,
+ y: 2100
+ }, {
+ x: 1200,
+ y: 2300
+ }, {
+ x: 1500,
+ y: 2100
+ }, {
+ x: 1800,
+ y: 1900
+ }, {
+ x: 300,
+ y: 1700
+ }, {
+ x: 600,
+ y: 1500
+ }, {
+ x: 1200,
+ y: 1500
+ }, {
+ x: 1800,
+ y: 1300
+ }, {
+ x: 300,
+ y: 1100
+ }, {
+ x: 600,
+ y: 900
+ }, {
+ x: 900,
+ y: 700
+ }, {
+ x: 1200,
+ y: 500
+ }, {
+ x: 1500,
+ y: 300
+ }, {
+ x: 1800,
+ y: 100
+ }]],
+ // Enemy configurations
+ enemies: [
+ // Level 1
+ [{
+ x: 900,
+ y: 2070
+ }, {
+ x: 1500,
+ y: 2070
+ }, {
+ x: 600,
+ y: 1470
+ }, {
+ x: 1200,
+ y: 1470
+ }, {
+ x: 900,
+ y: 670
+ }]],
+ // Coin configurations
+ coins: [
+ // Level 1
+ [{
+ x: 300,
+ y: 2450
+ }, {
+ x: 600,
+ y: 2250
+ }, {
+ x: 900,
+ y: 2050
+ }, {
+ x: 1200,
+ y: 2250
+ }, {
+ x: 1500,
+ y: 2050
+ }, {
+ x: 1800,
+ y: 1850
+ }, {
+ x: 300,
+ y: 1650
+ }, {
+ x: 600,
+ y: 1450
+ }, {
+ x: 1200,
+ y: 1450
+ }, {
+ x: 1800,
+ y: 1250
+ }, {
+ x: 300,
+ y: 1050
+ }, {
+ x: 600,
+ y: 850
+ }, {
+ x: 900,
+ y: 650
+ }, {
+ x: 1200,
+ y: 450
+ }, {
+ x: 1500,
+ y: 250
+ }, {
+ x: 1800,
+ y: 50
+ }]]
+};
+// Initialize level
+function setupLevel() {
+ // Clear existing objects
+ clearLevel();
+ // Create ground
+ var ground = new Platform();
+ ground.x = 2048 / 2;
+ ground.y = 2732 - 40;
+ game.addChild(ground);
+ platforms.push(ground);
+ // Create platforms
+ var levelPlatforms = levelConfig.platforms[level - 1] || levelConfig.platforms[0];
+ for (var i = 0; i < levelPlatforms.length; i++) {
+ var platform = new Platform();
+ platform.x = levelPlatforms[i].x;
+ platform.y = levelPlatforms[i].y;
+ game.addChild(platform);
+ platforms.push(platform);
+ }
+ // Create enemies
+ var levelEnemies = levelConfig.enemies[level - 1] || levelConfig.enemies[0];
+ for (var i = 0; i < levelEnemies.length; i++) {
+ var enemy = new Enemy();
+ enemy.setup(levelEnemies[i].x);
+ enemy.y = levelEnemies[i].y;
+ game.addChild(enemy);
+ enemies.push(enemy);
+ }
+ // Create coins
+ var levelCoins = levelConfig.coins[level - 1] || levelConfig.coins[0];
+ for (var i = 0; i < levelCoins.length; i++) {
+ var coin = new Coin();
+ coin.x = levelCoins[i].x;
+ coin.y = levelCoins[i].y;
+ game.addChild(coin);
+ coins.push(coin);
+ }
+ // Create hero
+ hero = new Hero();
+ hero.x = 200;
+ hero.y = 2600;
+ game.addChild(hero);
+ // Update score display
+ updateUI();
+}
+// Clear all level objects
+function clearLevel() {
+ // Remove platforms
+ for (var i = platforms.length - 1; i >= 0; i--) {
+ platforms[i].destroy();
+ }
+ platforms = [];
+ // Remove enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ enemies[i].destroy();
+ }
+ enemies = [];
+ // Remove coins
+ for (var i = coins.length - 1; i >= 0; i--) {
+ coins[i].destroy();
+ }
+ coins = [];
+ // Remove hero if exists
+ if (hero) {
+ hero.destroy();
+ hero = null;
+ }
+}
+// Update UI displays
+function updateUI() {
+ scoreTxt.setText("Score: " + score);
+ levelTxt.setText("Level: " + level);
+ healthTxt.setText("Health: " + (hero ? hero.health : 0));
+}
+// Setup controls
+function setupControls() {
+ // Left movement button
+ leftButton = new Button();
+ leftButton.setup("<", 0x4444FF);
+ leftButton.x = 150;
+ leftButton.y = 2532;
+ leftButton.onPress = function () {
+ hero.isMovingLeft = true;
+ hero.isMovingRight = false;
+ };
+ leftButton.up = function () {
+ hero.isMovingLeft = false;
+ };
+ game.addChild(leftButton);
+ // Right movement button
+ rightButton = new Button();
+ rightButton.setup(">", 0x4444FF);
+ rightButton.x = 300;
+ rightButton.y = 2532;
+ rightButton.onPress = function () {
+ hero.isMovingRight = true;
+ hero.isMovingLeft = false;
+ };
+ rightButton.up = function () {
+ hero.isMovingRight = false;
+ };
+ game.addChild(rightButton);
+ // Jump button
+ jumpButton = new Button();
+ jumpButton.setup("^", 0xFF4444);
+ jumpButton.x = 1748;
+ jumpButton.y = 2532;
+ jumpButton.onPress = function () {
+ hero.jump();
+ };
+ game.addChild(jumpButton);
+}
+// Setup UI
+function setupUI() {
+ // Score display
+ scoreTxt = new Text2("Score: 0", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ scoreTxt.anchor.set(0, 0);
+ LK.gui.topRight.addChild(scoreTxt);
+ // Level display
+ levelTxt = new Text2("Level: 1", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ levelTxt.anchor.set(0.5, 0);
+ LK.gui.top.addChild(levelTxt);
+ // Health display
+ healthTxt = new Text2("Health: 3", {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ healthTxt.anchor.set(1, 0);
+ LK.gui.topLeft.addChild(healthTxt);
+ healthTxt.x = 150; // Move away from top left corner as per guidelines
+}
+// Initialize game
+function initGame() {
+ // Set score to zero
+ score = 0;
+ LK.setScore(0);
+ // Setup UI elements
+ setupUI();
+ // Setup level
+ setupLevel();
+ // Setup controls
+ setupControls();
+ // Play background music
+ LK.playMusic('bgmusic', {
+ fade: {
+ start: 0,
+ end: 0.7,
+ duration: 1000
+ }
+ });
+ // Mark game as started
+ gameStarted = true;
+}
+// Handle collisions
+function handleCollisions() {
+ // Hero-platform collisions
+ for (var i = 0; i < platforms.length; i++) {
+ hero.handlePlatformCollision(platforms[i]);
+ }
+ // Hero-enemy collisions
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ if (hero.intersects(enemies[i])) {
+ // Check if hero is jumping on enemy from above
+ if (hero.vy > 0 && hero.y < enemies[i].y - 30) {
+ // Destroy enemy
+ enemies[i].destroy();
+ enemies.splice(i, 1);
+ // Bounce hero
+ hero.vy = hero.jumpForce * 0.6;
+ // Add score
+ score += 100;
+ LK.setScore(score);
+ updateUI();
+ } else {
+ // Hero takes damage
+ hero.takeDamage();
+ updateUI();
+ }
+ }
+ }
+ // Hero-coin collisions
+ for (var i = coins.length - 1; i >= 0; i--) {
+ if (hero.intersects(coins[i])) {
+ // Collect coin
+ coins[i].collect();
+ coins.splice(i, 1);
+ // Add score
+ score += 10;
+ LK.setScore(score);
+ updateUI();
+ }
+ }
+ // Check for level completion (all coins collected)
+ if (coins.length === 0) {
+ // Level completed
+ level++;
+ // Check if player completed all levels
+ if (level > levelConfig.platforms.length) {
+ // Game completed
+ LK.showYouWin();
+ } else {
+ // Setup next level
+ setupLevel();
+ }
+ }
+}
+// Keep hero within bounds
+function enforceWorldBounds() {
+ // Keep hero within horizontal bounds
+ if (hero.x < 50) {
+ hero.x = 50;
+ } else if (hero.x > 2048 - 50) {
+ hero.x = 2048 - 50;
+ }
+ // Check if hero fell off the bottom
+ if (hero.y > 2732 + 100) {
+ hero.takeDamage();
+ // Reset position
+ hero.x = 200;
+ hero.y = 2600;
+ hero.vx = 0;
+ hero.vy = 0;
+ updateUI();
+ }
+ // Check if hero reached the top (level complete)
+ if (hero.y < 0) {
+ // Level completed
+ level++;
+ // Check if player completed all levels
+ if (level > levelConfig.platforms.length) {
+ // Game completed
+ LK.showYouWin();
+ } else {
+ // Setup next level
+ setupLevel();
+ }
+ }
+}
+// Handle global touch events
+game.down = function (x, y, obj) {
+ if (!gameStarted) {
+ initGame();
+ }
+};
+// Game update loop
+game.update = function () {
+ if (!gameStarted) {
+ return;
+ }
+ // Update hero
+ if (hero) {
+ hero.update();
+ }
+ // Update enemies
+ for (var i = 0; i < enemies.length; i++) {
+ enemies[i].update();
+ }
+ // Update coins
+ for (var i = 0; i < coins.length; i++) {
+ coins[i].update();
+ }
+ // Handle collisions
+ handleCollisions();
+ // Enforce world boundaries
+ enforceWorldBounds();
+};
+// Setup initial "tap to start" message
+var startText = new Text2("Tap to Start", {
+ size: 100,
+ fill: 0xFFFFFF
+});
+startText.anchor.set(0.5, 0.5);
+startText.x = 2048 / 2;
+startText.y = 2732 / 2;
+game.addChild(startText);
+// Remove start text when game starts
+LK.setInterval(function () {
+ if (gameStarted && startText.parent) {
+ startText.destroy();
+ }
+}, 100);
\ No newline at end of file