User prompt
que el fondo sea un regtangulo
User prompt
que el boton de disparar sea un coete y las balas panes
User prompt
que cada sierto tiempo haya una vida mas en forma de corason ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
que halla un enemigo cada 50
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var localPos = game.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 293
User prompt
que haya un boton para disparar y moverse
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'energyTxt.style.fill = 0x00FF00; // Green' Line Number: 523
User prompt
que hayan mas enemigos ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'energyTxt.style.fill = 0x00FF00; // Green' Line Number: 521
User prompt
que hayan mas variedad de enemigos
User prompt
que los enemigos sean un objeto a parte
User prompt
que hayan mas enemigos
User prompt
que el fondo sea un regtangulo
User prompt
que el fondo sea un regtangulo
User prompt
que el fondo sea un paisage
User prompt
que los enemigos sean un objeto a parte
User prompt
que haya enemigos
User prompt
que el fondo del juego sean cascadas de cafe
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'bullet.x = coffeeCup.x + 100;' Line Number: 373
User prompt
que tenga un menu prinsipal
User prompt
que dispare
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var buttonPos = LK.gui.bottomRight.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 299
User prompt
que la tasa pueda disparar con un botón en pantalla
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'energyTxt.style.fill = 0x00FF00; // Green' Line Number: 522
User prompt
que haya una linea de energia del get pak que si no se agarran puntos se acaba la energia y pierde ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Boss = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 1.5, tint: 0x8B0000 }); self.health = 5; self.x = 1800; self.y = 500; self.moveDirection = 1; self.speed = 3; self.lastSpawnTime = 0; self.update = function () { self.y += self.moveDirection * self.speed; if (self.y <= 300) { self.y = 300; self.moveDirection = 1; } if (self.y >= 2400) { self.y = 2400; self.moveDirection = -1; } // Spawn falling objects every 60 frames if (LK.ticks - self.lastSpawnTime > 60) { spawnFallingObject(); self.lastSpawnTime = LK.ticks; } }; return self; }); var CoffeeCup = Container.expand(function () { var self = Container.call(this); var cupGraphics = self.attachAsset('coffeeCup', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.gravity = 0.8; self.jumpForce = -12; self.isRising = false; self.isInvincible = false; self.invincibleTimer = 0; self.wasRisingLastFrame = false; self.update = function () { var wasRising = self.isRising; if (self.isRising) { self.velocityY += self.jumpForce * 0.3; // Add flying animation when starting to rise if (!self.wasRisingLastFrame) { tween(cupGraphics, { rotation: -0.3, scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); } } else { self.velocityY += self.gravity; // Return to normal when not rising if (self.wasRisingLastFrame) { tween(cupGraphics, { rotation: 0, scaleX: 1.0, scaleY: 1.0 }, { duration: 300, easing: tween.easeOut }); } } self.wasRisingLastFrame = wasRising; self.velocityY = Math.max(-15, Math.min(15, self.velocityY)); self.y += self.velocityY; if (self.y < 100) { self.y = 100; self.velocityY = 0; } if (self.y > 2632) { self.y = 2632; self.velocityY = 0; } if (self.isInvincible) { self.invincibleTimer--; cupGraphics.alpha = self.invincibleTimer % 10 < 5 ? 0.5 : 1.0; if (self.invincibleTimer <= 0) { self.isInvincible = false; cupGraphics.alpha = 1.0; } } }; self.makeInvincible = function () { self.isInvincible = true; self.invincibleTimer = 300; }; return self; }); var EnemyProjectile = Container.expand(function () { var self = Container.call(this); var projectileGraphics = self.attachAsset('regularBean', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5, tint: 0xFF0000 }); self.speed = -10; self.update = function () { self.x += self.speed; projectileGraphics.rotation += 0.3; }; return self; }); var FallingObject = Container.expand(function () { var self = Container.call(this); var objectGraphics = self.attachAsset('regularBean', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, tint: 0xFF4500 }); self.velocityX = -6; self.velocityY = 2; self.gravity = 0.5; self.update = function () { self.x += self.velocityX; self.y += self.velocityY; self.velocityY += self.gravity; objectGraphics.rotation += 0.2; }; return self; }); var FastEnemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8, tint: 0xFF4500 }); self.speed = -12; self.update = function () { self.x += self.speed; }; return self; }); var GoldenBean = Container.expand(function () { var self = Container.call(this); var beanGraphics = self.attachAsset('goldenBean', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -8; self.collected = false; self.pulseTimer = 0; self.update = function () { self.x += self.speed; beanGraphics.rotation += 0.15; self.pulseTimer += 0.2; var scale = 1 + Math.sin(self.pulseTimer) * 0.2; beanGraphics.scaleX = scale; beanGraphics.scaleY = scale; }; return self; }); var Obstacle = Container.expand(function () { var self = Container.call(this); var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -8; self.update = function () { self.x += self.speed; }; return self; }); var RegularBean = Container.expand(function () { var self = Container.call(this); var beanGraphics = self.attachAsset('regularBean', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -8; self.collected = false; self.update = function () { self.x += self.speed; beanGraphics.rotation += 0.1; }; return self; }); var ShootingEnemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.1, scaleY: 1.1, tint: 0xFF1493 }); self.speed = -4; self.shootTimer = 0; self.update = function () { self.x += self.speed; self.shootTimer++; if (self.shootTimer % 90 === 0) { spawnEnemyProjectile(self.x - 50, self.y); } }; return self; }); var ZigZagEnemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 0.6, tint: 0x9932CC }); self.speed = -6; self.verticalSpeed = 4; self.direction = 1; self.update = function () { self.x += self.speed; self.y += self.verticalSpeed * self.direction; if (self.y <= 200 || self.y >= 2500) { self.direction *= -1; } enemyGraphics.rotation += 0.1; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ game.setBackgroundColor(0x87CEEB); // Game variables var coffeeCup; var regularBeans = []; var goldenBeans = []; var obstacles = []; var gameSpeed = 1; var spawnTimer = 0; var goldenBeanTimer = 0; var highScore = storage.highScore || 0; var bossActive = false; var boss = null; var bossHealth = 5; var fallingObjects = []; var bossSpawnTimer = 0; var lives = 3; var energy = 100; var maxEnergy = 100; var energyDecayRate = 0.2; var fastEnemies = []; var zigzagEnemies = []; var shootingEnemies = []; var enemyProjectiles = []; // UI elements var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var highScoreTxt = new Text2('Best: ' + highScore, { size: 60, fill: 0xFFFF00 }); highScoreTxt.anchor.set(1, 0); highScoreTxt.x = -50; highScoreTxt.y = 100; LK.gui.topRight.addChild(highScoreTxt); var livesTxt = new Text2('Lives: ' + lives, { size: 60, fill: 0xFF69B4 }); livesTxt.anchor.set(0, 0); livesTxt.x = 50; livesTxt.y = 100; LK.gui.topLeft.addChild(livesTxt); var bossHealthTxt = new Text2('Boss Health: 5', { size: 60, fill: 0xFF0000 }); bossHealthTxt.anchor.set(0.5, 0); bossHealthTxt.x = 0; bossHealthTxt.y = 200; bossHealthTxt.visible = false; LK.gui.top.addChild(bossHealthTxt); var energyTxt = new Text2('Energy: 100', { size: 60, fill: 0x00FF00 }); energyTxt.anchor.set(0, 0); energyTxt.x = 50; energyTxt.y = 180; LK.gui.topLeft.addChild(energyTxt); // Initialize coffee cup coffeeCup = game.addChild(new CoffeeCup()); coffeeCup.x = 400; coffeeCup.y = 1366; // Input handling game.down = function (x, y, obj) { coffeeCup.isRising = true; }; game.up = function (x, y, obj) { coffeeCup.isRising = false; }; // Spawn functions function spawnRegularBean() { var bean = new RegularBean(); bean.x = 2200; bean.y = Math.random() * 2400 + 200; regularBeans.push(bean); game.addChild(bean); } function spawnGoldenBean() { var bean = new GoldenBean(); bean.x = 2200; bean.y = Math.random() * 2400 + 200; goldenBeans.push(bean); game.addChild(bean); } function spawnObstacle() { var obstacle = new Obstacle(); obstacle.x = 2200; obstacle.y = Math.random() * 2000 + 400; obstacles.push(obstacle); game.addChild(obstacle); } function spawnBoss() { var boss = new Boss(); game.addChild(boss); return boss; } function spawnFallingObject() { var obj = new FallingObject(); obj.x = 1800 + Math.random() * 200 - 100; obj.y = 200; fallingObjects.push(obj); game.addChild(obj); } function spawnFastEnemy() { var enemy = new FastEnemy(); enemy.x = 2200; enemy.y = Math.random() * 2000 + 400; fastEnemies.push(enemy); game.addChild(enemy); } function spawnZigZagEnemy() { var enemy = new ZigZagEnemy(); enemy.x = 2200; enemy.y = Math.random() * 1500 + 600; zigzagEnemies.push(enemy); game.addChild(enemy); } function spawnShootingEnemy() { var enemy = new ShootingEnemy(); enemy.x = 2200; enemy.y = Math.random() * 2000 + 400; shootingEnemies.push(enemy); game.addChild(enemy); } function spawnEnemyProjectile(x, y) { var projectile = new EnemyProjectile(); projectile.x = x; projectile.y = y; enemyProjectiles.push(projectile); game.addChild(projectile); } // Main game loop game.update = function () { // Check for boss activation at score 1000 if (LK.getScore() >= 1000 && !bossActive) { bossActive = true; boss = spawnBoss(); bossHealth = boss.health; // Clear existing elements when boss appears for (var clear = obstacles.length - 1; clear >= 0; clear--) { obstacles[clear].destroy(); obstacles.splice(clear, 1); } for (var clearBeans = regularBeans.length - 1; clearBeans >= 0; clearBeans--) { regularBeans[clearBeans].destroy(); regularBeans.splice(clearBeans, 1); } for (var clearFast = fastEnemies.length - 1; clearFast >= 0; clearFast--) { fastEnemies[clearFast].destroy(); fastEnemies.splice(clearFast, 1); } for (var clearZig = zigzagEnemies.length - 1; clearZig >= 0; clearZig--) { zigzagEnemies[clearZig].destroy(); zigzagEnemies.splice(clearZig, 1); } for (var clearShoot = shootingEnemies.length - 1; clearShoot >= 0; clearShoot--) { shootingEnemies[clearShoot].destroy(); shootingEnemies.splice(clearShoot, 1); } for (var clearProj = enemyProjectiles.length - 1; clearProj >= 0; clearProj--) { enemyProjectiles[clearProj].destroy(); enemyProjectiles.splice(clearProj, 1); } LK.effects.flashScreen(0x8B0000, 1000); } if (!bossActive) { // Update game speed gameSpeed = 1 + LK.getScore() / 100 * 0.5; // Update spawn timers spawnTimer++; goldenBeanTimer++; // Spawn regular beans if (spawnTimer % Math.max(30, 60 - Math.floor(LK.getScore() / 10)) === 0) { spawnRegularBean(); } // Spawn obstacles if (spawnTimer % Math.max(80, 120 - Math.floor(LK.getScore() / 5)) === 0) { spawnObstacle(); } // Spawn fast enemies if (spawnTimer % Math.max(100, 140 - Math.floor(LK.getScore() / 8)) === 0) { spawnFastEnemy(); } // Spawn zigzag enemies if (spawnTimer % Math.max(150, 200 - Math.floor(LK.getScore() / 6)) === 0) { spawnZigZagEnemy(); } // Spawn shooting enemies if (LK.getScore() >= 300 && spawnTimer % Math.max(180, 250 - Math.floor(LK.getScore() / 4)) === 0) { spawnShootingEnemy(); } // Spawn golden bean (rare) if (goldenBeanTimer > 600 && Math.random() < 0.01) { spawnGoldenBean(); goldenBeanTimer = 0; } bossHealthTxt.visible = false; } else { // Show boss health during boss battle bossHealthTxt.visible = true; bossHealthTxt.setText('Boss Health: ' + bossHealth); } // Update and check regular beans for (var i = regularBeans.length - 1; i >= 0; i--) { var bean = regularBeans[i]; if (bean.x < -100) { bean.destroy(); regularBeans.splice(i, 1); continue; } if (!bean.collected && bean.intersects(coffeeCup)) { bean.collected = true; LK.setScore(LK.getScore() + 10); scoreTxt.setText('Score: ' + LK.getScore()); // Restore energy when collecting beans energy = Math.min(maxEnergy, energy + 20); energyTxt.setText('Energy: ' + Math.floor(energy)); // Update energy color based on level if (energy > 60) { energyTxt.tint = 0x00FF00; // Green } else if (energy > 30) { energyTxt.tint = 0xFFFF00; // Yellow } else { energyTxt.tint = 0xFF0000; // Red } LK.getSound('collectBean').play(); LK.effects.flashObject(bean, 0xFFFFFF, 200); tween(bean, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 200, onFinish: function onFinish() { bean.destroy(); } }); regularBeans.splice(i, 1); } } // Update and check golden beans for (var j = goldenBeans.length - 1; j >= 0; j--) { var goldenBean = goldenBeans[j]; if (goldenBean.x < -100) { goldenBean.destroy(); goldenBeans.splice(j, 1); continue; } if (!goldenBean.collected && goldenBean.intersects(coffeeCup)) { goldenBean.collected = true; LK.setScore(LK.getScore() + 100); scoreTxt.setText('Score: ' + LK.getScore()); // Restore significant energy when collecting golden beans energy = maxEnergy; energyTxt.setText('Energy: ' + Math.floor(energy)); energyTxt.tint = 0x00FF00; // Green LK.getSound('collectGolden').play(); LK.effects.flashScreen(0xFFD700, 500); coffeeCup.makeInvincible(); tween(goldenBean, { alpha: 0, scaleX: 3, scaleY: 3 }, { duration: 500, onFinish: function onFinish() { goldenBean.destroy(); } }); goldenBeans.splice(j, 1); } } // Update and check obstacles for (var k = obstacles.length - 1; k >= 0; k--) { var obstacle = obstacles[k]; if (obstacle.x < -100) { obstacle.destroy(); obstacles.splice(k, 1); continue; } if (!coffeeCup.isInvincible && obstacle.intersects(coffeeCup)) { lives--; livesTxt.setText('Lives: ' + lives); coffeeCup.makeInvincible(); LK.effects.flashScreen(0xFF0000, 500); obstacle.destroy(); obstacles.splice(k, 1); if (lives <= 0) { // Update high score if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } break; } } // Update and check fast enemies for (var fe = fastEnemies.length - 1; fe >= 0; fe--) { var fastEnemy = fastEnemies[fe]; if (fastEnemy.x < -100) { fastEnemy.destroy(); fastEnemies.splice(fe, 1); continue; } if (!coffeeCup.isInvincible && fastEnemy.intersects(coffeeCup)) { lives--; livesTxt.setText('Lives: ' + lives); coffeeCup.makeInvincible(); LK.effects.flashScreen(0xFF0000, 500); fastEnemy.destroy(); fastEnemies.splice(fe, 1); if (lives <= 0) { if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } break; } } // Update and check zigzag enemies for (var ze = zigzagEnemies.length - 1; ze >= 0; ze--) { var zigzagEnemy = zigzagEnemies[ze]; if (zigzagEnemy.x < -100) { zigzagEnemy.destroy(); zigzagEnemies.splice(ze, 1); continue; } if (!coffeeCup.isInvincible && zigzagEnemy.intersects(coffeeCup)) { lives--; livesTxt.setText('Lives: ' + lives); coffeeCup.makeInvincible(); LK.effects.flashScreen(0xFF0000, 500); zigzagEnemy.destroy(); zigzagEnemies.splice(ze, 1); if (lives <= 0) { if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } break; } } // Update and check shooting enemies for (var se = shootingEnemies.length - 1; se >= 0; se--) { var shootingEnemy = shootingEnemies[se]; if (shootingEnemy.x < -100) { shootingEnemy.destroy(); shootingEnemies.splice(se, 1); continue; } if (!coffeeCup.isInvincible && shootingEnemy.intersects(coffeeCup)) { lives--; livesTxt.setText('Lives: ' + lives); coffeeCup.makeInvincible(); LK.effects.flashScreen(0xFF0000, 500); shootingEnemy.destroy(); shootingEnemies.splice(se, 1); if (lives <= 0) { if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } break; } } // Update and check enemy projectiles for (var ep = enemyProjectiles.length - 1; ep >= 0; ep--) { var projectile = enemyProjectiles[ep]; if (projectile.x < -100) { projectile.destroy(); enemyProjectiles.splice(ep, 1); continue; } if (!coffeeCup.isInvincible && projectile.intersects(coffeeCup)) { lives--; livesTxt.setText('Lives: ' + lives); coffeeCup.makeInvincible(); LK.effects.flashScreen(0xFF0000, 500); projectile.destroy(); enemyProjectiles.splice(ep, 1); if (lives <= 0) { if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } break; } } // Update speed for all moving objects for (var l = 0; l < regularBeans.length; l++) { regularBeans[l].speed = -8 * gameSpeed; } for (var m = 0; m < goldenBeans.length; m++) { goldenBeans[m].speed = -8 * gameSpeed; } for (var n = 0; n < obstacles.length; n++) { obstacles[n].speed = -8 * gameSpeed; } for (var o = 0; o < fastEnemies.length; o++) { fastEnemies[o].speed = -12 * gameSpeed; } for (var p = 0; p < zigzagEnemies.length; p++) { zigzagEnemies[p].speed = -6 * gameSpeed; } for (var q = 0; q < shootingEnemies.length; q++) { shootingEnemies[q].speed = -4 * gameSpeed; } for (var r = 0; r < enemyProjectiles.length; r++) { enemyProjectiles[r].speed = -10 * gameSpeed; } // Handle falling objects during boss battle if (bossActive) { for (var f = fallingObjects.length - 1; f >= 0; f--) { var fallingObj = fallingObjects[f]; if (fallingObj.y > 2800 || fallingObj.x < -100) { fallingObj.destroy(); fallingObjects.splice(f, 1); continue; } // Check collision with coffee cup if (fallingObj.intersects(coffeeCup) && !coffeeCup.isInvincible) { lives--; livesTxt.setText('Lives: ' + lives); coffeeCup.makeInvincible(); LK.effects.flashScreen(0xFF0000, 500); fallingObj.destroy(); fallingObjects.splice(f, 1); if (lives <= 0) { // Update high score if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } break; } // Check if falling object hits boss (coffee cup can throw objects at boss) if (fallingObj.intersects(boss) && fallingObj.velocityX < 0) { boss.health--; bossHealth = boss.health; LK.effects.flashObject(boss, 0xFF0000, 300); // Add screen shake effect when boss is hit tween(game, { x: Math.random() * 20 - 10, y: Math.random() * 20 - 10 }, { duration: 100, onFinish: function onFinish() { tween(game, { x: 0, y: 0 }, { duration: 100 }); } }); fallingObj.destroy(); fallingObjects.splice(f, 1); if (bossHealth <= 0) { // Boss defeated LK.setScore(LK.getScore() + 500); scoreTxt.setText('Score: ' + LK.getScore()); boss.destroy(); bossActive = false; boss = null; LK.effects.flashScreen(0x00FF00, 1000); LK.showYouWin(); } } } } // Energy decay system if (!bossActive) { energy -= energyDecayRate; energy = Math.max(0, energy); energyTxt.setText('Energy: ' + Math.floor(energy)); // Update energy color based on level if (energy > 60) { energyTxt.tint = 0x00FF00; // Green } else if (energy > 30) { energyTxt.tint = 0xFFFF00; // Yellow } else { energyTxt.tint = 0xFF0000; // Red } // Game over when energy reaches zero if (energy <= 0) { // Update high score if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; } LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } } }; // Start background music LK.playMusic('bgmusic');
===================================================================
--- original.js
+++ change.js
@@ -107,8 +107,24 @@
self.invincibleTimer = 300;
};
return self;
});
+var EnemyProjectile = Container.expand(function () {
+ var self = Container.call(this);
+ var projectileGraphics = self.attachAsset('regularBean', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.5,
+ scaleY: 0.5,
+ tint: 0xFF0000
+ });
+ self.speed = -10;
+ self.update = function () {
+ self.x += self.speed;
+ projectileGraphics.rotation += 0.3;
+ };
+ return self;
+});
var FallingObject = Container.expand(function () {
var self = Container.call(this);
var objectGraphics = self.attachAsset('regularBean', {
anchorX: 0.5,
@@ -127,8 +143,23 @@
objectGraphics.rotation += 0.2;
};
return self;
});
+var FastEnemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.8,
+ scaleY: 0.8,
+ tint: 0xFF4500
+ });
+ self.speed = -12;
+ self.update = function () {
+ self.x += self.speed;
+ };
+ return self;
+});
var GoldenBean = Container.expand(function () {
var self = Container.call(this);
var beanGraphics = self.attachAsset('goldenBean', {
anchorX: 0.5,
@@ -172,8 +203,50 @@
beanGraphics.rotation += 0.1;
};
return self;
});
+var ShootingEnemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.1,
+ scaleY: 1.1,
+ tint: 0xFF1493
+ });
+ self.speed = -4;
+ self.shootTimer = 0;
+ self.update = function () {
+ self.x += self.speed;
+ self.shootTimer++;
+ if (self.shootTimer % 90 === 0) {
+ spawnEnemyProjectile(self.x - 50, self.y);
+ }
+ };
+ return self;
+});
+var ZigZagEnemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.2,
+ scaleY: 0.6,
+ tint: 0x9932CC
+ });
+ self.speed = -6;
+ self.verticalSpeed = 4;
+ self.direction = 1;
+ self.update = function () {
+ self.x += self.speed;
+ self.y += self.verticalSpeed * self.direction;
+ if (self.y <= 200 || self.y >= 2500) {
+ self.direction *= -1;
+ }
+ enemyGraphics.rotation += 0.1;
+ };
+ return self;
+});
/****
* Initialize Game
****/
@@ -202,8 +275,12 @@
var lives = 3;
var energy = 100;
var maxEnergy = 100;
var energyDecayRate = 0.2;
+var fastEnemies = [];
+var zigzagEnemies = [];
+var shootingEnemies = [];
+var enemyProjectiles = [];
// UI elements
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
@@ -287,8 +364,36 @@
obj.y = 200;
fallingObjects.push(obj);
game.addChild(obj);
}
+function spawnFastEnemy() {
+ var enemy = new FastEnemy();
+ enemy.x = 2200;
+ enemy.y = Math.random() * 2000 + 400;
+ fastEnemies.push(enemy);
+ game.addChild(enemy);
+}
+function spawnZigZagEnemy() {
+ var enemy = new ZigZagEnemy();
+ enemy.x = 2200;
+ enemy.y = Math.random() * 1500 + 600;
+ zigzagEnemies.push(enemy);
+ game.addChild(enemy);
+}
+function spawnShootingEnemy() {
+ var enemy = new ShootingEnemy();
+ enemy.x = 2200;
+ enemy.y = Math.random() * 2000 + 400;
+ shootingEnemies.push(enemy);
+ game.addChild(enemy);
+}
+function spawnEnemyProjectile(x, y) {
+ var projectile = new EnemyProjectile();
+ projectile.x = x;
+ projectile.y = y;
+ enemyProjectiles.push(projectile);
+ game.addChild(projectile);
+}
// Main game loop
game.update = function () {
// Check for boss activation at score 1000
if (LK.getScore() >= 1000 && !bossActive) {
@@ -303,8 +408,24 @@
for (var clearBeans = regularBeans.length - 1; clearBeans >= 0; clearBeans--) {
regularBeans[clearBeans].destroy();
regularBeans.splice(clearBeans, 1);
}
+ for (var clearFast = fastEnemies.length - 1; clearFast >= 0; clearFast--) {
+ fastEnemies[clearFast].destroy();
+ fastEnemies.splice(clearFast, 1);
+ }
+ for (var clearZig = zigzagEnemies.length - 1; clearZig >= 0; clearZig--) {
+ zigzagEnemies[clearZig].destroy();
+ zigzagEnemies.splice(clearZig, 1);
+ }
+ for (var clearShoot = shootingEnemies.length - 1; clearShoot >= 0; clearShoot--) {
+ shootingEnemies[clearShoot].destroy();
+ shootingEnemies.splice(clearShoot, 1);
+ }
+ for (var clearProj = enemyProjectiles.length - 1; clearProj >= 0; clearProj--) {
+ enemyProjectiles[clearProj].destroy();
+ enemyProjectiles.splice(clearProj, 1);
+ }
LK.effects.flashScreen(0x8B0000, 1000);
}
if (!bossActive) {
// Update game speed
@@ -319,8 +440,20 @@
// Spawn obstacles
if (spawnTimer % Math.max(80, 120 - Math.floor(LK.getScore() / 5)) === 0) {
spawnObstacle();
}
+ // Spawn fast enemies
+ if (spawnTimer % Math.max(100, 140 - Math.floor(LK.getScore() / 8)) === 0) {
+ spawnFastEnemy();
+ }
+ // Spawn zigzag enemies
+ if (spawnTimer % Math.max(150, 200 - Math.floor(LK.getScore() / 6)) === 0) {
+ spawnZigZagEnemy();
+ }
+ // Spawn shooting enemies
+ if (LK.getScore() >= 300 && spawnTimer % Math.max(180, 250 - Math.floor(LK.getScore() / 4)) === 0) {
+ spawnShootingEnemy();
+ }
// Spawn golden bean (rare)
if (goldenBeanTimer > 600 && Math.random() < 0.01) {
spawnGoldenBean();
goldenBeanTimer = 0;
@@ -427,8 +560,112 @@
}
break;
}
}
+ // Update and check fast enemies
+ for (var fe = fastEnemies.length - 1; fe >= 0; fe--) {
+ var fastEnemy = fastEnemies[fe];
+ if (fastEnemy.x < -100) {
+ fastEnemy.destroy();
+ fastEnemies.splice(fe, 1);
+ continue;
+ }
+ if (!coffeeCup.isInvincible && fastEnemy.intersects(coffeeCup)) {
+ lives--;
+ livesTxt.setText('Lives: ' + lives);
+ coffeeCup.makeInvincible();
+ LK.effects.flashScreen(0xFF0000, 500);
+ fastEnemy.destroy();
+ fastEnemies.splice(fe, 1);
+ if (lives <= 0) {
+ if (LK.getScore() > highScore) {
+ highScore = LK.getScore();
+ storage.highScore = highScore;
+ }
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ }
+ break;
+ }
+ }
+ // Update and check zigzag enemies
+ for (var ze = zigzagEnemies.length - 1; ze >= 0; ze--) {
+ var zigzagEnemy = zigzagEnemies[ze];
+ if (zigzagEnemy.x < -100) {
+ zigzagEnemy.destroy();
+ zigzagEnemies.splice(ze, 1);
+ continue;
+ }
+ if (!coffeeCup.isInvincible && zigzagEnemy.intersects(coffeeCup)) {
+ lives--;
+ livesTxt.setText('Lives: ' + lives);
+ coffeeCup.makeInvincible();
+ LK.effects.flashScreen(0xFF0000, 500);
+ zigzagEnemy.destroy();
+ zigzagEnemies.splice(ze, 1);
+ if (lives <= 0) {
+ if (LK.getScore() > highScore) {
+ highScore = LK.getScore();
+ storage.highScore = highScore;
+ }
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ }
+ break;
+ }
+ }
+ // Update and check shooting enemies
+ for (var se = shootingEnemies.length - 1; se >= 0; se--) {
+ var shootingEnemy = shootingEnemies[se];
+ if (shootingEnemy.x < -100) {
+ shootingEnemy.destroy();
+ shootingEnemies.splice(se, 1);
+ continue;
+ }
+ if (!coffeeCup.isInvincible && shootingEnemy.intersects(coffeeCup)) {
+ lives--;
+ livesTxt.setText('Lives: ' + lives);
+ coffeeCup.makeInvincible();
+ LK.effects.flashScreen(0xFF0000, 500);
+ shootingEnemy.destroy();
+ shootingEnemies.splice(se, 1);
+ if (lives <= 0) {
+ if (LK.getScore() > highScore) {
+ highScore = LK.getScore();
+ storage.highScore = highScore;
+ }
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ }
+ break;
+ }
+ }
+ // Update and check enemy projectiles
+ for (var ep = enemyProjectiles.length - 1; ep >= 0; ep--) {
+ var projectile = enemyProjectiles[ep];
+ if (projectile.x < -100) {
+ projectile.destroy();
+ enemyProjectiles.splice(ep, 1);
+ continue;
+ }
+ if (!coffeeCup.isInvincible && projectile.intersects(coffeeCup)) {
+ lives--;
+ livesTxt.setText('Lives: ' + lives);
+ coffeeCup.makeInvincible();
+ LK.effects.flashScreen(0xFF0000, 500);
+ projectile.destroy();
+ enemyProjectiles.splice(ep, 1);
+ if (lives <= 0) {
+ if (LK.getScore() > highScore) {
+ highScore = LK.getScore();
+ storage.highScore = highScore;
+ }
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ }
+ break;
+ }
+ }
// Update speed for all moving objects
for (var l = 0; l < regularBeans.length; l++) {
regularBeans[l].speed = -8 * gameSpeed;
}
@@ -437,8 +674,20 @@
}
for (var n = 0; n < obstacles.length; n++) {
obstacles[n].speed = -8 * gameSpeed;
}
+ for (var o = 0; o < fastEnemies.length; o++) {
+ fastEnemies[o].speed = -12 * gameSpeed;
+ }
+ for (var p = 0; p < zigzagEnemies.length; p++) {
+ zigzagEnemies[p].speed = -6 * gameSpeed;
+ }
+ for (var q = 0; q < shootingEnemies.length; q++) {
+ shootingEnemies[q].speed = -4 * gameSpeed;
+ }
+ for (var r = 0; r < enemyProjectiles.length; r++) {
+ enemyProjectiles[r].speed = -10 * gameSpeed;
+ }
// Handle falling objects during boss battle
if (bossActive) {
for (var f = fallingObjects.length - 1; f >= 0; f--) {
var fallingObj = fallingObjects[f];
una tasa de cafe caricaturesca de pixeles con un jet pak. In-Game asset. 2d. High contrast. No shadows
grano de cafe dorado de pixeles. In-Game asset. 2d. High contrast. No shadows
grano de caffe de pixeles. In-Game asset. 2d. High contrast. No shadows
martillo mounstroso de pixeles. In-Game asset. 2d. High contrast. No shadows
corazon de pixeles. In-Game asset. 2d. High contrast. No shadows
pan de pixeles. In-Game asset. 2d. High contrast. No shadows
coete de pixeles. In-Game asset. 2d. High contrast. No shadows
paisage con cascadas de cafe de pixeles. In-Game asset. 2d. High contrast. No shadows