Code edit (6 edits merged)
Please save this source code
User prompt
start spawning ennemies only after 2 sec
Code edit (2 edits merged)
Please save this source code
User prompt
fix coin counter position because it is no more visible
User prompt
fix coin counter : - coin counter is independant from the score; 1 coin => +1 - make digits bigger - fix icon isn't visible (beware ui coordinates doesn't work like assets coordinates)
User prompt
create a class for a coin counter; use coinFrame1 as an icon and write it on 3 digits
User prompt
play jump sound when play jumps
User prompt
play enemy stomp sound when stompting enemy
User prompt
play coin sound when coin taken
User prompt
create a coin class with an 8 frame animation (load all 8 assets, then use alpha to show/hide them sequencially) ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
fait qu'il saute un peu moins haut
User prompt
fait que mario saute plus vite et chute plus vite mais pas plus haut
User prompt
fait que mario saute plus vite
User prompt
fait que mario meurs quand il touche un enemy*
Code edit (18 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'bgClose.x -= 4; // Increase speed for close background' Line Number: 304
Code edit (1 edits merged)
Please save this source code
Code edit (11 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: level1Height is not defined' in or related to this line: 'if (lastHeight === level1Height) {' Line Number: 452
Code edit (4 edits merged)
Please save this source code
User prompt
Increase the scrolling speed of the backgrounds to match the game's pace. Ensure the backgrounds repeat seamlessly by adjusting their width and reset positions. Verify the backgrounds' widths are set correctly to avoid gaps. Do this step by step in respect of current coding style/rules.
User prompt
Implement parallax scrolling for the backgrounds bgClose and bgFar. Ensure the backgrounds repeat infinitely. Adjust the scrolling speed of each background layer to create a parallax effect. Do this step by step in respect of current coding style/rules.
Code edit (1 edits merged)
Please save this source code
User prompt
Use a value of 5 for the ticks modulo for the run animation.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Define a class for enemies var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; self.getBounds = function () { return { left: self.x - 50, right: self.x + 50, top: self.y - 50, bottom: self.y + 50 }; }; }); // Define a class for platforms var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.passed = false; self.update = function () { self.x -= self.speed; if (self.x < -500) { self.destroy(); } }; return self; }); // Define a class for the player character var Player = Container.expand(function () { var self = Container.call(this); self.runFrames = [self.attachAsset('playerRunFrame1', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }), self.attachAsset('playerRunFrame2', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }), self.attachAsset('playerRunFrame', { anchorX: 0.5, anchorY: 0.5, alpha: 0 })]; self.currentRunFrame = 0; self.speed = 5; self.jumpHeight = 30; self.isJumping = false; self.velocityY = 0; self.isFalling = false; self.currentPlatform = null; self.jumpFrame = self.attachAsset('playerJumpFrame', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Hide the jump frame by setting alpha to 0 }); self.getBounds = function () { return { left: self.x - 75, right: self.x + 75, top: self.y - 100, bottom: self.y + 100 }; }; self.update = function () { if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; // Decreased gravity effect by 30% self.isFalling = self.velocityY > 0; self.jumpFrame.alpha = 1; // While jumping, switch to the jump frame self.runFrames[self.currentRunFrame].alpha = 0; // Hide the player asset when jumping // Check for platform collision self.checkPlatformCollision(); // Check for ground collision if (self.y >= 2732 / 2 && !self.currentPlatform) { // Ground level self.y = 2732 / 2; self.isJumping = false; self.velocityY = 0; self.jumpFrame.alpha = 0; // When not jumping, switch back to the normal frame self.runFrames[self.currentRunFrame].alpha = 1; // Show the player asset when not jumping // Add a bounce effect tween(self, { scaleX: 1.2, scaleY: 0.8 }, { duration: 100, easing: tween.elasticOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 500, easing: tween.elasticOut }); } }); } } else { // Check if player is still on the platform if (self.currentPlatform) { var platformBounds = { left: self.currentPlatform.x - 500, right: self.currentPlatform.x + 500 }; var playerBounds = self.getBounds(); // If player is no longer on the platform, start falling if (playerBounds.left > platformBounds.right || playerBounds.right < platformBounds.left) { self.isJumping = true; self.velocityY = 0.1; // Start with a small downward velocity self.isFalling = true; self.currentPlatform = null; self.jumpFrame.alpha = 1; self.runFrames[self.currentRunFrame].alpha = 0; } } // Handle running animation if (LK.ticks % 5 === 0) { // Fine-tuned interval for balanced and natural pace // Adjusted interval for balanced pace self.runFrames[self.currentRunFrame].alpha = 0; // Hide current frame self.currentRunFrame = (self.currentRunFrame + 1) % self.runFrames.length; // Switch to next frame self.runFrames[self.currentRunFrame].alpha = 1; // Show next frame } } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; self.jumpFrame.alpha = 1; // Make jump frame visible LK.getSound('jump').play(); // Play jump sound self.currentPlatform = null; } }; self.checkPlatformCollision = function () { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformBounds = { left: platform.x - 500, right: platform.x + 500, top: platform.y - 50, bottom: platform.y + 50 }; var playerBounds = self.getBounds(); // Check if player is above the platform and falling if (self.velocityY > 0 && playerBounds.bottom >= platformBounds.top && playerBounds.bottom - self.velocityY < platformBounds.top && playerBounds.right > platformBounds.left && playerBounds.left < platformBounds.right) { // Land on the platform self.y = platform.y - 150; // Adjust this value to position player correctly on platform self.velocityY = 0; self.isJumping = false; self.isFalling = false; self.currentPlatform = platform; self.jumpFrame.alpha = 0; self.runFrames[self.currentRunFrame].alpha = 1; // Add a bounce effect tween(self, { scaleX: 1.2, scaleY: 0.8 }, { duration: 100, easing: tween.elasticOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 500, easing: tween.elasticOut }); } }); return true; } } return false; }; }); /**** * Initialize Game ****/ // Initialize game var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ /**** * Global Variables ****/ var level1Height; var level2Height; var game; var background; var player; var enemies; var enemySpawnInterval; var enemySpawnCounter; var scoreText; var backgroundContainer; var middlegroundContainer; var foregroundContainer; var bgClose; var bgClose2; var bgFar; var bgFar2; var platforms; var ground; var ground2; // Handle game updates game.update = function () { // Parallax scrolling bgClose.x -= 4; // Increase speed for close background bgClose2.x -= 4; // Move the duplicate at the same speed bgFar.x -= 2; // Increase speed for far background bgFar2.x -= 2; // Move the duplicate at the same speed // Repeat backgrounds infinitely if (bgClose.x <= -bgClose.width) { bgClose.x = bgClose2.x + bgClose2.width; } if (bgClose2.x <= -bgClose2.width) { bgClose2.x = bgClose.x + bgClose.width; } if (bgFar.x <= -bgFar.width) { bgFar.x = bgFar2.x + bgFar2.width; } if (bgFar2.x <= -bgFar2.width) { bgFar2.x = bgFar.x + bgFar.width; } // Scroll ground ground.x -= 5; // Même vitesse que les plateformes (Platform.speed) ground2.x -= 5; if (ground.x <= -ground.width) { ground.x = ground2.x + ground2.width; } if (ground2.x <= -ground2.width) { ground2.x = ground.x + ground.width; } // Update platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); // Remove platforms that are destroyed if (platforms[i].destroyed) { platforms.splice(i, 1); } } // Check if we need to spawn a new platform if (platforms.length > 0) { var lastPlatform = platforms[platforms.length - 1]; if (lastPlatform.x < 2048 + 500) { // Spawn a new platform spawnPlatform(); } } // Spawn enemies enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { var enemy = new Enemy(); enemy.x = 2048; enemy.y = player.y + player.height / 2 - enemy.height / 2; enemies.push(enemy); middlegroundContainer.addChild(enemy); // Randomize the spawn interval for the next enemy enemySpawnInterval = Math.floor(Math.random() * 150) + 50; enemySpawnCounter = 0; } // Check collisions with enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemyBounds = enemies[j].getBounds(); var playerBounds = player.getBounds(); if (playerBounds.left < enemyBounds.right && playerBounds.right > enemyBounds.left && playerBounds.top < enemyBounds.bottom && playerBounds.bottom > enemyBounds.top) { if (player.isFalling || !player.isJumping) { enemies[j].destroy(); enemies.splice(j, 1); } else { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } } else if (player.x > enemies[j].x && !enemies[j].passed) { enemies[j].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText(LK.getScore()); } } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); }; function initializeGame() { // Initialize containers backgroundContainer = new Container(); middlegroundContainer = new Container(); foregroundContainer = new Container(); // Add containers to game in proper order game.addChild(backgroundContainer); game.addChild(middlegroundContainer); game.addChild(foregroundContainer); // Initialize background background = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); background.x = 0; background.y = 0; backgroundContainer.addChild(background); // Initialize parallax backgrounds bgClose = LK.getAsset('bgClose', { anchorX: 0, anchorY: 0 }); bgClose.x = 0; bgClose.y = 0; bgClose.width = 2732; // Set correct width to match the actual image width backgroundContainer.addChild(bgClose); // Create a duplicate of bgClose for seamless scrolling bgClose2 = LK.getAsset('bgClose', { anchorX: 0, anchorY: 0 }); bgClose2.x = bgClose.width; bgClose2.y = 0; bgClose2.width = 2732; backgroundContainer.addChild(bgClose2); bgFar = LK.getAsset('bgFar', { anchorX: 0, anchorY: 0 }); bgFar.x = 0; bgFar.y = 0; bgFar.width = 2732; // Set correct width to match the actual image width backgroundContainer.addChild(bgFar); // Create a duplicate of bgFar for seamless scrolling bgFar2 = LK.getAsset('bgFar', { anchorX: 0, anchorY: 0 }); bgFar2.x = bgFar.width; bgFar2.y = 0; bgFar2.width = 2732; backgroundContainer.addChild(bgFar2); // Add ground that scrolls ground = LK.getAsset('ground', { anchorX: 0, anchorY: 0.5 }); ground.x = 0; ground.y = 2732 / 2 + 100; // Position the ground at the bottom of the screen ground.width = 2048; // Make the ground span the entire width ground.height = 200; // Set a reasonable height for the ground middlegroundContainer.addChild(ground); // Add second ground piece for infinite scrolling ground2 = LK.getAsset('ground', { anchorX: 0, anchorY: 0.5 }); ground2.x = ground.width; ground2.y = 2732 / 2 + 100; ground2.width = 2048; ground2.height = 200; middlegroundContainer.addChild(ground2); // Initialize player player = new Player(); player.x = 2048 / 4; // Adjust the player's initial position to be more to the left player.y = 2732 / 2; foregroundContainer.addChild(player); // Initialize enemies enemies = []; enemySpawnInterval = 100; enemySpawnCounter = 0; // Initialize platforms platforms = []; // Define fixed platform heights for two levels var groundLevel = 2732 / 2; // Niveau du sol level1Height = groundLevel - 350; // Niveau 1 à 350 pixels au-dessus du sol level2Height = level1Height - 350; // Niveau 2 à 350 pixels au-dessus du niveau 1 // Create initial platforms for (var i = 0; i < 3; i++) { var platform = new Platform(); if (i === 0) { platform.x = player.x + 800; // Start the first platform further away platform.y = level1Height; // Première plateforme toujours au niveau 1 } else if (i === 1) { // Deuxième plateforme au niveau 2, mais plus proche horizontalement platform.x = platforms[i - 1].x + 1000; // Plus proche pour pouvoir sauter dessus platform.y = level2Height; } else { // Troisième plateforme au niveau 1 à nouveau platform.x = platforms[i - 1].x + 1000; // Plus proche pour pouvoir sauter dessus platform.y = level1Height; } platforms.push(platform); middlegroundContainer.addChild(platform); } // Create a new Text2 object to display the score scoreText = new Text2('0', { size: 100, fill: 0xFFFFFF }); // Add the score text to the game GUI at the top center of the screen LK.gui.top.addChild(scoreText); scoreText.x = 2048 / 2; scoreText.y = 0; // Play background music LK.playMusic('bgMusic'); } // Function to spawn a new platform function spawnPlatform() { var platform = new Platform(); var lastPlatform = platforms[platforms.length - 1]; var lastHeight = lastPlatform.y; // Déterminer la hauteur de la nouvelle plateforme if (lastHeight === level1Height) { // Si la dernière plateforme était au niveau 1, la nouvelle sera au niveau 2 platform.y = level2Height; platform.x = lastPlatform.x + 1000; // Plus proche pour pouvoir sauter dessus } else { // Si la dernière plateforme était au niveau 2, la nouvelle sera au niveau 1 platform.y = level1Height; platform.x = lastPlatform.x + 1000; // Plus proche pour pouvoir sauter dessus } platforms.push(platform); middlegroundContainer.addChild(platform); } // Call initializeGame at the end of the file initializeGame();
===================================================================
--- original.js
+++ change.js
@@ -19,9 +19,34 @@
if (self.x < -50) {
self.destroy();
}
};
+ self.getBounds = function () {
+ return {
+ left: self.x - 50,
+ right: self.x + 50,
+ top: self.y - 50,
+ bottom: self.y + 50
+ };
+ };
});
+// Define a class for platforms
+var Platform = Container.expand(function () {
+ var self = Container.call(this);
+ var platformGraphics = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 5;
+ self.passed = false;
+ self.update = function () {
+ self.x -= self.speed;
+ if (self.x < -500) {
+ self.destroy();
+ }
+ };
+ return self;
+});
// Define a class for the player character
var Player = Container.expand(function () {
var self = Container.call(this);
self.runFrames = [self.attachAsset('playerRunFrame1', {
@@ -42,21 +67,33 @@
self.jumpHeight = 30;
self.isJumping = false;
self.velocityY = 0;
self.isFalling = false;
+ self.currentPlatform = null;
self.jumpFrame = self.attachAsset('playerJumpFrame', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // Hide the jump frame by setting alpha to 0
});
+ self.getBounds = function () {
+ return {
+ left: self.x - 75,
+ right: self.x + 75,
+ top: self.y - 100,
+ bottom: self.y + 100
+ };
+ };
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7; // Decreased gravity effect by 30%
self.isFalling = self.velocityY > 0;
self.jumpFrame.alpha = 1; // While jumping, switch to the jump frame
self.runFrames[self.currentRunFrame].alpha = 0; // Hide the player asset when jumping
- if (self.y >= 2732 / 2) {
+ // Check for platform collision
+ self.checkPlatformCollision();
+ // Check for ground collision
+ if (self.y >= 2732 / 2 && !self.currentPlatform) {
// Ground level
self.y = 2732 / 2;
self.isJumping = false;
self.velocityY = 0;
@@ -80,8 +117,25 @@
}
});
}
} else {
+ // Check if player is still on the platform
+ if (self.currentPlatform) {
+ var platformBounds = {
+ left: self.currentPlatform.x - 500,
+ right: self.currentPlatform.x + 500
+ };
+ var playerBounds = self.getBounds();
+ // If player is no longer on the platform, start falling
+ if (playerBounds.left > platformBounds.right || playerBounds.right < platformBounds.left) {
+ self.isJumping = true;
+ self.velocityY = 0.1; // Start with a small downward velocity
+ self.isFalling = true;
+ self.currentPlatform = null;
+ self.jumpFrame.alpha = 1;
+ self.runFrames[self.currentRunFrame].alpha = 0;
+ }
+ }
// Handle running animation
if (LK.ticks % 5 === 0) {
// Fine-tuned interval for balanced and natural pace
// Adjusted interval for balanced pace
@@ -96,10 +150,53 @@
self.isJumping = true;
self.velocityY = -self.jumpHeight;
self.jumpFrame.alpha = 1; // Make jump frame visible
LK.getSound('jump').play(); // Play jump sound
+ self.currentPlatform = null;
}
};
+ self.checkPlatformCollision = function () {
+ for (var i = 0; i < platforms.length; i++) {
+ var platform = platforms[i];
+ var platformBounds = {
+ left: platform.x - 500,
+ right: platform.x + 500,
+ top: platform.y - 50,
+ bottom: platform.y + 50
+ };
+ var playerBounds = self.getBounds();
+ // Check if player is above the platform and falling
+ if (self.velocityY > 0 && playerBounds.bottom >= platformBounds.top && playerBounds.bottom - self.velocityY < platformBounds.top && playerBounds.right > platformBounds.left && playerBounds.left < platformBounds.right) {
+ // Land on the platform
+ self.y = platform.y - 150; // Adjust this value to position player correctly on platform
+ self.velocityY = 0;
+ self.isJumping = false;
+ self.isFalling = false;
+ self.currentPlatform = platform;
+ self.jumpFrame.alpha = 0;
+ self.runFrames[self.currentRunFrame].alpha = 1;
+ // Add a bounce effect
+ tween(self, {
+ scaleX: 1.2,
+ scaleY: 0.8
+ }, {
+ duration: 100,
+ easing: tween.elasticOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 500,
+ easing: tween.elasticOut
+ });
+ }
+ });
+ return true;
+ }
+ }
+ return false;
+ };
});
/****
* Initialize Game
@@ -114,8 +211,10 @@
****/
/****
* Global Variables
****/
+var level1Height;
+var level2Height;
var game;
var background;
var player;
var enemies;
@@ -128,8 +227,11 @@
var bgClose;
var bgClose2;
var bgFar;
var bgFar2;
+var platforms;
+var ground;
+var ground2;
// Handle game updates
game.update = function () {
// Parallax scrolling
bgClose.x -= 4; // Increase speed for close background
@@ -148,8 +250,33 @@
}
if (bgFar2.x <= -bgFar2.width) {
bgFar2.x = bgFar.x + bgFar.width;
}
+ // Scroll ground
+ ground.x -= 5; // Même vitesse que les plateformes (Platform.speed)
+ ground2.x -= 5;
+ if (ground.x <= -ground.width) {
+ ground.x = ground2.x + ground2.width;
+ }
+ if (ground2.x <= -ground2.width) {
+ ground2.x = ground.x + ground.width;
+ }
+ // Update platforms
+ for (var i = platforms.length - 1; i >= 0; i--) {
+ platforms[i].update();
+ // Remove platforms that are destroyed
+ if (platforms[i].destroyed) {
+ platforms.splice(i, 1);
+ }
+ }
+ // Check if we need to spawn a new platform
+ if (platforms.length > 0) {
+ var lastPlatform = platforms[platforms.length - 1];
+ if (lastPlatform.x < 2048 + 500) {
+ // Spawn a new platform
+ spawnPlatform();
+ }
+ }
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy = new Enemy();
@@ -162,9 +289,11 @@
enemySpawnCounter = 0;
}
// Check collisions with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
- if (player.intersects(enemies[j])) {
+ var enemyBounds = enemies[j].getBounds();
+ var playerBounds = player.getBounds();
+ if (playerBounds.left < enemyBounds.right && playerBounds.right > enemyBounds.left && playerBounds.top < enemyBounds.bottom && playerBounds.bottom > enemyBounds.top) {
if (player.isFalling || !player.isJumping) {
enemies[j].destroy();
enemies.splice(j, 1);
} else {
@@ -233,8 +362,28 @@
bgFar2.x = bgFar.width;
bgFar2.y = 0;
bgFar2.width = 2732;
backgroundContainer.addChild(bgFar2);
+ // Add ground that scrolls
+ ground = LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 0.5
+ });
+ ground.x = 0;
+ ground.y = 2732 / 2 + 100; // Position the ground at the bottom of the screen
+ ground.width = 2048; // Make the ground span the entire width
+ ground.height = 200; // Set a reasonable height for the ground
+ middlegroundContainer.addChild(ground);
+ // Add second ground piece for infinite scrolling
+ ground2 = LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 0.5
+ });
+ ground2.x = ground.width;
+ ground2.y = 2732 / 2 + 100;
+ ground2.width = 2048;
+ ground2.height = 200;
+ middlegroundContainer.addChild(ground2);
// Initialize player
player = new Player();
player.x = 2048 / 4; // Adjust the player's initial position to be more to the left
player.y = 2732 / 2;
@@ -242,8 +391,32 @@
// Initialize enemies
enemies = [];
enemySpawnInterval = 100;
enemySpawnCounter = 0;
+ // Initialize platforms
+ platforms = [];
+ // Define fixed platform heights for two levels
+ var groundLevel = 2732 / 2; // Niveau du sol
+ level1Height = groundLevel - 350; // Niveau 1 à 350 pixels au-dessus du sol
+ level2Height = level1Height - 350; // Niveau 2 à 350 pixels au-dessus du niveau 1
+ // Create initial platforms
+ for (var i = 0; i < 3; i++) {
+ var platform = new Platform();
+ if (i === 0) {
+ platform.x = player.x + 800; // Start the first platform further away
+ platform.y = level1Height; // Première plateforme toujours au niveau 1
+ } else if (i === 1) {
+ // Deuxième plateforme au niveau 2, mais plus proche horizontalement
+ platform.x = platforms[i - 1].x + 1000; // Plus proche pour pouvoir sauter dessus
+ platform.y = level2Height;
+ } else {
+ // Troisième plateforme au niveau 1 à nouveau
+ platform.x = platforms[i - 1].x + 1000; // Plus proche pour pouvoir sauter dessus
+ platform.y = level1Height;
+ }
+ platforms.push(platform);
+ middlegroundContainer.addChild(platform);
+ }
// Create a new Text2 object to display the score
scoreText = new Text2('0', {
size: 100,
fill: 0xFFFFFF
@@ -254,6 +427,24 @@
scoreText.y = 0;
// Play background music
LK.playMusic('bgMusic');
}
+// Function to spawn a new platform
+function spawnPlatform() {
+ var platform = new Platform();
+ var lastPlatform = platforms[platforms.length - 1];
+ var lastHeight = lastPlatform.y;
+ // Déterminer la hauteur de la nouvelle plateforme
+ if (lastHeight === level1Height) {
+ // Si la dernière plateforme était au niveau 1, la nouvelle sera au niveau 2
+ platform.y = level2Height;
+ platform.x = lastPlatform.x + 1000; // Plus proche pour pouvoir sauter dessus
+ } else {
+ // Si la dernière plateforme était au niveau 2, la nouvelle sera au niveau 1
+ platform.y = level1Height;
+ platform.x = lastPlatform.x + 1000; // Plus proche pour pouvoir sauter dessus
+ }
+ platforms.push(platform);
+ middlegroundContainer.addChild(platform);
+}
// Call initializeGame at the end of the file
initializeGame();
\ No newline at end of file