User prompt
Düşman daha ağırlıklı gelsin
User prompt
Düşmanlarınsinüs eğrisinin çapı iki katına çıksın
User prompt
Düşmanlar daha yavaş hareket etsin yer çekimi düşmanlara artsın
User prompt
Sağ butonu biraz yukarı çıkart
User prompt
Sağ butonu biraz daha yukarı çıkar
User prompt
Biraz daha yukarı
User prompt
Biraz daha yukarı
User prompt
Biraz daha yukarı
User prompt
Sağ butonu biraz yukarı çıkar
User prompt
Biraz yukarı
User prompt
Sağ butonu biraz sola kaydır
User prompt
Biraz daha yukarı
User prompt
Biraz da yukarıya doğru
User prompt
Biraz daha sağa
User prompt
Sol butnu sağa al biraz
User prompt
Düşman gelme sayısını azalt
User prompt
Düşmanlar sahnenin üst kısmından dışarı çıkamazsın, sahnenin üst kısmına yaklaşırsa uzaklaşsın
User prompt
Düşmanlar daha yavaş hareket etsin
User prompt
Düşmanlar sahnenin dışına çıkınca silinsin
User prompt
// Düşman karakterlerini oluşturacak fonksiyon function createEnemy() { const enemy = document.createElement("div"); enemy.classList.add("enemy"); // Ortak stil Object.assign(enemy.style, { position: "absolute", top: (window.innerHeight / 2) + Math.random() * (window.innerHeight / 2) + "px", // Ortanın alt kısmı right: "-50px", // Ekranın sol kenarından başlar width: "40px", // Normal enemy boyutu height: "40px", backgroundColor: "black", // Renk borderRadius: "50%", zIndex: "10" }); document.body.appendChild(enemy); // Hareket animasyonu const speed = 3; // Hız function move() { const currentRight = parseFloat(enemy.style.right); if (currentRight < window.innerWidth + 100) { enemy.style.right = (currentRight + speed) + "px"; requestAnimationFrame(move); } else { enemy.remove(); // Ekrandan kaybolduğunda temizleme } } move(); } // Normal enemy'yi her 2 saniyede bir ekle setInterval(() => { createEnemy(); // enemy her 2 saniyede bir }, 2000); Koda ekle
User prompt
Enemylerin sinüs eğrisini çapını büyült
User prompt
// Düşman karakterlerini oluşturacak fonksiyon function createEnemy(type = "enemy") { const enemy = document.createElement("div"); enemy.classList.add(type); // Ortak stil Object.assign(enemy.style, { position: "absolute", top: Math.random() * window.innerHeight + "px", // Rastgele konumda başlatma right: "-50px", // Ekranın sol kenarından başlar width: type === "newEnemy" ? "60px" : "40px", // boyut farkı height: type === "newEnemy" ? "60px" : "40px", // boyut farkı backgroundColor: type === "newEnemy" ? "purple" : "black", // renk farkı borderRadius: "50%", zIndex: "10" }); document.body.appendChild(enemy); // Hareket animasyonu const speed = type === "newEnemy" ? 1.5 : 3; // hız farkı function move() { const currentRight = parseFloat(enemy.style.right); if (currentRight < window.innerWidth + 100) { enemy.style.right = (currentRight + speed) + "px"; requestAnimationFrame(move); } else { enemy.remove(); // Ekrandan kaybolduğunda temizleme } } move(); } // Düşmanları belirli aralıklarla sahneye ekleme setInterval(() => { createEnemy("enemy"); // Normal enemy her 2 saniyede bir }, 2000); setInterval(() => { createEnemy("newEnemy"); // newEnemy her 10 saniyede bir }, 10000); Kodu ekle
User prompt
Kalpleri sahnenin ortasına yerleştir
User prompt
Please fix the bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'backgroundColor')' in or related to this line: 'return box.style.backgroundColor === "red";' Line Number: 222
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'body')' in or related to this line: 'document.body.appendChild(this.container);' Line Number: 218
/**** * Classes ****/ // Define a class for the down button var DownButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('downButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (player.y + 100 <= 2732) { player.y += 100; } }; }); // 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 = Math.random() * 3 + 2; // Random speed between 2 and 5 self.update = function () { self.x -= self.speed; self.y += Math.sin(self.x / 100) * 10; // Sine wave pattern if (self.x < -50) { if (!self.lastWasAtLeftEdge) { LK.setScore(LK.getScore() - 2); // Decrease score by 2 scoreTxt.setText(LK.getScore()); // Update the score text display } self.lastWasAtLeftEdge = true; self.destroy(); } else { self.lastWasAtLeftEdge = false; } }; }); var Flower = Container.expand(function () { var self = Container.call(this); var flowerGraphics = self.attachAsset('flower', { anchorX: 0.5, anchorY: 0.5 }); self.speed = Math.random() * 5 + 3; // Random speed between 3 and 8 self.update = function () { self.y += self.speed; self.x += Math.sin(self.y / 100) * 10; // Sine wave pattern flowerGraphics.rotation += 0.05; // Rotate the flower if (self.y > 2732) { self.destroy(); } }; }); // Define a class for the left button var LeftButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('leftButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { character.speedX = -moveSpeed; }; self.up = function (x, y, obj) { character.speedX = 0; }; }); var NewEnemy = Container.expand(function () { var self = Container.call(this); var newEnemyGraphics = self.attachAsset('newEnemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = Math.random() * 4 + 3; // Random speed between 3 and 7 self.update = function () { self.y += self.speed; // Move downwards self.x += Math.sin(self.y / 100) * 10; // Sinusoidal horizontal movement if (self.y > 2732) { // If it goes off the bottom of the screen 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 = 5; self.jumpHeight = 15; self.isJumping = false; self.velocityY = 0; self.update = function () { // Check if the player is outside the scene boundaries if (self.isJumping) { self.y -= self.velocityY; self.velocityY -= gravity; if (self.velocityY <= 0 && self.y < 1366) { self.x += 7; // Move right by 7 units at peak } if (self.y >= 1366) { self.y = 1366; self.isJumping = false; self.velocityY = 0; } } // Check if the player touches the left or right edge of the screen if (self.x <= 0 || self.x >= 2048) { LK.effects.flashScreen(0xff0000, 1000); // Flash red light across the entire scene LK.showGameOver(); // End the game if the player touches the edges } self.x += self.speedX; if (self.isJumping) { self.y -= self.velocityY; self.velocityY -= gravity; if (self.y >= 1366) { self.y = 1366; self.isJumping = false; self.velocityY = 0; } // Check if the player touches the top edge of the screen if (self.y <= 0) { LK.effects.flashScreen(0xff0000, 1000); // Flash red light across the entire scene LK.showGameOver(); // End the game if the player touches the top edge } } }; self.jump = function () { if (!self.isJumping && self.y > 0) { self.isJumping = true; self.velocityY = 20; // Set initial jump velocity self.speedX = 0; // Reset horizontal speed } }; }); // Define a class for the right button var RightButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('rightButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { character.speedX = moveSpeed; }; self.up = function (x, y, obj) { character.speedX = 0; }; }); // Define a class for the up button var UpButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('upButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { player.jump(); }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Test: Lose a life after 2 seconds var LifeUI = { maxLives: 5, lives: [], container: null, init: function init() { // Create container this.container = new Container(); this.container.x = 2048 - 150; // Right margin this.container.y = 30; // Top margin // Create life boxes for (var i = 0; i < this.maxLives; i++) { var lifeBox = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); lifeBox.scale.set(0.3); // Scale down to fit the UI this.lives.push(lifeBox); this.container.addChild(lifeBox); } LK.gui.top.addChild(this.container); }, loseLife: function loseLife() { var index = this.lives.findIndex(function (box) { return box.style.backgroundColor === "red"; }); if (index !== -1) { this.lives[index].style.backgroundColor = "#444"; } }, resetLives: function resetLives() { this.lives.forEach(function (box) { return box.style.backgroundColor = "red"; }); } }; LK.setTimeout(function () { LifeUI.loseLife(); }, 2000); // Initialize LifeUI at the start of the game LifeUI.init(); // Function to spawn flowers on the screen function spawnFlowers() { // Number of flowers to spawn for (var i = 0; i < Math.floor(Math.random() * 6) + 5; i++) { // Create a new flower object var flower = new Flower(); // Set random initial position flower.x = Math.random() * 2048; // Random horizontal position flower.y = -50; // Start above the screen // Add flower to the game scene game.addChild(flower); } } // Call spawnFlowers at intervals LK.setInterval(spawnFlowers, 5000); // Spawn flowers every 5 seconds // Add the background image to the game var background = LK.getAsset('arkaplan', { anchorX: 0.5, anchorY: 0.5 }); background.x = 2048 / 2; background.y = 2732 / 2; game.addChild(background); // Variable to track game over state var gameOver = false; // Play background music when the game starts LK.playMusic('gameMusic', { volume: 0.8, loop: true }); // Variable to track power-up states var powerUpActive = false; var powerUpCooldown = false; // Function to spawn a super power-up function spawnSuperPowerUp() { if (powerUpActive || powerUpCooldown) { return; } // Create a new power-up asset var powerUp = LK.getAsset('powerUp', { anchorX: 0.5, anchorY: 0.5 }); // Random x position within the scene width var x = Math.random() * (2048 - 50); powerUp.x = x; powerUp.y = -60; // Start above the screen // Add power-up to the game scene game.addChild(powerUp); // Move the power-up downwards var fall = LK.setInterval(function () { powerUp.y += 4; powerUp.x += Math.sin(powerUp.y / 100) * 10; // Sine wave pattern // Remove power-up if it goes off-screen if (powerUp.y > 2732) { LK.clearInterval(fall); powerUp.destroy(); } // Check for collision with player if (player.intersects(powerUp)) { LK.clearInterval(fall); powerUp.destroy(); activateSuperPower(); } }, 16); } // Function to activate the super power function activateSuperPower() { if (powerUpActive) { return; } powerUpActive = true; // Temporarily increase flower spawn rate var originalFlowerInterval = 5000; var increasedFlowerInterval = originalFlowerInterval / 4; // 4x increase var flowerIntervalId = LK.setInterval(spawnFlowers, increasedFlowerInterval); // Revert flower spawn rate after 30 seconds LK.setTimeout(function () { LK.clearInterval(flowerIntervalId); LK.setInterval(spawnFlowers, originalFlowerInterval); }, 30000); powerUpCooldown = true; // Scale up the player player.scale.set(4); // Revert player scale after 30 seconds LK.setTimeout(function () { player.scale.set(1); powerUpActive = false; // Cooldown before another power-up can spawn LK.setTimeout(function () { powerUpCooldown = false; }, 60000); // Set to 1 minute if player collects the power-up }, 30000); } // Attempt to spawn a power-up every 40 seconds, ensuring only one is active at a time if (!powerUpActive && !powerUpCooldown) { LK.setTimeout(spawnSuperPowerUp, 40000); } // Array to hold spikes var spikes = []; // Function to create spikes function createSpikes() { var spikeHeight = 100; // Height of each spike var spikeWidth = 30; // Width of each spike var gap = 50; // Gap between spikes // Create fixed spikes on the left edge of the scene for (var y = 0; y < 2732; y += spikeHeight + gap) { var spike = LK.getAsset('spike', { anchorX: 0.5, anchorY: 0.5 }); // Spike starting position (fixed to the left edge) var startX = -spikeWidth; // Left edge var startY = y; // Arranged with gap between them spike.x = startX; spike.y = startY; // Add spikes to the game scene game.addChild(spike); // Add spike object to the array spikes.push(spike); } } // Create spikes (only run once) createSpikes(); var clouds = []; // Function to create a cloud function createCloud() { // Create a new cloud asset var cloud = LK.getAsset('cloud', { anchorX: 0.5, anchorY: 0.5 }); // Cloud starting position (from the right) var startX = 2048 + 100; // Cloud starts from the right var startY = Math.random() * 200; // Random height (upper part) cloud.x = startX; cloud.y = startY; // Add cloud to the game scene game.addChild(cloud); // Start moving the cloud moveCloud(cloud); // Add cloud object to the array clouds.push(cloud); } // Function to move the cloud to the left function moveCloud(cloud) { var speed = 1; // Cloud movement speed LK.setInterval(function () { // Cloud moves to the left cloud.x -= speed; // If the cloud reaches the left edge of the screen, remove it if (cloud.x < -100) { // When the cloud is completely off-screen cloud.destroy(); // Remove the cloud clouds.splice(clouds.indexOf(cloud), 1); // Remove from array } }, 16); // Update every 16ms for 60 FPS } // Create new clouds at intervals LK.setInterval(createCloud, 3000); // Add a new cloud every 3 seconds // Create and initialize the score text display var scoreTxt = new Text2('0', { size: 200, // Increased size fill: 0x000000 // Black color for the score text }); // Set the initial score text to zero scoreTxt.setText(LK.getScore()); // Center the score text horizontally at the top of the screen scoreTxt.anchor.set(0.5, 0); // Anchor at the center of the top edge // Add the score text to the GUI overlay at the top-center position LK.gui.top.addChild(scoreTxt); var moveSpeed = 5; // Speed for character movement var gravity = 0.7; // Further increased gravity for more effect var windSpeed = 4; // Define wind speed for horizontal movement // Initialize player at the center of the screen var player = game.addChild(new Player()); var character = player; // Define character as a reference to player player.x = 1024; player.y = 1366; player.speedX = 0; // Prevent movement on spawn player.speedY = 0; // Prevent movement on spawn player.isJumping = false; player.velocityY = 0; // Initialize up button var upButton = game.addChild(new UpButton()); upButton.x = 2048 / 2 - 500; // Middle point's x coordinate minus button width upButton.y = 2732 / 2 + 600; // Middle point's y coordinate plus button height plus additional 100 pixels // Add scaling effect to the up button when pressed and released upButton.down = function () { upButton.scale.set(0.9); // Scale down by 10% }; upButton.up = function () { upButton.scale.set(1); // Reset to original size }; upButton.move = function () { upButton.scale.set(1); // Reset to original size if mouse leaves }; // Initialize left button var leftButton = game.addChild(new LeftButton()); leftButton.x = 150; // Move slightly more to the right leftButton.y = 2732 - 150; // Position near the bottom // Initialize right button var rightButton = game.addChild(new RightButton()); rightButton.x = 2048 - 200; // Move slightly to the left rightButton.y = 2732 - 150; // Move slightly upwards // Initialize down button var downButton = game.addChild(new DownButton()); downButton.x = 2048 - 500 - 50; // Right edge minus button width and margin downButton.y = 2732 - 500 - 250; // Move the down button slightly more upwards // Initialize enemies var enemies = []; var enemySpawnInterval = 80; // Decrease interval to increase spawn rate var enemySpawnIncreaseInterval = 40000; // Increase spawn rate every 40 seconds var enemySpawnCounter = 0; // Variables to track button presses var isPressingUp = false; var isPressingDown = false; // Event listeners for button presses upButton.down = function () { isPressingUp = true; }; upButton.up = function () { isPressingUp = false; }; downButton.down = function () { isPressingDown = true; character.removeChild(character.children[0]); // Remove current player image character.attachAsset('player_down', { anchorX: 0.5, anchorY: 0.5 }); // Change character image to 'dow' character.y += 50; // Move character down by 50px }; downButton.up = function () { isPressingDown = false; character.removeChild(character.children[0]); // Remove current player_down image character.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // Revert character image to original character.y -= 50; // Move character back to original position }; // Update player movement based on button presses function updatePlayerMovement() { if (isPressingUp) { player.velocityY = -20; // Increase upward speed player.x += 8; // Move right by 8 units } // Removed upward movement when the down button is pressed player.y += player.velocityY; if (!isPressingUp && !isPressingDown) { player.velocityY += gravity; } if (player.y > 1366) { player.y = 1366; player.velocityY = 0; } if (player.y < 0) { player.y = 0; player.velocityY = 0; } } // Set interval for updating player movement LK.setInterval(updatePlayerMovement, 16); // Set interval to increase enemy spawn rate LK.setInterval(function () { if (enemySpawnInterval > 20) { // Ensure a minimum spawn interval enemySpawnInterval -= 10; // Decrease interval to increase spawn rate } }, enemySpawnIncreaseInterval); // Set interval for updating player movement LK.setInterval(function () { player.update(); }, 16); // Handle game updates game.update = function () { player.update(); for (var i = game.children.length - 1; i >= 0; i--) { if (game.children[i] instanceof Flower) { var flower = game.children[i]; flower.update(); if (player.intersects(flower)) { flower.destroy(); // Remove flower from the scene LK.setScore(LK.getScore() + 1); // Increase score by 1 scoreTxt.setText(LK.getScore()); // Update the score text display } } } // Check if the player is completely out of the scene if (player.x < -player.width || player.x > 2048 + player.width || player.y < -player.height || player.y > 2732 + player.height) { LK.showGameOver(); // End the game if the player is completely out of bounds } player.x -= windSpeed; // Apply wind effect to move player left // Spawn enemies enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval * 6 && !powerUpActive) { // Increase interval to reduce new enemy spawn rate var enemy = new Enemy(); enemy.x = 2048; // Spawn from the right edge of the screen enemy.y = Math.random() * (2732 / 2) + 100; // Random y position slightly lower from the top half of the screen enemies.push(enemy); game.addChild(enemy); var newEnemy = new NewEnemy(); newEnemy.x = Math.random() * 2048; // Random horizontal position newEnemy.y = -50; // Start from the top edge of the screen enemies.push(newEnemy); game.addChild(newEnemy); enemySpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j])) { if (enemies[j] instanceof NewEnemy) { LK.effects.flashScreen(0xff0000, 1000); // Flash red light across the entire scene if (LK.ticks >= 3600) { // 60 seconds * 60 FPS LK.setScore(LK.getScore() - 10); // Decrease score by 10 after 60 seconds } else { LK.setScore(LK.getScore() - 3); // Decrease score by 3 for newEnemy } if (LK.getScore() < 0) { LK.getSound('End').play(); // Play 'End' sound LK.showGameOver(); // End the game if the score goes below zero } } else { LK.setScore(LK.getScore() + 2); // Increase score by 2 for regular enemies } enemies[j].destroy(); // Remove enemy from the scene enemies.splice(j, 1); // Remove enemy from the array scoreTxt.setText(LK.getScore()); // Update the score text display if (LK.getScore() % 20 === 0) { LK.effects.flashScreen(0x00FF00, 500); // Flash green on screen for 0.5 seconds enemySpawnInterval = Math.max(20, enemySpawnInterval - 10); // Increase spawn rate by decreasing interval } if (LK.getScore() >= 40) { enemySpawnInterval = Math.max(10, enemySpawnInterval - 5); // Further increase spawn rate when score is 40 or more } } } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); };
/****
* Classes
****/
// Define a class for the down button
var DownButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('downButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (player.y + 100 <= 2732) {
player.y += 100;
}
};
});
// 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 = Math.random() * 3 + 2; // Random speed between 2 and 5
self.update = function () {
self.x -= self.speed;
self.y += Math.sin(self.x / 100) * 10; // Sine wave pattern
if (self.x < -50) {
if (!self.lastWasAtLeftEdge) {
LK.setScore(LK.getScore() - 2); // Decrease score by 2
scoreTxt.setText(LK.getScore()); // Update the score text display
}
self.lastWasAtLeftEdge = true;
self.destroy();
} else {
self.lastWasAtLeftEdge = false;
}
};
});
var Flower = Container.expand(function () {
var self = Container.call(this);
var flowerGraphics = self.attachAsset('flower', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 5 + 3; // Random speed between 3 and 8
self.update = function () {
self.y += self.speed;
self.x += Math.sin(self.y / 100) * 10; // Sine wave pattern
flowerGraphics.rotation += 0.05; // Rotate the flower
if (self.y > 2732) {
self.destroy();
}
};
});
// Define a class for the left button
var LeftButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('leftButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
character.speedX = -moveSpeed;
};
self.up = function (x, y, obj) {
character.speedX = 0;
};
});
var NewEnemy = Container.expand(function () {
var self = Container.call(this);
var newEnemyGraphics = self.attachAsset('newEnemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 4 + 3; // Random speed between 3 and 7
self.update = function () {
self.y += self.speed; // Move downwards
self.x += Math.sin(self.y / 100) * 10; // Sinusoidal horizontal movement
if (self.y > 2732) {
// If it goes off the bottom of the screen
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 = 5;
self.jumpHeight = 15;
self.isJumping = false;
self.velocityY = 0;
self.update = function () {
// Check if the player is outside the scene boundaries
if (self.isJumping) {
self.y -= self.velocityY;
self.velocityY -= gravity;
if (self.velocityY <= 0 && self.y < 1366) {
self.x += 7; // Move right by 7 units at peak
}
if (self.y >= 1366) {
self.y = 1366;
self.isJumping = false;
self.velocityY = 0;
}
}
// Check if the player touches the left or right edge of the screen
if (self.x <= 0 || self.x >= 2048) {
LK.effects.flashScreen(0xff0000, 1000); // Flash red light across the entire scene
LK.showGameOver(); // End the game if the player touches the edges
}
self.x += self.speedX;
if (self.isJumping) {
self.y -= self.velocityY;
self.velocityY -= gravity;
if (self.y >= 1366) {
self.y = 1366;
self.isJumping = false;
self.velocityY = 0;
}
// Check if the player touches the top edge of the screen
if (self.y <= 0) {
LK.effects.flashScreen(0xff0000, 1000); // Flash red light across the entire scene
LK.showGameOver(); // End the game if the player touches the top edge
}
}
};
self.jump = function () {
if (!self.isJumping && self.y > 0) {
self.isJumping = true;
self.velocityY = 20; // Set initial jump velocity
self.speedX = 0; // Reset horizontal speed
}
};
});
// Define a class for the right button
var RightButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('rightButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
character.speedX = moveSpeed;
};
self.up = function (x, y, obj) {
character.speedX = 0;
};
});
// Define a class for the up button
var UpButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('upButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
player.jump();
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Test: Lose a life after 2 seconds
var LifeUI = {
maxLives: 5,
lives: [],
container: null,
init: function init() {
// Create container
this.container = new Container();
this.container.x = 2048 - 150; // Right margin
this.container.y = 30; // Top margin
// Create life boxes
for (var i = 0; i < this.maxLives; i++) {
var lifeBox = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
lifeBox.scale.set(0.3); // Scale down to fit the UI
this.lives.push(lifeBox);
this.container.addChild(lifeBox);
}
LK.gui.top.addChild(this.container);
},
loseLife: function loseLife() {
var index = this.lives.findIndex(function (box) {
return box.style.backgroundColor === "red";
});
if (index !== -1) {
this.lives[index].style.backgroundColor = "#444";
}
},
resetLives: function resetLives() {
this.lives.forEach(function (box) {
return box.style.backgroundColor = "red";
});
}
};
LK.setTimeout(function () {
LifeUI.loseLife();
}, 2000);
// Initialize LifeUI at the start of the game
LifeUI.init();
// Function to spawn flowers on the screen
function spawnFlowers() {
// Number of flowers to spawn
for (var i = 0; i < Math.floor(Math.random() * 6) + 5; i++) {
// Create a new flower object
var flower = new Flower();
// Set random initial position
flower.x = Math.random() * 2048; // Random horizontal position
flower.y = -50; // Start above the screen
// Add flower to the game scene
game.addChild(flower);
}
}
// Call spawnFlowers at intervals
LK.setInterval(spawnFlowers, 5000); // Spawn flowers every 5 seconds
// Add the background image to the game
var background = LK.getAsset('arkaplan', {
anchorX: 0.5,
anchorY: 0.5
});
background.x = 2048 / 2;
background.y = 2732 / 2;
game.addChild(background);
// Variable to track game over state
var gameOver = false;
// Play background music when the game starts
LK.playMusic('gameMusic', {
volume: 0.8,
loop: true
});
// Variable to track power-up states
var powerUpActive = false;
var powerUpCooldown = false;
// Function to spawn a super power-up
function spawnSuperPowerUp() {
if (powerUpActive || powerUpCooldown) {
return;
}
// Create a new power-up asset
var powerUp = LK.getAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
// Random x position within the scene width
var x = Math.random() * (2048 - 50);
powerUp.x = x;
powerUp.y = -60; // Start above the screen
// Add power-up to the game scene
game.addChild(powerUp);
// Move the power-up downwards
var fall = LK.setInterval(function () {
powerUp.y += 4;
powerUp.x += Math.sin(powerUp.y / 100) * 10; // Sine wave pattern
// Remove power-up if it goes off-screen
if (powerUp.y > 2732) {
LK.clearInterval(fall);
powerUp.destroy();
}
// Check for collision with player
if (player.intersects(powerUp)) {
LK.clearInterval(fall);
powerUp.destroy();
activateSuperPower();
}
}, 16);
}
// Function to activate the super power
function activateSuperPower() {
if (powerUpActive) {
return;
}
powerUpActive = true;
// Temporarily increase flower spawn rate
var originalFlowerInterval = 5000;
var increasedFlowerInterval = originalFlowerInterval / 4; // 4x increase
var flowerIntervalId = LK.setInterval(spawnFlowers, increasedFlowerInterval);
// Revert flower spawn rate after 30 seconds
LK.setTimeout(function () {
LK.clearInterval(flowerIntervalId);
LK.setInterval(spawnFlowers, originalFlowerInterval);
}, 30000);
powerUpCooldown = true;
// Scale up the player
player.scale.set(4);
// Revert player scale after 30 seconds
LK.setTimeout(function () {
player.scale.set(1);
powerUpActive = false;
// Cooldown before another power-up can spawn
LK.setTimeout(function () {
powerUpCooldown = false;
}, 60000); // Set to 1 minute if player collects the power-up
}, 30000);
}
// Attempt to spawn a power-up every 40 seconds, ensuring only one is active at a time
if (!powerUpActive && !powerUpCooldown) {
LK.setTimeout(spawnSuperPowerUp, 40000);
}
// Array to hold spikes
var spikes = [];
// Function to create spikes
function createSpikes() {
var spikeHeight = 100; // Height of each spike
var spikeWidth = 30; // Width of each spike
var gap = 50; // Gap between spikes
// Create fixed spikes on the left edge of the scene
for (var y = 0; y < 2732; y += spikeHeight + gap) {
var spike = LK.getAsset('spike', {
anchorX: 0.5,
anchorY: 0.5
});
// Spike starting position (fixed to the left edge)
var startX = -spikeWidth; // Left edge
var startY = y; // Arranged with gap between them
spike.x = startX;
spike.y = startY;
// Add spikes to the game scene
game.addChild(spike);
// Add spike object to the array
spikes.push(spike);
}
}
// Create spikes (only run once)
createSpikes();
var clouds = [];
// Function to create a cloud
function createCloud() {
// Create a new cloud asset
var cloud = LK.getAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
// Cloud starting position (from the right)
var startX = 2048 + 100; // Cloud starts from the right
var startY = Math.random() * 200; // Random height (upper part)
cloud.x = startX;
cloud.y = startY;
// Add cloud to the game scene
game.addChild(cloud);
// Start moving the cloud
moveCloud(cloud);
// Add cloud object to the array
clouds.push(cloud);
}
// Function to move the cloud to the left
function moveCloud(cloud) {
var speed = 1; // Cloud movement speed
LK.setInterval(function () {
// Cloud moves to the left
cloud.x -= speed;
// If the cloud reaches the left edge of the screen, remove it
if (cloud.x < -100) {
// When the cloud is completely off-screen
cloud.destroy(); // Remove the cloud
clouds.splice(clouds.indexOf(cloud), 1); // Remove from array
}
}, 16); // Update every 16ms for 60 FPS
}
// Create new clouds at intervals
LK.setInterval(createCloud, 3000); // Add a new cloud every 3 seconds
// Create and initialize the score text display
var scoreTxt = new Text2('0', {
size: 200,
// Increased size
fill: 0x000000 // Black color for the score text
});
// Set the initial score text to zero
scoreTxt.setText(LK.getScore());
// Center the score text horizontally at the top of the screen
scoreTxt.anchor.set(0.5, 0); // Anchor at the center of the top edge
// Add the score text to the GUI overlay at the top-center position
LK.gui.top.addChild(scoreTxt);
var moveSpeed = 5; // Speed for character movement
var gravity = 0.7; // Further increased gravity for more effect
var windSpeed = 4; // Define wind speed for horizontal movement
// Initialize player at the center of the screen
var player = game.addChild(new Player());
var character = player; // Define character as a reference to player
player.x = 1024;
player.y = 1366;
player.speedX = 0; // Prevent movement on spawn
player.speedY = 0; // Prevent movement on spawn
player.isJumping = false;
player.velocityY = 0;
// Initialize up button
var upButton = game.addChild(new UpButton());
upButton.x = 2048 / 2 - 500; // Middle point's x coordinate minus button width
upButton.y = 2732 / 2 + 600; // Middle point's y coordinate plus button height plus additional 100 pixels
// Add scaling effect to the up button when pressed and released
upButton.down = function () {
upButton.scale.set(0.9); // Scale down by 10%
};
upButton.up = function () {
upButton.scale.set(1); // Reset to original size
};
upButton.move = function () {
upButton.scale.set(1); // Reset to original size if mouse leaves
};
// Initialize left button
var leftButton = game.addChild(new LeftButton());
leftButton.x = 150; // Move slightly more to the right
leftButton.y = 2732 - 150; // Position near the bottom
// Initialize right button
var rightButton = game.addChild(new RightButton());
rightButton.x = 2048 - 200; // Move slightly to the left
rightButton.y = 2732 - 150; // Move slightly upwards
// Initialize down button
var downButton = game.addChild(new DownButton());
downButton.x = 2048 - 500 - 50; // Right edge minus button width and margin
downButton.y = 2732 - 500 - 250; // Move the down button slightly more upwards
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 80; // Decrease interval to increase spawn rate
var enemySpawnIncreaseInterval = 40000; // Increase spawn rate every 40 seconds
var enemySpawnCounter = 0;
// Variables to track button presses
var isPressingUp = false;
var isPressingDown = false;
// Event listeners for button presses
upButton.down = function () {
isPressingUp = true;
};
upButton.up = function () {
isPressingUp = false;
};
downButton.down = function () {
isPressingDown = true;
character.removeChild(character.children[0]); // Remove current player image
character.attachAsset('player_down', {
anchorX: 0.5,
anchorY: 0.5
}); // Change character image to 'dow'
character.y += 50; // Move character down by 50px
};
downButton.up = function () {
isPressingDown = false;
character.removeChild(character.children[0]); // Remove current player_down image
character.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
}); // Revert character image to original
character.y -= 50; // Move character back to original position
};
// Update player movement based on button presses
function updatePlayerMovement() {
if (isPressingUp) {
player.velocityY = -20; // Increase upward speed
player.x += 8; // Move right by 8 units
}
// Removed upward movement when the down button is pressed
player.y += player.velocityY;
if (!isPressingUp && !isPressingDown) {
player.velocityY += gravity;
}
if (player.y > 1366) {
player.y = 1366;
player.velocityY = 0;
}
if (player.y < 0) {
player.y = 0;
player.velocityY = 0;
}
}
// Set interval for updating player movement
LK.setInterval(updatePlayerMovement, 16);
// Set interval to increase enemy spawn rate
LK.setInterval(function () {
if (enemySpawnInterval > 20) {
// Ensure a minimum spawn interval
enemySpawnInterval -= 10; // Decrease interval to increase spawn rate
}
}, enemySpawnIncreaseInterval);
// Set interval for updating player movement
LK.setInterval(function () {
player.update();
}, 16);
// Handle game updates
game.update = function () {
player.update();
for (var i = game.children.length - 1; i >= 0; i--) {
if (game.children[i] instanceof Flower) {
var flower = game.children[i];
flower.update();
if (player.intersects(flower)) {
flower.destroy(); // Remove flower from the scene
LK.setScore(LK.getScore() + 1); // Increase score by 1
scoreTxt.setText(LK.getScore()); // Update the score text display
}
}
}
// Check if the player is completely out of the scene
if (player.x < -player.width || player.x > 2048 + player.width || player.y < -player.height || player.y > 2732 + player.height) {
LK.showGameOver(); // End the game if the player is completely out of bounds
}
player.x -= windSpeed; // Apply wind effect to move player left
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval * 6 && !powerUpActive) {
// Increase interval to reduce new enemy spawn rate
var enemy = new Enemy();
enemy.x = 2048; // Spawn from the right edge of the screen
enemy.y = Math.random() * (2732 / 2) + 100; // Random y position slightly lower from the top half of the screen
enemies.push(enemy);
game.addChild(enemy);
var newEnemy = new NewEnemy();
newEnemy.x = Math.random() * 2048; // Random horizontal position
newEnemy.y = -50; // Start from the top edge of the screen
enemies.push(newEnemy);
game.addChild(newEnemy);
enemySpawnCounter = 0;
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
if (enemies[j] instanceof NewEnemy) {
LK.effects.flashScreen(0xff0000, 1000); // Flash red light across the entire scene
if (LK.ticks >= 3600) {
// 60 seconds * 60 FPS
LK.setScore(LK.getScore() - 10); // Decrease score by 10 after 60 seconds
} else {
LK.setScore(LK.getScore() - 3); // Decrease score by 3 for newEnemy
}
if (LK.getScore() < 0) {
LK.getSound('End').play(); // Play 'End' sound
LK.showGameOver(); // End the game if the score goes below zero
}
} else {
LK.setScore(LK.getScore() + 2); // Increase score by 2 for regular enemies
}
enemies[j].destroy(); // Remove enemy from the scene
enemies.splice(j, 1); // Remove enemy from the array
scoreTxt.setText(LK.getScore()); // Update the score text display
if (LK.getScore() % 20 === 0) {
LK.effects.flashScreen(0x00FF00, 500); // Flash green on screen for 0.5 seconds
enemySpawnInterval = Math.max(20, enemySpawnInterval - 10); // Increase spawn rate by decreasing interval
}
if (LK.getScore() >= 40) {
enemySpawnInterval = Math.max(10, enemySpawnInterval - 5); // Further increase spawn rate when score is 40 or more
}
}
}
};
// Handle player jump
game.down = function (x, y, obj) {
player.jump();
};