User prompt
not working
User prompt
not working
User prompt
The flow of the game should be like this: First the user clicks on play game and then the game starts.
User prompt
Let's add main menu in which there are 2 options, first is Play Game and second is High Score. Whenuser click on the Play Game option, the game starts and when user click on the High Score button, the tab shows the player's high score.
User prompt
delay for next wave is 4 second pls
User prompt
wave WAVE ' + this.currentWave + '\n' + 'āļø Zombie Invasion āļø\n' + 'š§ Weak: ' + zombieComposition.weakCount + '\n' + 'ā” Fast: ' + zombieComposition.fastCount + '\n' + 'šŖ Tough: ' + zombieComposition.toughCount, This message will remain visible until the wave is finished
User prompt
when wave completed then wave message is shown pls
User prompt
Please fix the bug: 'zombie.spawn is not a function' in or related to this line: 'zombie.spawn();' Line Number: 289
User prompt
Please fix the bug: 'powerUp.spawn is not a function' in or related to this line: 'powerUp.spawn();' Line Number: 307
User prompt
Please fix the bug: 'zombie.spawn is not a function' in or related to this line: 'zombie.spawn();' Line Number: 289
Code edit (1 edits merged)
Please save this source code
User prompt
after the txt message disappear then zombie spawn
Code edit (1 edits merged)
Please save this source code
User prompt
wave txt is shown for 2 seconds
Code edit (1 edits merged)
Please save this source code
User prompt
decrease chance of power up to 0.6
Code edit (1 edits merged)
Please save this source code
User prompt
send to slightly right
User prompt
send to slightly right
User prompt
send to slightly left
Code edit (1 edits merged)
Please save this source code
User prompt
")" Now instead of this symbol it should be written how many zombies have died so far.
Code edit (1 edits merged)
Please save this source code
Code edit (4 edits merged)
Please save this source code
User prompt
send to slightly up
/****
* Classes
****/
/****
* Base Container Class
****/
var BaseContainer = Container.expand(function () {
var self = Container.call(this);
self.health = 1;
self.maxHealth = 1;
self.takeDamage = function (amount) {
self.health -= amount;
return self.health <= 0;
};
self.heal = function (amount) {
self.health = Math.min(self.health + amount, self.maxHealth);
};
return self;
});
/****
* Power-Up Class
****/
var PowerUp = BaseContainer.expand(function () {
var self = BaseContainer.call(this);
var powerUpGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = ['speedBoost', 'damageBoost', 'healthBoost'][Math.floor(Math.random() * 3)];
self.speed = -5;
self.update = function () {
self.x += self.speed;
};
return self;
});
/****
* Player Class
****/
var Player = BaseContainer.expand(function () {
var self = BaseContainer.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 10;
self.health = 100;
self.maxHealth = 100;
self.powerUpDuration = 0;
self.powerUpType = null;
self.bulletDamageMultiplier = 1;
self.activatePowerUp = function (type) {
self.powerUpType = type;
self.powerUpDuration = 300; // 5 seconds at 60 FPS
switch (type) {
case 'speedBoost':
self.speed *= 2;
break;
case 'damageBoost':
self.bulletDamageMultiplier = 2;
break;
case 'healthBoost':
self.health = self.maxHealth; // Fully restore health
break;
}
};
self.updatePowerUp = function () {
if (self.powerUpDuration > 0) {
self.powerUpDuration--;
if (self.powerUpDuration <= 0) {
// Reset power-up effects
self.speed = 10;
self.bulletDamageMultiplier = 1;
self.powerUpType = null;
}
}
};
self.update = function () {
self.updatePowerUp();
};
return self;
});
/****
* Bullet Class
****/
var Bullet = BaseContainer.expand(function () {
var self = BaseContainer.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.damage = 1;
self.update = function () {
self.x += self.speed;
};
return self;
});
/****
* Zombie Base Class
****/
var BaseZombie = BaseContainer.expand(function () {
var self = BaseContainer.call(this);
self.speed = 2;
self.update = function () {
var dx = player.x - self.x;
var dy = player.y - self.y;
var magnitude = Math.sqrt(dx * dx + dy * dy);
if (magnitude > 0) {
dx /= magnitude;
dy /= magnitude;
self.x += dx * self.speed;
self.y += dy * self.speed;
}
};
self.spawn = function () {
game.addChild(self);
zombies.push(self);
};
return self;
});
/****
* Specific Zombie Types
****/
var WeakZombie = BaseZombie.expand(function () {
var self = BaseZombie.call(this);
var zombieGraphics = self.attachAsset('weakZombie', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.health = 1;
self.damage = 10;
return self;
});
var ToughZombie = BaseZombie.expand(function () {
var self = BaseZombie.call(this);
var zombieGraphics = self.attachAsset('toughZombie', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1.5;
self.health = 3;
self.damage = 20;
return self;
});
var FastZombie = BaseZombie.expand(function () {
var self = BaseZombie.call(this);
var zombieGraphics = self.attachAsset('fastZombie', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.health = 1;
self.damage = 15;
return self;
});
/****
* Initialize Game
****/
/****
* Wave System
****/
/****
* Game Initialization
****/
var game = new LK.Game({
backgroundColor: 0x2C3E50
});
/****
* Game Code
****/
// Image Assets
/****
* Wave System
****/
// Sound Assets
// Image Assets
/*****
* Zombie Shooter Game
* Full Implementation with Enhanced Features
*****/
// Background
var WaveSystem = {
currentWave: 0,
zombiesRemaining: 0,
zombiesKilled: 0,
waveCooldown: 300,
powerUpSpawnChance: 0.4,
zombieTypes: [{
type: WeakZombie,
baseCount: 3
}, {
type: FastZombie,
baseCount: 2
}, {
type: ToughZombie,
baseCount: 1
}],
startNextWave: function startNextWave() {
var _this = this;
this.currentWave++;
this.zombiesKilled = 0;
// Show the "Wave Complete" message before starting the next wave
if (this.currentWave > 1) {
this.showWaveCompleteMessage(function () {
_this.initiateWave(); // Start the next wave
});
} else {
this.initiateWave();
}
},
initiateWave: function initiateWave() {
// Calculate zombie composition for the wave
var zombieComposition = this.calculateZombieComposition();
this.zombiesRemaining = zombieComposition.total;
// Display the wave start message
var waveText = new Text2('WAVE ' + this.currentWave + '\nāļø Zombie Invasion āļø\nš§ Weak: ' + zombieComposition.weakCount + '\nā” Fast: ' + zombieComposition.fastCount + '\nšŖ Tough: ' + zombieComposition.toughCount, {
size: 70,
fill: 0xFF0000,
align: 'center'
});
waveText.anchor.set(0.5, 0.5);
waveText.x = 2048 / 2;
waveText.y = 2732 / 2;
game.addChild(waveText);
LK.getSound('waveStart').play();
LK.setTimeout(function () {
game.removeChild(waveText);
}, 3000);
// Spawn zombies for this wave
this.spawnWaveZombies(zombieComposition);
// Spawn a power-up if applicable
if (Math.random() < this.powerUpSpawnChance) {
this.spawnPowerUp();
}
},
showWaveCompleteMessage: function showWaveCompleteMessage(callback) {
// Display the wave complete message
var completeText = new Text2('WAVE COMPLETE!\nPrepare for the next wave...', {
size: 80,
fill: 0x00FF00,
align: 'center'
});
completeText.anchor.set(0.5, 0.5);
completeText.x = 2048 / 2;
completeText.y = 2732 / 2;
game.addChild(completeText);
LK.setTimeout(function () {
game.removeChild(completeText);
// Proceed to the next step (callback)
if (typeof callback === 'function') {
callback();
}
}, 3000); // Show message for 3 seconds
},
calculateZombieComposition: function calculateZombieComposition() {
// Determine how many zombies of each type to spawn
var weakCount = this.currentWave * this.zombieTypes[0].baseCount;
var fastCount = this.currentWave * this.zombieTypes[1].baseCount;
var toughCount = this.currentWave * this.zombieTypes[2].baseCount;
return {
weakCount: weakCount,
fastCount: fastCount,
toughCount: toughCount,
total: weakCount + fastCount + toughCount
};
},
spawnWaveZombies: function spawnWaveZombies(composition) {
// Spawn the zombies for this wave
for (var i = 0; i < composition.weakCount; i++) {
var zombie = new this.zombieTypes[0].type();
zombie.spawn();
}
for (var i = 0; i < composition.fastCount; i++) {
var zombie = new this.zombieTypes[1].type();
zombie.spawn();
}
for (var i = 0; i < composition.toughCount; i++) {
var zombie = new this.zombieTypes[2].type();
zombie.spawn();
}
},
spawnPowerUp: function spawnPowerUp() {
// Spawn a random power-up
var powerUp = new PowerUp();
powerUp.spawn();
},
zombieKilled: function zombieKilled() {
var _this2 = this;
// Update zombie counts when one is killed
this.zombiesKilled++;
this.zombiesRemaining--;
if (this.zombiesRemaining <= 0) {
LK.setTimeout(function () {
_this2.startNextWave();
}, this.waveCooldown);
}
}
};
var background = game.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
// Player
var player = game.addChild(new Player());
player.x = 150;
player.y = 2732 / 2;
// Health Bar
var healthBarBorder = LK.getAsset('healthBarBorder', {
anchorX: 0.5,
anchorY: 0.5
});
healthBarBorder.x = 2048 - healthBarBorder.width / 2 - 50;
healthBarBorder.y = 2732 - 50;
game.addChild(healthBarBorder);
var healthBar = LK.getAsset('healthBar', {
anchorX: 0,
anchorY: 0.5
});
healthBar.x = healthBarBorder.x - healthBarBorder.width / 2;
healthBar.y = healthBarBorder.y;
game.addChild(healthBar);
// Tracking Arrays
var bullets = [];
var zombies = [];
var powerUps = [];
// Score
var score = 0;
var scoreTxt = new Text2('Score: 0 | Zombies Killed: 0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.x = 2048 / 2 - 150;
scoreTxt.y = 50;
// Power-Up Bar
var powerUpBar = null;
// Add text 'Killed Zombie =)' at the bottom left of the screen
var killedZombieText = new Text2('Zombies Killed: ' + WaveSystem.zombiesKilled, {
size: 130,
fill: 0xFFFFFF
});
killedZombieText.anchor.set(0, 0);
killedZombieText.x = 30;
killedZombieText.y = 90;
game.addChild(killedZombieText);
/****
* Game Mechanics
****/
function shootBullet() {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
/****
* Game Update Loop
****/
game.update = function () {
player.update();
// Health Bar Update
if (player.health > 0) {
healthBar.width = player.health * 10;
} else {
healthBar.width = 0;
LK.showGameOver();
}
// Power-Up Bar Update
if (player.powerUpType) {
if (!powerUpBar) {
powerUpBar = LK.getAsset('powerUpBar', {
anchorX: 0,
anchorY: 0.5
});
powerUpBar.x = healthBarBorder.x - healthBarBorder.width / 2;
powerUpBar.y = healthBarBorder.y + 50;
game.addChild(powerUpBar);
}
powerUpBar.width = player.powerUpDuration / 300 * 500;
} else if (powerUpBar) {
game.removeChild(powerUpBar);
powerUpBar = null;
}
// Bullets Update
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].update();
if (bullets[i].x > 2048) {
bullets[i].destroy();
bullets.splice(i, 1);
}
}
// Zombies Update
for (var j = zombies.length - 1; j >= 0; j--) {
zombies[j].update();
if (zombies[j].intersects(player)) {
player.takeDamage(zombies[j].damage);
zombies[j].destroy();
zombies.splice(j, 1);
LK.getSound('zombieHit').play();
}
}
// Power-Ups Update
for (var p = powerUps.length - 1; p >= 0; p--) {
powerUps[p].update();
// Power-up collection
if (powerUps[p].intersects(player)) {
player.activatePowerUp(powerUps[p].type);
LK.getSound('powerUp').play();
powerUps[p].destroy();
powerUps.splice(p, 1);
}
// Remove power-ups that go off-screen
if (powerUps[p] && powerUps[p].x < -100) {
powerUps[p].destroy();
powerUps.splice(p, 1);
}
}
// Bullet-Zombie Collisions
for (var k = bullets.length - 1; k >= 0; k--) {
for (var l = zombies.length - 1; l >= 0; l--) {
if (bullets[k].intersects(zombies[l])) {
// Calculate damage with potential power-up multiplier
var damage = bullets[k].damage * (player.bulletDamageMultiplier || 1);
if (zombies[l].takeDamage(damage)) {
score += 10;
WaveSystem.zombieKilled();
zombies[l].destroy();
zombies.splice(l, 1);
LK.getSound('zombieKill').play();
}
bullets[k].destroy();
bullets.splice(k, 1);
break;
}
}
}
// Wave System Management
if (LK.ticks % WaveSystem.waveCooldown === 0) {
if (zombies.length === 0) {
WaveSystem.startNextWave();
}
}
};
/****
* Game Controls
****/
game.down = function (x, y, obj) {
shootBullet();
};
game.move = function (x, y, obj) {
player.x = x;
player.y = y;
};
// Game Over Handler (if not already defined)
LK.showGameOver = function () {
// Create game over screen
var gameOverText = new Text2('GAME OVER\nScore: ' + score, {
size: 100,
fill: 0xFF0000,
align: 'center'
});
gameOverText.anchor.set(0.5, 0.5);
gameOverText.x = 2048 / 2;
gameOverText.y = 2732 / 2;
game.addChild(gameOverText);
// Add restart button
var restartButton = new Text2('RESTART', {
size: 50,
fill: 0xFFFFFF,
align: 'center'
});
restartButton.anchor.set(0.5, 0.5);
restartButton.x = 2048 / 2;
restartButton.y = 2732 / 2 + 200;
game.addChild(restartButton);
// Restart functionality
restartButton.interactive = true;
restartButton.on('mousedown', function () {
// Reset game state
score = 0;
zombies = [];
bullets = [];
powerUps = [];
// Reset player
player.health = 100;
player.powerUpType = null;
player.powerUpDuration = 0;
player.bulletDamageMultiplier = 1;
// Reset wave system
WaveSystem.currentWave = 0;
// Remove game over elements
game.removeChild(gameOverText);
game.removeChild(restartButton);
// Restart the game
WaveSystem.startNextWave();
});
};
// Start the first wave when the game begins
WaveSystem.startNextWave(); ===================================================================
--- original.js
+++ change.js
@@ -30,12 +30,8 @@
self.speed = -5;
self.update = function () {
self.x += self.speed;
};
- self.spawn = function () {
- game.addChild(self);
- powerUps.push(self);
- };
return self;
});
/****
* Player Class
@@ -174,19 +170,19 @@
/****
* Game Code
****/
-// Background
-/*****
-* Zombie Shooter Game
-* Full Implementation with Enhanced Features
-*****/
// Image Assets
-// Sound Assets
/****
* Wave System
****/
+// Sound Assets
// Image Assets
+/*****
+* Zombie Shooter Game
+* Full Implementation with Enhanced Features
+*****/
+// Background
var WaveSystem = {
currentWave: 0,
zombiesRemaining: 0,
zombiesKilled: 0,
make player like this style
make full legs of this player
bullet. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
more dangorous
make horror
red heart. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
rename text to -- Zombie Killed