User prompt
add a logic that levels can rise before all enemies are destroyed
User prompt
Please fix the bug: 'TypeError: enemies[l].takeHit is not a function' in or related to this line: 'enemies[l].takeHit();' Line Number: 438
User prompt
Please fix the bug: 'TypeError: enemies[l].takeHit is not a function' in or related to this line: 'enemies[l].takeHit();' Line Number: 438
User prompt
fix the logic that levels set the enemy creation
User prompt
fix the bug where all enemies are created for all levels after starting the game
User prompt
fix the lag in enemy creation
User prompt
rewrite the enemy creation to include all enemy types
User prompt
fix the bug that level starts at 2 by changing the enemy creation
User prompt
fix level to start at 1
User prompt
fix levels to start at 2
User prompt
fix enemy creation to be more challengeing each level
User prompt
delete logic that only tough enemies are generated
User prompt
delete logic that implies only tough opponents are created
User prompt
fix lag by generation of enemies
User prompt
fix logic that enemy need 1 bullet to be destroyed, touch enemy need 2 bullet to be destroyed and boss enemy need 3 bullet to be destroyed
User prompt
add enemy boss from boss asset
User prompt
from level 5 to level 10 enemie and toughenemy spawn
User prompt
change enemy generation to not all at once
User prompt
fix lag after level 6
User prompt
all kaktus should destroy everything
User prompt
fix that every kaktus displayed has the same functions
User prompt
repair katus ability to destroy everything it touches
User prompt
fix bug where enemy dont die by touching kaktus
User prompt
move Pfeilchen 100 pixels down
User prompt
enable player to shoot
/****
* Classes
****/
// Define a class for Aloe
var Aloe = Container.expand(function () {
var self = Container.call(this);
var aloeGraphics = self.attachAsset('aloe', {
anchorX: 0.5,
anchorY: 0.5
});
self.shieldActive = true; // Shield is active initially
// Method to deactivate the shield
self.deactivateShield = function () {
self.shieldActive = false;
self.destroy(); // Remove Aloe from the game
};
// Update method for Aloe
self.update = function () {
// Aloe follows the player
self.x = player.x;
self.y = player.y;
};
});
// Define a class for Boss
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1;
self.hitPoints = 10; // Boss requires multiple hits to be destroyed
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = 0;
self.x = Math.random() * 2048;
}
};
self.takeHit = function () {
self.hitPoints -= 1;
if (self.hitPoints <= 0) {
self.destroy();
}
};
});
// Define a class for bullets
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -5;
self.update = function () {
self.x += self.speedX || 0;
self.y += self.speedY || self.speed;
if (self.y < 0 || self.x < 0 || self.x > 2048 || self.y > 2732) {
self.destroy();
}
};
});
// Define a class for the context menu
var ContextMenu = Container.expand(function () {
var self = Container.call(this);
var menuText = new Text2('Start Game', {
size: 150,
fill: 0xFFFFFF
});
menuText.anchor.set(0.5, 0.5);
self.addChild(menuText);
self.update = function () {
// Update logic for context menu
};
});
// 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 = 2;
self.hitPoints = 1; // Requires one hit to be destroyed
self.update = function () {
self.takeHit = function () {
self.hitPoints -= 1;
if (self.hitPoints <= 0) {
self.destroy();
}
};
self.y += self.speed;
if (self.y > 2732) {
self.y = 0;
self.x = Math.random() * 2048;
}
};
});
// Define a class for Fleisch
var Fleisch = Container.expand(function () {
var self = Container.call(this);
var fleischGraphics = self.attachAsset('Fleisch', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
// Add close distance multiple shots ability for Fleisch
if (LK.ticks % 60 == 0) {
for (var angle = -0.2; angle <= 0.2; angle += 0.1) {
var newBullet = new Bullet();
newBullet.x = self.x;
newBullet.y = self.y;
newBullet.speedX = Math.sin(angle) * self.speed;
newBullet.speedY = Math.cos(angle) * self.speed;
newBullet.lastY = newBullet.y;
newBullet.lastIntersecting = newBullet.intersects(centerNode);
bullets.push(newBullet);
game.addChild(newBullet);
}
}
};
});
// Define a class for Kaktus
var Kaktus = Container.expand(function () {
var self = Container.call(this);
var kaktusGraphics = self.attachAsset('Kaktus', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Check for collisions with all game objects
for (var i = game.children.length - 1; i >= 0; i--) {
if (self !== game.children[i] && self.intersects(game.children[i])) {
game.children[i].destroy();
}
}
};
});
// Define a class for Pfeilchen
var Pfeilchen = Container.expand(function () {
var self = Container.call(this);
var pfeilchenGraphics = self.attachAsset('Pfeilchen', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.shootDirection = 'up'; // Default shooting direction
// Method to shoot bullets in the specified direction
self.shoot = function () {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
bullet.speedX = 0; // Initialize speedX
bullet.speedY = 0; // Initialize speedY
switch (self.shootDirection) {
case 'up':
bullet.speedY = -self.speed;
break;
case 'down':
bullet.speedY = self.speed;
break;
case 'left':
bullet.speedX = -self.speed;
break;
case 'right':
bullet.speedX = self.speed;
break;
}
bullets.push(bullet);
game.addChild(bullet);
};
self.update = function () {
// Update logic for Pfeilchen
};
});
// Define a class for plants
var Plant = Container.expand(function () {
var self = Container.call(this);
self.update = function () {
// Update logic for plants
};
});
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins 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.slot = 0; // Add slot property to player
self.update = function () {
// Update logic for player
};
});
// Define a class for rose
var Rose = Container.expand(function () {
var self = Container.call(this);
var roseGraphics = self.attachAsset('rose', {
anchorX: 0.5,
anchorY: 0.5,
rotation: -Math.PI / 2 // Rotate 90 degrees to the left
});
self.speed = 5;
self.update = function () {
if (self.y < 0) {
self.destroy();
}
if (LK.ticks % 600 == 0) {
var newBullet = new Bullet();
newBullet.x = self.x;
newBullet.y = self.y;
var dx = fleisch.x - self.x;
var dy = fleisch.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
newBullet.speedX = dx / distance * self.speed;
newBullet.speedY = dy / distance * self.speed;
newBullet.lastY = newBullet.y;
newBullet.lastIntersecting = newBullet.intersects(centerNode);
bullets.push(newBullet);
game.addChild(newBullet);
}
};
});
// Define a class for ToughEnemy
var ToughEnemy = Container.expand(function () {
var self = Container.call(this);
var toughEnemyGraphics = self.attachAsset('toughEnemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.hitPoints = 2; // Requires two hits to be destroyed
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = 0;
self.x = Math.random() * 2048;
}
};
self.takeHit = function () {
self.hitPoints -= 1;
if (self.hitPoints <= 0) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize Pfeilchen
var pfeilchen = game.addChild(new Pfeilchen());
pfeilchen.x = 1024; // Center horizontally on the screen
pfeilchen.y = 1466; // Move Pfeilchen 100 pixels down
// Initialize game state
var gameState = "menu";
// Initialize level
var level = 1;
// Initialize level text
var levelText;
// Initialize context menu
var contextMenu = game.addChild(new ContextMenu());
contextMenu.x = 1024;
contextMenu.y = 1366;
// Initialize players
var players = [];
var player = game.addChild(new Player());
player.x = 1024;
player.y = 1366;
players.push(player);
// Initialize centerNode
var centerNode = game.addChild(LK.getAsset('centerCircle', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
// Initialize Fleisch
var fleisch = game.addChild(new Fleisch());
fleisch.x = 1024; // Center horizontally on the screen
fleisch.y = 100; // Move Fleisch 80 pixels down from its current position
// Initialize rose
var rose = game.addChild(new Rose());
rose.x = 50; // Position at the left, accounting for asset width
rose.y = 2732 - 50; // Position at the bottom, accounting for asset height
// Initialize Aloe
var aloe = new Aloe();
aloe.x = player.x;
aloe.y = player.y;
game.addChild(aloe);
// Initialize plants
var plants = [];
for (var i = 0; i < 5; i++) {
var plant = new Plant();
plant.x = Math.random() * 2048;
plant.y = Math.random() * 2732;
plants.push(plant);
game.addChild(plant);
}
// Add Kaktus to 4 random locations above Rose and below Fleisch
for (var j = 0; j < 4; j++) {
var kaktus = LK.getAsset('Kaktus', {
anchorX: 0.5,
anchorY: 0.5,
x: Math.random() * 2048,
y: Math.random() * (fleisch.y - rose.y) + rose.y
});
game.addChild(kaktus);
}
// Initialize enemies
var enemies = [];
// Initialize bullets
var bullets = [];
// Handle player movement
game.move = function (x, y, obj) {
player.x = x;
player.y = y;
};
// Handle shooting
game.down = function (x, y, obj) {
if (gameState === "menu") {
gameState = "playing";
contextMenu.destroy();
// Initialize level text
levelText = new Text2('Level: ' + level, {
size: 100,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(levelText);
// Generate enemies when game starts
var enemyCount = 5 * level;
var enemyIndex = 0;
var enemyInterval = LK.setInterval(function () {
if (enemyIndex >= enemyCount) {
LK.clearInterval(enemyInterval);
return;
}
var enemy;
if (level === 10) {
enemy = new Boss();
} else if (level >= 5) {
if (enemyIndex % 2 === 0) {
enemy = new Enemy();
} else {
enemy = new ToughEnemy();
}
} else {
enemy = new Enemy();
}
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * 1000;
enemies.push(enemy);
game.addChild(enemy);
enemyIndex++;
}, 200); // Stagger enemy generation every 200ms
} else if (gameState === "playing") {
// Handle shooting for Pfeilchen
// Determine shooting direction based on player input
if (x < pfeilchen.x) {
pfeilchen.shootDirection = 'left';
} else if (x > pfeilchen.x) {
pfeilchen.shootDirection = 'right';
} else if (y < pfeilchen.y) {
pfeilchen.shootDirection = 'up';
} else {
pfeilchen.shootDirection = 'down';
}
pfeilchen.shoot();
// Handle shooting for Player
var playerBullet = new Bullet();
playerBullet.x = player.x;
playerBullet.y = player.y;
playerBullet.speedX = (x - player.x) / Math.sqrt(Math.pow(x - player.x, 2) + Math.pow(y - player.y, 2)) * player.speed;
playerBullet.speedY = (y - player.y) / Math.sqrt(Math.pow(x - player.x, 2) + Math.pow(y - player.y, 2)) * player.speed;
bullets.push(playerBullet);
game.addChild(playerBullet);
}
};
// Update game state
game.update = function () {
if (gameState === "playing") {
// Update player
player.update();
// Update enemies
for (var i = 0; i < enemies.length; i++) {
enemies[i].update();
}
// Update bullets
for (var j = bullets.length - 1; j >= 0; j--) {
bullets[j].update();
if (bullets[j].y < 0 || bullets[j].x < 0 || bullets[j].x > 2048 || bullets[j].y > 2732) {
bullets.splice(j, 1);
}
}
// Check for collisions
for (var k = bullets.length - 1; k >= 0; k--) {
for (var l = enemies.length - 1; l >= 0; l--) {
if (bullets[k].intersects(enemies[l])) {
bullets[k].destroy();
bullets.splice(k, 1);
enemies[l].takeHit();
if (enemies[l].hitPoints <= 0) {
enemies.splice(l, 1);
}
break;
}
}
}
// Check for collisions between player and enemies
for (var m = 0; m < players.length; m++) {
for (var n = enemies.length - 1; n >= 0; n--) {
if (players[m].intersects(enemies[n])) {
if (aloe.shieldActive) {
aloe.deactivateShield(); // Use Aloe's shield to take the hit
} else {
players[m].destroy();
players.splice(m, 1);
}
break;
}
}
}
// Check for collisions between any object and Kaktus
for (var j = bullets.length - 1; j >= 0; j--) {
if (bullets[j].intersects(kaktus)) {
bullets[j].destroy();
bullets.splice(j, 1);
}
}
for (var m = 0; m < players.length; m++) {
if (players[m].intersects(kaktus)) {
if (aloe.shieldActive) {
aloe.deactivateShield(); // Use Aloe's shield to take the hit
} else {
players[m].destroy();
players.splice(m, 1);
}
}
}
for (var n = enemies.length - 1; n >= 0; n--) {
for (var k = 0; k < game.children.length; k++) {
if (game.children[k] instanceof Kaktus && enemies[n].intersects(game.children[k])) {
enemies[n].destroy();
enemies.splice(n, 1);
break;
}
}
}
// Display game over when no players are left
if (players.length === 0) {
LK.showGameOver();
}
// Reinitialize rose when it's destroyed
if (!rose.parent) {
rose = game.addChild(LK.getAsset('rose', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 1366
}));
}
// Increase level and start the next level immediately if all enemies are destroyed
if (enemies.length === 0) {
level++;
levelText.setText('Level: ' + level);
// Generate enemies for the next level
var enemyCount = Math.min(5 * level, 50); // Limit the number of enemies to 50 to reduce lag
for (var i = 0; i < enemyCount; i++) {
var enemy;
enemy = new Enemy();
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * 1000;
enemies.push(enemy);
game.addChild(enemy);
}
}
} else if (gameState === "menu") {
// Update context menu
contextMenu.update();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -349,9 +349,9 @@
}
var enemy;
if (level === 10) {
enemy = new Boss();
- } else if (level >= 5 && level < 10) {
+ } else if (level >= 5) {
if (enemyIndex % 2 === 0) {
enemy = new Enemy();
} else {
enemy = new ToughEnemy();
2D squirrel with cowboy hat. Single Game Texture. In-Game asset. 2d. High contrast. No shadows
crosshair. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Aloe. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
meat eating plant. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
fly. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
red dot. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
rose. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Cactee. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
pfeilchen flower. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
sparkling sun. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Lock. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows