User prompt
change the location for unlocking fleisch into the game overlay
User prompt
the button to unlock FLeisch should be visible during the game
User prompt
add an unlock button for Fleisch
User prompt
Please fix the bug: 'ReferenceError: kaktus is not defined' in or related to this line: 'if (bullets[j].intersects(kaktus)) {' Line Number: 499
User prompt
remove the 5 kaktus
User prompt
add 5 kaktus
User prompt
remove the logic to add kaktus per level
User prompt
reduce the amount of kaktus that are added per level by 2
User prompt
fix the bug where after the player click start of the game the background disappears
User prompt
fix the bug where the background disappears after the game starts
User prompt
rename flowerybackground to background
User prompt
fix the background disappearing when the game starts
User prompt
kaktus should not be able to move
User prompt
for every level add another kaktus
User prompt
reduce the amount of kaktus to 1
User prompt
make sure all 10 kaktus are deadly
User prompt
fix why only one kaktus is deadly
User prompt
all 10 kaktus in the game need to kill the player
User prompt
change the amount of kaktus to 10
User prompt
all assets kaktus should destroy everything
User prompt
all Kaktus are deadly
User prompt
fix that not all katkus are deadly
User prompt
all kaktus should be deadly when touched
User prompt
fix that all kaktus destroy everything
User prompt
fix that all kaktus have the same abilites
/****
* 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 BossEnemy
var BossEnemy = 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();
}
if (!self.soundPlayed) {
// Play bullet1 sound when bullet is used
LK.getSound('bullet1').play({
loop: false
});
self.soundPlayed = true;
}
};
});
// 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 % 600 == 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.speed = 3; // Unique speed for Kaktus
self.update = function () {
// Move Kaktus in a unique pattern
self.x += Math.sin(LK.ticks / 60) * self.speed;
self.y += Math.cos(LK.ticks / 60) * self.speed;
// 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.currency = 0; // Initialize currency property
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 Sonne
var Sonne = Container.expand(function () {
var self = Container.call(this);
var sonneGraphics = self.attachAsset('Sonne', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = 0;
self.x = Math.random() * 2048;
}
// Automatic shooting logic for Sonne
if (LK.ticks % 120 == 0) {
// Adjust the frequency as needed
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
var newBullet = new Bullet();
newBullet.x = self.x;
newBullet.y = self.y;
var dx = enemy.x - self.x;
var dy = enemy.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(enemy);
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
****/
var background = LK.getAsset('floweryBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
game.addChild(background);
// 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 currency text
var currencyText = new Text2('Currency: 0', {
size: 100,
fill: 0xFFFFFF
});
currencyText.anchor.set(0.5, 0);
LK.gui.top.addChild(currencyText);
// 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 Sonne
var sonne = game.addChild(new Sonne());
sonne.x = Math.random() * 2048;
sonne.y = Math.random() * 100;
// 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();
LK.playMusic('Song1'); // Play song1 in the background after starting the game
// Initialize level text
levelText = new Text2('Level: ' + level, {
size: 100,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(levelText);
// Removed automatic enemy generation when game starts
} 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) {
player.currency += enemies[l] instanceof BossEnemy ? 10 : enemies[l] instanceof ToughEnemy ? 5 : 1;
currencyText.setText('Currency: ' + player.currency);
LK.getSound('pew1').play({
loop: false
}); // Play pew1 sound when an enemy is destroyed
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 = 5; // Limit the number of enemies to 5 per level
for (var i = 0; i < enemyCount; i++) {
var enemy;
if (level > 15) {
enemy = Math.random() < 0.33 ? new BossEnemy() : Math.random() < 0.5 ? new ToughEnemy() : new Enemy();
} else if (level > 10) {
enemy = new BossEnemy();
} else if (level > 5) {
enemy = new ToughEnemy();
} else {
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();
}
}; /****
* 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 BossEnemy
var BossEnemy = 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();
}
if (!self.soundPlayed) {
// Play bullet1 sound when bullet is used
LK.getSound('bullet1').play({
loop: false
});
self.soundPlayed = true;
}
};
});
// 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 % 600 == 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.speed = 3; // Unique speed for Kaktus
self.update = function () {
// Move Kaktus in a unique pattern
self.x += Math.sin(LK.ticks / 60) * self.speed;
self.y += Math.cos(LK.ticks / 60) * self.speed;
// 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.currency = 0; // Initialize currency property
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 Sonne
var Sonne = Container.expand(function () {
var self = Container.call(this);
var sonneGraphics = self.attachAsset('Sonne', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = 0;
self.x = Math.random() * 2048;
}
// Automatic shooting logic for Sonne
if (LK.ticks % 120 == 0) {
// Adjust the frequency as needed
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
var newBullet = new Bullet();
newBullet.x = self.x;
newBullet.y = self.y;
var dx = enemy.x - self.x;
var dy = enemy.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(enemy);
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
****/
var background = LK.getAsset('floweryBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
game.addChild(background);
// 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 currency text
var currencyText = new Text2('Currency: 0', {
size: 100,
fill: 0xFFFFFF
});
currencyText.anchor.set(0.5, 0);
LK.gui.top.addChild(currencyText);
// 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 Sonne
var sonne = game.addChild(new Sonne());
sonne.x = Math.random() * 2048;
sonne.y = Math.random() * 100;
// 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();
LK.playMusic('Song1'); // Play song1 in the background after starting the game
// Initialize level text
levelText = new Text2('Level: ' + level, {
size: 100,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(levelText);
// Removed automatic enemy generation when game starts
} 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) {
player.currency += enemies[l] instanceof BossEnemy ? 10 : enemies[l] instanceof ToughEnemy ? 5 : 1;
currencyText.setText('Currency: ' + player.currency);
LK.getSound('pew1').play({
loop: false
}); // Play pew1 sound when an enemy is destroyed
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 = 5; // Limit the number of enemies to 5 per level
for (var i = 0; i < enemyCount; i++) {
var enemy;
if (level > 15) {
enemy = Math.random() < 0.33 ? new BossEnemy() : Math.random() < 0.5 ? new ToughEnemy() : new Enemy();
} else if (level > 10) {
enemy = new BossEnemy();
} else if (level > 5) {
enemy = new ToughEnemy();
} else {
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();
}
};
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