User prompt
Her 10 saniyede bir power up kutusu gelir
User prompt
Please fix the bug: 'TypeError: player.clone is not a function' in or related to this line: 'var clone = player.clone();' Line Number: 177
User prompt
Please fix the bug: 'TypeError: clearTimeout is not a function' in or related to this line: 'clearTimeout(powerUpTimeout);' Line Number: 104
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'scoreBoost')' in or related to this line: 'return player.dataset.scoreBoost = 'true';' Line Number: 169
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'powerUpTimeout = setTimeout(function () {' Line Number: 108
User prompt
Please fix the bug: 'ReferenceError: activePowerUp is not defined' in or related to this line: 'if (activePowerUp) {' Line Number: 102
User prompt
Please fix the bug: 'ReferenceError: powerUpEffects is not defined' in or related to this line: 'self.type = Object.keys(powerUpEffects)[Math.floor(Math.random() * Object.keys(powerUpEffects).length)];' Line Number: 100
User prompt
const character = document.getElementById('character'); const scene = document.getElementById('gameScene'); let activePowerUp = null; let powerUpTimeout = null; const powerUpEffects = { enlarge: { apply: () => character.style.transform = 'scale(4)', reset: () => character.style.transform = 'scale(1)' }, speed: { apply: () => character.dataset.speed = 10, reset: () => character.dataset.speed = 5 }, scoreBoost: { apply: () => character.dataset.scoreBoost = 'true', reset: () => character.dataset.scoreBoost = 'false' }, clone: { apply: () => { const clone = character.cloneNode(true); clone.id = 'clone'; clone.style.opacity = '0.5'; scene.appendChild(clone); }, reset: () => { const clone = document.getElementById('clone'); if (clone) clone.remove(); } } }; // Power-up kutusu oluşturur ve düşürür function spawnFallingPowerUp() { const existing = document.querySelector('.powerUp'); if (existing) existing.remove(); const powerUp = document.createElement('div'); powerUp.className = 'powerUp'; const x = Math.random() * (scene.clientWidth - 50); powerUp.style.left = `${x}px`; powerUp.style.top = `-60px`; scene.appendChild(powerUp); let y = -60; const fall = setInterval(() => { y += 4; powerUp.style.top = `${y}px`; if (y > scene.clientHeight) { clearInterval(fall); powerUp.remove(); Koda ekle
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'down')' in or related to this line: 'downButton.down = function (x, y, obj) {' Line Number: 116
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'on')' in or related to this line: 'downButton.on('pointerdown', function () {' Line Number: 116
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'down')' in or related to this line: 'downButton.down = function () {' Line Number: 116
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'down')' in or related to this line: 'downButton.down = function (x, y, obj) {' Line Number: 116
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'down')' in or related to this line: 'downButton.down = function (x, y, obj) {' Line Number: 116
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'on')' in or related to this line: 'downButton.on('down', function () {' Line Number: 116
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'down')' in or related to this line: 'downButton.down = function () {' Line Number: 116
User prompt
const character = document.getElementById('character'); const downButton = document.getElementById('downButton'); const originalImage = 'character.png'; // Normal görsel const downImage = 'character_down.png'; // Aşağı hareket görseli downButton.addEventListener('mousedown', () => { character.src = downImage; moveDown(); }); downButton.addEventListener('mouseup', () => { character.src = originalImage; }); function moveDown() { let top = parseInt(getComputedStyle(character).top); character.style.top = `${top + 50}px`; // İstediğin kadar düşür } Koda ekle
User prompt
Power up kutusu sahnenin yukarısından aşağıya doğru yavaşça insin
User prompt
Please fix the bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'querySelectorAll')' in or related to this line: 'document.querySelectorAll('.powerUp').forEach(function (p) {' Line Number: 120
User prompt
let character = document.getElementById('character'); let scene = document.getElementById('gameScene'); let powerUpActive = false; let powerUpTimer; // Süpriz kutu oluştur function createPowerUp() { // Önceki kutuları sil document.querySelectorAll('.powerUp').forEach(p => p.remove()); let powerUp = document.createElement('div'); powerUp.className = 'powerUp'; let x = Math.random() * (scene.clientWidth - 50); let y = Math.random() * (scene.clientHeight - 50); powerUp.style.left = `${x}px`; powerUp.style.top = `${y}px`; scene.appendChild(powerUp); } // Çarpışma kontrolü function checkCollision() { let powerUp = document.querySelector('.powerUp'); if (!powerUp || powerUpActive) return; let c = character.getBoundingClientRect(); let p = powerUp.getBoundingClientRect(); if (c.left < p.right && c.right > p.left && c.top < p.bottom && c.bottom > p.top) { activateRandomEffect(); powerUp.remove(); } } // Rastgele özellik uygula function activateRandomEffect() { powerUpActive = true; let r = Math.floor(Math.random() * 4); switch (r) { case 0: character.style.transform = 'scale(4)'; break; case 1: character.dataset.speed = 10; break; case 2: character.dataset.scoreBoost = 'true'; break; case 3: let clone = character.cloneNode(true); clone.classList.add('clone'); scene.appendChild(clone); break; } powerUpTimer = setTimeout(() => { character.style.transform = 'scale(1)'; character.dataset.speed = 5; character.dataset.scoreBoost = 'false'; document.querySelectorAll('.clone').forEach(c => c.remove()); powerUpActive = false; }, 30000); } // 40 saniyede bir kutu oluştur setInterval(createPowerUp, 40000); // Oyun döngüsü function gameLoop() { checkCollision(); requestAnimationFrame(gameLoop); } gameLoop(); Koda ekle
User prompt
Please fix the bug: 'Timeout.tick error: setTimeout is not a function' in or related to this line: 'powerUpTimeout = setTimeout(function () {' Line Number: 179
User prompt
Please fix the bug: 'requestAnimationFrame is not a function' in or related to this line: 'requestAnimationFrame(gameLoop); // Continuously run the game loop' Line Number: 252
User prompt
let score = 0; // Başlangıç skoru let powerUpDuration = 30000; // Özelliklerin geçerli olacağı süre (30 saniye) let powerUpActive = false; // Özelliklerin aktif olup olmadığını kontrol et let powerUpTimeout; // Özellik süresi let powerUpSpeed = 3; // Süpriz kutuların düşme hızı // Süpriz kutuları tutacak dizi let powerUps = []; // Süpriz kutu oluşturma fonksiyonu function createPowerUp() { let powerUp = document.createElement('div'); powerUp.classList.add('powerUp'); // Kutunun konumunu üstten başlat let startX = Math.random() * window.innerWidth; let startY = -40; // Kutunun başlangıç Y pozisyonu, yani üstten biraz dışarıda powerUp.style.left = `${startX}px`; powerUp.style.top = `${startY}px`; // Kutuyu sahneye ekle document.getElementById('gameScene').appendChild(powerUp); // Kutuyu array'e ekle powerUps.push(powerUp); } // Süpriz kutuya çarpma kontrolü ve özellik kazandırma function checkPowerUpCollision(character) { powerUps.forEach(powerUp => { let characterRect = character.getBoundingClientRect(); let powerUpRect = powerUp.getBoundingClientRect(); // Eğer karakter kutuya çarparsa if (characterRect.left < powerUpRect.right && characterRect.right > powerUpRect.left && characterRect.top < powerUpRect.bottom && characterRect.bottom > powerUpRect.top) { // Özellikleri aktif et activatePowerUp(character); // Kutuyu sahneden kaldır powerUp.remove(); } }); } // Özellikleri aktif etme fonksiyonu function activatePowerUp(character) { if (powerUpActive) return; // Eğer zaten aktifse, yeni özellik kazandırma powerUpActive = true; // Rastgele bir özellik seç let randomFeature = Math.floor(Math.random() * 5); // 5 farklı özellik switch (randomFeature) { case 0: // Karakterin boyutunun 4 katına çıkması character.style.transform = 'scale(4)'; break; case 1: // Karakterin daha hızlı hareket etmesi character.speed = 10; // Varsayılan hızdan daha hızlı break; case 2: // Skorun daha hızlı artması increaseScoreRate(true); break; case 3: // Karakterin klonunun olması createCharacterClone(character); break; case 4: // Karakterin uçması (yukarı hareket etme) character.canFly = true; break; } // 30 saniye sonra özellikleri devre dışı bırak powerUpTimeout = setTimeout(() => { deactivatePowerUp(character); }, powerUpDuration); } // Özellikleri devre dışı bırakma function deactivatePowerUp(character) { powerUpActive = false; // Özellikleri geri al character.style.transform = 'scale(1)'; // Boyut eski haline dönsün character.speed = 5; // Varsayılan hız increaseScoreRate(false); // Skor hızı normalleşsin character.canFly = false; // Uçma özelliği gitsin // Klonları sil let clones = document.querySelectorAll('.clone'); clones.forEach(clone => clone.remove()); } // Skor hızını artırma/değiştirme fonksiyonu let scoreMultiplier = 1; function increaseScoreRate(isActive) { if (isActive) { scoreMultiplier = 2; // Skor 2 katına çıksın } else { scoreMultiplier = 1; // Skor normal hıza dönsün } } // Karakterin klonunu oluşturma function createCharacterClone(character) { let clone = document.createElement('div'); clone.classList.add('clone'); clone.style.width = `${character.offsetWidth}px`; clone.style.height = `${character.offsetHeight}px`; clone.style.position = 'absolute'; clone.style.left = `${character.offsetLeft + 50}px`; // Karakterin biraz yanında clone.style.top = `${character.offsetTop}px`; document.getElementById('gameScene').appendChild(clone); // Klon karakteri takip etsin let cloneSpeed = 5; // Klonun hareket hızı function cloneMovement() { clone.style.left = `${clone.offsetLeft + cloneSpeed}px`; if (clone.offsetLeft > window.innerWidth) { // Ekranın dışına çıkarsa, klonu sil clone.remove(); } } setInterval(cloneMovement, 16); // Klon hareketini her 16ms'de bir güncelle } // Skor arttıkça süpriz kutularının düşmesini sağla function checkScoreForPowerUp() { if (score % 20 === 0) { // 20 puanda bir kutu ekleyelim createPowerUp(); // Kutuyu oluştur } } // Süpriz kutu hareketi - Yukarıdan aşağıya doğru hareket ettir function movePowerUps() { powerUps.forEach(powerUp => { let currentTop = parseFloat(powerUp.style.top); powerUp.style.top = `${currentTop + powerUpSpeed}px`; // Eğer kutu ekranın altına kadar geldiyse, kutuyu sil if (currentTop > window.innerHeight) { powerUp.remove(); } }); } // Oyun döngüsünde yapılacak işlemler function gameLoop() { let character = document.getElementById('character'); checkPowerUpCollision(character); // Çarpma kontrolü checkScoreForPowerUp(); // Skor durumu kontrolü (20 puanda bir kutu ekle) movePowerUps(); // Süpriz kutularının hareketini sağla requestAnimationFrame(gameLoop); // Sürekli olarak oyun döngüsünü çalıştır } // Oyun döngüsünü başlat gameLoop(); Kodu ekle
User prompt
Please fix the bug: 'requestAnimationFrame is not a function' in or related to this line: 'requestAnimationFrame(gameLoop);' Line Number: 279
User prompt
let powerUpDuration = 30000; // Özelliklerin geçerli olacağı süre (30 saniye) let powerUpActive = false; // Özelliklerin aktif olup olmadığını kontrol et let powerUpTimeout; // Özellik süresi // Süpriz kutuları tutacak dizi let powerUps = []; // Süpriz kutu oluşturma fonksiyonu function createPowerUp() { let powerUp = document.createElement('div'); powerUp.classList.add('powerUp'); // Kutunun konumunu rastgele belirle let startX = Math.random() * window.innerWidth; let startY = Math.random() * window.innerHeight; powerUp.style.left = `${startX}px`; powerUp.style.top = `${startY}px`; // Kutuyu sahneye ekle document.getElementById('gameScene').appendChild(powerUp); // Kutuyu array'e ekle powerUps.push(powerUp); } // Süpriz kutuya çarpma kontrolü ve özellik kazandırma function checkPowerUpCollision(character) { powerUps.forEach(powerUp => { let characterRect = character.getBoundingClientRect(); let powerUpRect = powerUp.getBoundingClientRect(); // Eğer karakter kutuya çarparsa if (characterRect.left < powerUpRect.right && characterRect.right > powerUpRect.left && characterRect.top < powerUpRect.bottom && characterRect.bottom > powerUpRect.top) { // Özellikleri aktif et activatePowerUp(character); // Kutuyu sahneden kaldır powerUp.remove(); } }); } // Özellikleri aktif etme fonksiyonu function activatePowerUp(character) { if (powerUpActive) return; // Eğer zaten aktifse, yeni özellik kazandırma powerUpActive = true; // Rastgele bir özellik seç let randomFeature = Math.floor(Math.random() * 5); // 5 farklı özellik switch (randomFeature) { case 0: // Karakterin boyutunun 4 katına çıkması character.style.transform = 'scale(4)'; break; case 1: // Karakterin daha hızlı hareket etmesi character.speed = 10; // Varsayılan hızdan daha hızlı break; case 2: // Skorun daha hızlı artması increaseScoreRate(true); break; case 3: // Karakterin klonunun olması createCharacterClone(character); break; case 4: // Karakterin uçması (yukarı hareket etme) character.canFly = true; break; } // 30 saniye sonra özellikleri devre dışı bırak powerUpTimeout = setTimeout(() => { deactivatePowerUp(character); }, powerUpDuration); } // Özellikleri devre dışı bırakma function deactivatePowerUp(character) { powerUpActive = false; // Özellikleri geri al character.style.transform = 'scale(1)'; // Boyut eski haline dönsün character.speed = 5; // Varsayılan hız increaseScoreRate(false); // Skor hızı normalleşsin character.canFly = false; // Uçma özelliği gitsin // Klonları sil let clones = document.querySelectorAll('.clone'); clones.forEach(clone => clone.remove()); } // Skor hızını artırma/değiştirme fonksiyonu let scoreMultiplier = 1; function increaseScoreRate(isActive) { if (isActive) { scoreMultiplier = 2; // Skor 2 katına çıksın } else { scoreMultiplier = 1; // Skor normal hıza dönsün } } // Karakterin klonunu oluşturma function createCharacterClone(character) { let clone = document.createElement('div'); clone.classList.add('clone'); clone.style.width = `${character.offsetWidth}px`; clone.style.height = `${character.offsetHeight}px`; clone.style.position = 'absolute'; clone.style.left = `${character.offsetLeft + 50}px`; // Karakterin biraz yanında clone.style.top = `${character.offsetTop}px`; document.getElementById('gameScene').appendChild(clone); // Klon karakteri takip etsin let cloneSpeed = 5; // Klonun hareket hızı function cloneMovement() { clone.style.left = `${clone.offsetLeft + cloneSpeed}px`; if (clone.offsetLeft > window.innerWidth) { // Ekranın dışına çıkarsa, klonu sil clone.remove(); } } setInterval(cloneMovement, 16); // Klon hareketini her 16ms'de bir güncelle } // Süpriz kutuları yaratmak için belirli aralıklarla çalıştır setInterval(createPowerUp, 5000); // Her 5 saniyede bir yeni kutu oluştur // Oyun döngüsünde karakterle çarpma kontrolü function gameLoop() { let character = document.getElementById('character'); checkPowerUpCollision(character); // Çarpma kontrolü requestAnimationFrame(gameLoop); // Sürekli olarak oyun döngüsünü çalıştır } // Oyun döngüsünü başlat gameLoop(); Koda ekle
User prompt
Dikenler tüm sol kenarda olacak
/**** * 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() * 2 + 1; // Random speed between 1 and 3 self.update = function () { self.x -= self.speed; self.y += Math.sin(self.x / 100) * 10; // Sine wave pattern 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 = 5; self.jumpHeight = 15; self.isJumping = false; self.velocityY = 0; self.update = function () { 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; } } 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; } } }; 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 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 ****/ // 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 gravity = 0.5; var windSpeed = 2; // Define wind speed for horizontal movement // Initialize player at the center of the screen var player = game.addChild(new 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 // 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 - 50; // Bottom edge minus button height and margin // Initialize enemies var enemies = []; var enemySpawnInterval = 200; 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; }; downButton.up = function () { isPressingDown = false; }; // Update player movement based on button presses function updatePlayerMovement() { if (isPressingUp) { player.velocityY = -10; player.x += 2; // Move right slowly by 2 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 for updating player movement LK.setInterval(function () { player.update(); }, 16); // Handle game updates game.update = function () { player.update(); player.x -= windSpeed; // Apply wind effect to move player left // Spawn enemies enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { 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); enemySpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j])) { enemies[j].destroy(); // Remove enemy from the scene enemies.splice(j, 1); // Remove enemy from the array LK.setScore(LK.getScore() + 1); // Increase score by 1 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 } } } }; // 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() * 2 + 1; // Random speed between 1 and 3
self.update = function () {
self.x -= self.speed;
self.y += Math.sin(self.x / 100) * 10; // Sine wave pattern
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 = 5;
self.jumpHeight = 15;
self.isJumping = false;
self.velocityY = 0;
self.update = function () {
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;
}
}
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;
}
}
};
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 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
****/
// 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 gravity = 0.5;
var windSpeed = 2; // Define wind speed for horizontal movement
// Initialize player at the center of the screen
var player = game.addChild(new 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
// 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 - 50; // Bottom edge minus button height and margin
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 200;
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;
};
downButton.up = function () {
isPressingDown = false;
};
// Update player movement based on button presses
function updatePlayerMovement() {
if (isPressingUp) {
player.velocityY = -10;
player.x += 2; // Move right slowly by 2 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 for updating player movement
LK.setInterval(function () {
player.update();
}, 16);
// Handle game updates
game.update = function () {
player.update();
player.x -= windSpeed; // Apply wind effect to move player left
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
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);
enemySpawnCounter = 0;
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
enemies[j].destroy(); // Remove enemy from the scene
enemies.splice(j, 1); // Remove enemy from the array
LK.setScore(LK.getScore() + 1); // Increase score by 1
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
}
}
}
};
// Handle player jump
game.down = function (x, y, obj) {
player.jump();
};