User prompt
display 3 heart icon and make it functional 3 lives of player
User prompt
add 3 heart of health to the player meaning that player has 3 more lives
User prompt
make enemies bigger and a bit faster
User prompt
remove the double jump effect
User prompt
add dash sfx
User prompt
add sound effects and musics to the game
User prompt
player is not jumping please fix it
User prompt
make the enemies hitboxes small and fix double jump when on ground
Code edit (8 edits merged)
Please save this source code
User prompt
add jump and dash icons on buttons
User prompt
fix doublejump, when the player is on ground reset normal jump
User prompt
fix the double jump while on ground. it should not activated. and make the cooldownText updated with the dash cooldown
Code edit (1 edits merged)
Please save this source code
/****
* Classes
****/
// Define a class for big flying enemies
var BigEnemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
self.speed = Math.random() * 6 + 6;
self.update = function () {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
// Define a class for enemies
var Enemy = Container.expand(function () {
var self = Container.call(this);
// Increase enemy size
var size = Math.random() * 0.5 + 0.5;
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: size,
scaleY: size
});
// Increase enemy speed
self.speed = Math.random() * 4 + 4;
self.update = function () {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.jumpHeight = 30;
self.isJumping = false;
self.velocityY = 0;
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.6; // Decreased gravity effect by 30%
if (self.y >= 2732 / 2) {
// Ground level
self.y = 2732 / 2;
self.isJumping = false;
self.velocityY = 0;
self.canDoubleJump = false; // Reset double jump when player lands
self.canDoubleDash = true; // Reset double dash when player lands
self.canDoubleJump = false; // Reset double jump
self.canDoubleDash = true; // Reset double dash when player lands
self.isJumping = false; // Reset normal jump when player lands
}
}
};
self.dashBack = function () {
if (!self.isDashing || self.canDoubleDash) {
if (self.isDashing && self.canDoubleDash) {
self.canDoubleDash = false;
self.x -= 350; // Second dash back is shorter
}
if (self.canDoubleDash) {
self.canDoubleDash = false;
} else {
self.isDashing = true;
}
self.dashTimer = 100;
LK.getSound('dash_sfx').play(); // Play dash sound effect
self.oldX = self.x;
self.x -= 300; // Increase dash distance
}
};
self.jump = function () {
if (!self.isJumping && self.y >= 2732 / 2) {
self.isJumping = true;
self.velocityY = -self.jumpHeight * 1.2;
}
};
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7; // Decreased gravity effect by 30%
if (self.y >= 2732 / 2) {
// Ground level
self.y = 2732 / 2;
self.isJumping = false;
self.velocityY = 0;
}
}
if (self.isDashing) {
self.dashTimer--;
if (self.dashTimer == 0) {
// Increase dash cooldown
self.isDashing = false;
self.x = self.oldX;
}
}
};
});
// Define a class for managing player health
var PlayerHealth = Container.expand(function () {
var self = Container.call(this);
self.lives = 3;
self.hearts = [];
// Create heart icons
for (var i = 0; i < self.lives; i++) {
var heart = self.attachAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
heart.x = 50 + i * 110; // Position hearts with some spacing
heart.y = 50;
self.hearts.push(heart);
}
// Method to decrease lives
self.decreaseLife = function () {
if (self.lives > 0) {
self.lives--;
self.hearts[self.lives].visible = false;
}
};
// Method to check if player is out of lives
self.isGameOver = function () {
return self.lives <= 0;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Initialize player health and display heart icons
var playerHealth = game.addChild(new PlayerHealth());
playerHealth.hearts.forEach(function (heart, index) {
heart.x = 100 + index * 110; // Position hearts with some spacing
heart.y = 100;
game.addChild(heart);
});
// Draw white rectangles on screen to indicate where to touch
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
background.x = 0;
background.y = 0;
var leftTouchArea = game.addChild(LK.getAsset('leftTouchArea', {
anchorX: 0,
anchorY: 0
}));
var rightTouchArea = game.addChild(LK.getAsset('rightTouchArea', {
anchorX: 0,
anchorY: 0
}));
leftTouchArea.alpha = 0.7;
leftTouchArea.y = 1474;
leftTouchArea.x = 137;
rightTouchArea.alpha = 0.7;
rightTouchArea.x = 1161;
rightTouchArea.y = 1474;
// Add jump and dash icons to the buttons
var jumpIcon = game.addChild(LK.getAsset('player', {
anchorX: 0.5,
anchorY: 0.5
}));
jumpIcon.x = rightTouchArea.x + rightTouchArea.width / 2;
jumpIcon.y = rightTouchArea.y + rightTouchArea.height / 2;
jumpIcon.scaleX = 2;
jumpIcon.scaleY = 2;
var dashIcon = game.addChild(LK.getAsset('player', {
anchorX: 0.5,
anchorY: 0.5
}));
dashIcon.x = leftTouchArea.x + leftTouchArea.width / 2;
dashIcon.y = leftTouchArea.y + leftTouchArea.height / 2;
dashIcon.scaleX = 3;
dashIcon.scaleY = 3;
dashIcon.alpha = 0.7;
// Initialize player
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('0', {
size: 100,
fill: 0x000000
});
// Add a new Text2 object to display the cooldown of Dash
var cooldownText = new Text2('0', {
anchorX: 0.5,
anchorY: 0.5,
size: 175,
fill: 0x0000000
});
// Add the cooldown text to the game GUI at the middle of dash button
game.addChild(cooldownText);
cooldownText.x = leftTouchArea.x + leftTouchArea.width / 4;
cooldownText.y = leftTouchArea.y + leftTouchArea.height / 2;
// Add the score text to the game GUI at the top right of the screen
game.addChild(scoreText);
scoreText.x = 2048 / 2;
scoreText.y = 100;
// Add control instructions to the game screen
var controlText = new Text2('Tap right to jump, tap left to dash back', {
anchorX: 25,
anchorY: 0.5,
size: 100,
fill: 0x000000
});
game.addChild(controlText);
controlText.x = 2048 / 9;
controlText.y = 2620;
// Handle game updates
game.update = function () {
player.update();
// Update the cooldown text with the dash cooldown
cooldownText.setText(player.isDashing ? player.dashTimer : 100);
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy;
if (Math.random() < 0.2) {
// 20% chance to spawn a big enemy
enemy = new BigEnemy();
enemy.y = 2732 / 4;
} else {
enemy = new Enemy();
enemy.y = 2732 / 2;
}
enemy.x = 2096;
enemies.push(enemy);
game.addChild(enemy);
// Randomize the spawn interval for the next enemy
enemySpawnInterval = Math.floor(Math.random() * 100) + 50;
enemySpawnCounter = 0;
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
LK.effects.flashScreen(0xff0000, 1000);
playerHealth.decreaseLife();
if (playerHealth.isGameOver()) {
LK.showGameOver();
}
} else if (player.x > enemies[j].x && !enemies[j].passed) {
enemies[j].passed = true;
LK.setScore(LK.getScore() + (enemies[j] instanceof BigEnemy ? 2 : 1)); // Big enemies give 2 points
scoreText.setText(LK.getScore());
}
}
};
// Play background music
LK.playMusic('main_theme');
// Handle player jump
game.down = function (x, y, obj) {
if (x < 1024 && y > 1366) {
player.dashBack();
} else {
player.jump();
LK.getSound('jump_sfx').play(); // Play jump sound effect
}
}; ===================================================================
--- original.js
+++ change.js
@@ -148,10 +148,15 @@
/****
* Game Code
****/
-// Initialize player health
+// Initialize player health and display heart icons
var playerHealth = game.addChild(new PlayerHealth());
+playerHealth.hearts.forEach(function (heart, index) {
+ heart.x = 100 + index * 110; // Position hearts with some spacing
+ heart.y = 100;
+ game.addChild(heart);
+});
// Draw white rectangles on screen to indicate where to touch
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0