User prompt
Yine eklenmedi. O zaman oynadığımız tuş ile ard arda çift tıklayınca mermiyi durdursun eğer tekrar ard arda çift tıklarsak tekrar başlatsın.
User prompt
mermiyi durdurup başlatma mekaniği oyuna gelmedi. bunu ekler misin?
User prompt
mermiler çoğu zaman boşa gidiyor. right click ile mermileri durdurup başlatabilelim.
User prompt
kamera oyuncuyu takip etsin
User prompt
Tamamdır. o zaman uygun bir şekilde yapalım
User prompt
rastgele yerlerde %25 ihtimalle ammo spawnlansın
User prompt
HUD yazılarını zombi temasına daha uygun bir font ile değiştir.
User prompt
Difficult 2. seviye olduğu zaman rapid fire çıkma ihtimali %10 olsun, Healt pack çıkma ihtimali ise %15 olsun
User prompt
tamamdır. Bekliyorum.
User prompt
Texture görseli çok karanlık gözüküyor. onu normal kendi renkleri ile görelim ve görsel arkaplana tam oturmuyor onu da düzeltelim.
User prompt
arkaplan görseli çoklu kareler şeklinde gözüküyor. tek bir görsel şeklinde gözüksün.
User prompt
o zaman sen nasıl uygun görüyorsan onu yap
User prompt
oyun gittikçe adım adım daha da zorlaşsın
User prompt
fare ile sağ tıkladığımız zaman mermi atışını durdurup başlatabilelim.
User prompt
zombie walker ın canını biraz arttıralım, zombie brute un canını ise bayağı arttıralım
User prompt
o zaman buna benzer bu işlevi gören alternatif bir sistem yapalım
User prompt
rapid fire düşme ihtimalini %5 yapalım ve healt pack düşme ihtimali de %10 olsun
User prompt
Canavarlardan %50 olasılıkla ammo düşsün ve canavarlardan %15 ihtimalle rapid fire düşsün.
Code edit (1 edits merged)
Please save this source code
User prompt
Zombie Shooter
Initial prompt
zombilerle silah ile savaştığımız bir oyun yapar mısın?
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.damage = 25;
self.targetX = 0;
self.targetY = 0;
self.directionX = 0;
self.directionY = 0;
self.setTarget = function (targetX, targetY) {
var dx = targetX - self.x;
var dy = targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.directionX = dx / distance;
self.directionY = dy / distance;
}
};
self.update = function () {
self.x += self.directionX * self.speed;
self.y += self.directionY * self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
self.ammo = 50;
self.maxAmmo = 100;
self.shootCooldown = 0;
self.shootRate = 15; // shoots every 15 ticks
self.rapidFireBonus = 0;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0) {
self.health = 0;
return true; // player died
}
return false;
};
self.addHealth = function (amount) {
self.health = Math.min(self.health + amount, self.maxHealth);
};
self.addAmmo = function (amount) {
self.ammo = Math.min(self.ammo + amount, self.maxAmmo);
};
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
if (self.rapidFireBonus > 0) {
self.rapidFireBonus--;
}
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
self.type = 'health';
self.lifetime = 600; // 10 seconds at 60fps
self.update = function () {
self.lifetime--;
if (self.lifetime <= 0) {
return true; // should be removed
}
return false;
};
return self;
});
var RapidFire = PowerUp.expand(function () {
var self = PowerUp.call(this);
var packGraphics = self.attachAsset('rapidFire', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = 'rapidfire';
self.value = 300; // 5 seconds of rapid fire
return self;
});
var HealthPack = PowerUp.expand(function () {
var self = PowerUp.call(this);
var packGraphics = self.attachAsset('healthPack', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = 'health';
self.value = 30;
return self;
});
var AmmoPack = PowerUp.expand(function () {
var self = PowerUp.call(this);
var packGraphics = self.attachAsset('ammoPack', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = 'ammo';
self.value = 25;
return self;
});
var Zombie = Container.expand(function () {
var self = Container.call(this);
self.health = 50;
self.maxHealth = 50;
self.speed = 2;
self.damage = 20;
self.scoreValue = 10;
self.type = 'walker';
self.takeDamage = function (damage) {
self.health -= damage;
return self.health <= 0;
};
self.update = function () {
// Move toward player
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
};
return self;
});
var ZombieWalker = Zombie.expand(function () {
var self = Zombie.call(this);
var zombieGraphics = self.attachAsset('zombieWalker', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 50;
self.maxHealth = 50;
self.speed = 2;
self.damage = 20;
self.scoreValue = 10;
self.type = 'walker';
return self;
});
var ZombieRunner = Zombie.expand(function () {
var self = Zombie.call(this);
var zombieGraphics = self.attachAsset('zombieRunner', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 30;
self.maxHealth = 30;
self.speed = 4;
self.damage = 15;
self.scoreValue = 15;
self.type = 'runner';
return self;
});
var ZombieBrute = Zombie.expand(function () {
var self = Zombie.call(this);
var zombieGraphics = self.attachAsset('zombieBrute', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
self.speed = 1;
self.damage = 35;
self.scoreValue = 25;
self.type = 'brute';
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2d2d2d
});
/****
* Game Code
****/
// Game variables
var player;
var bullets = [];
var zombies = [];
var powerUps = [];
var waveNumber = 1;
var zombiesKilled = 0;
var gameTime = 0;
var spawnTimer = 0;
var powerUpTimer = 0;
var dragNode = null;
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 40,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 0);
scoreText.x = 120;
scoreText.y = 20;
LK.gui.topLeft.addChild(scoreText);
var healthText = new Text2('Health: 100', {
size: 40,
fill: 0xFF0000
});
healthText.anchor.set(0.5, 0);
LK.gui.top.addChild(healthText);
var ammoText = new Text2('Ammo: 50', {
size: 40,
fill: 0xFFFF00
});
ammoText.anchor.set(1, 0);
ammoText.x = -20;
ammoText.y = 20;
LK.gui.topRight.addChild(ammoText);
var waveText = new Text2('Wave: 1', {
size: 40,
fill: 0x00FF00
});
waveText.anchor.set(0.5, 0);
waveText.y = 80;
LK.gui.top.addChild(waveText);
// Initialize player
player = game.addChild(new Player());
player.x = 1024;
player.y = 1366;
// Helper functions
function updateUI() {
scoreText.setText('Score: ' + LK.getScore());
healthText.setText('Health: ' + player.health);
ammoText.setText('Ammo: ' + player.ammo);
waveText.setText('Wave: ' + waveNumber);
}
function getRandomSpawnPosition() {
var side = Math.floor(Math.random() * 4);
var x, y;
switch (side) {
case 0:
// top
x = Math.random() * 2048;
y = -50;
break;
case 1:
// right
x = 2098;
y = Math.random() * 2732;
break;
case 2:
// bottom
x = Math.random() * 2048;
y = 2782;
break;
case 3:
// left
x = -50;
y = Math.random() * 2732;
break;
}
return {
x: x,
y: y
};
}
function spawnZombie() {
var pos = getRandomSpawnPosition();
var zombie;
var rand = Math.random();
if (rand < 0.6) {
zombie = new ZombieWalker();
} else if (rand < 0.85) {
zombie = new ZombieRunner();
} else {
zombie = new ZombieBrute();
}
zombie.x = pos.x;
zombie.y = pos.y;
zombies.push(zombie);
game.addChild(zombie);
}
function spawnPowerUp() {
var x = Math.random() * 1800 + 124; // Keep away from edges
var y = Math.random() * 2400 + 166;
var powerUp;
var rand = Math.random();
if (rand < 0.4) {
powerUp = new HealthPack();
} else if (rand < 0.7) {
powerUp = new AmmoPack();
} else {
powerUp = new RapidFire();
}
powerUp.x = x;
powerUp.y = y;
powerUps.push(powerUp);
game.addChild(powerUp);
}
function findNearestZombie() {
var nearestZombie = null;
var minDistance = Infinity;
for (var i = 0; i < zombies.length; i++) {
var zombie = zombies[i];
var dx = zombie.x - player.x;
var dy = zombie.y - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < minDistance) {
minDistance = distance;
nearestZombie = zombie;
}
}
return nearestZombie;
}
function shootAtZombie() {
if (player.ammo <= 0 || player.shootCooldown > 0) {
return;
}
var target = findNearestZombie();
if (!target) {
return;
}
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
bullet.setTarget(target.x, target.y);
bullets.push(bullet);
game.addChild(bullet);
player.ammo--;
player.shootCooldown = player.rapidFireBonus > 0 ? 5 : player.shootRate;
LK.getSound('shoot').play();
}
// Event handlers
game.down = function (x, y, obj) {
dragNode = player;
player.x = x;
player.y = y;
};
game.move = function (x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game loop
game.update = function () {
gameTime++;
// Update spawn rate based on wave
var baseSpawnRate = Math.max(120 - waveNumber * 10, 30);
if (gameTime % baseSpawnRate === 0) {
spawnZombie();
}
// Spawn power-ups occasionally
powerUpTimer++;
if (powerUpTimer >= 1800) {
// Every 30 seconds
spawnPowerUp();
powerUpTimer = 0;
}
// Try to shoot
shootAtZombie();
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Check if bullet is off screen
if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check bullet-zombie collisions
var hitZombie = false;
for (var j = zombies.length - 1; j >= 0; j--) {
var zombie = zombies[j];
if (bullet.intersects(zombie)) {
if (zombie.takeDamage(bullet.damage)) {
// Zombie is dead
LK.setScore(LK.getScore() + zombie.scoreValue);
zombiesKilled++;
zombie.destroy();
zombies.splice(j, 1);
LK.getSound('zombieHit').play();
// Check for wave progression
if (zombiesKilled >= waveNumber * 10) {
waveNumber++;
zombiesKilled = 0;
}
}
bullet.destroy();
bullets.splice(i, 1);
hitZombie = true;
break;
}
}
if (hitZombie) continue;
}
// Update zombies and check player collision
for (var i = zombies.length - 1; i >= 0; i--) {
var zombie = zombies[i];
if (zombie.intersects(player)) {
if (player.takeDamage(zombie.damage)) {
// Player died
LK.showGameOver();
return;
}
LK.getSound('damage').play();
LK.effects.flashScreen(0xff0000, 500);
zombie.destroy();
zombies.splice(i, 1);
}
}
// Update power-ups and check collection
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
if (powerUp.update()) {
// Power-up expired
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
if (powerUp.intersects(player)) {
LK.getSound('powerup').play();
switch (powerUp.type) {
case 'health':
player.addHealth(powerUp.value);
break;
case 'ammo':
player.addAmmo(powerUp.value);
break;
case 'rapidfire':
player.rapidFireBonus = powerUp.value;
break;
}
powerUp.destroy();
powerUps.splice(i, 1);
}
}
// Update UI
updateUI();
// Check win condition (survive for 10 minutes)
if (gameTime >= 36000) {
// 10 minutes at 60fps
LK.showYouWin();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,456 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 15;
+ self.damage = 25;
+ self.targetX = 0;
+ self.targetY = 0;
+ self.directionX = 0;
+ self.directionY = 0;
+ self.setTarget = function (targetX, targetY) {
+ var dx = targetX - self.x;
+ var dy = targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ self.directionX = dx / distance;
+ self.directionY = dy / distance;
+ }
+ };
+ self.update = function () {
+ self.x += self.directionX * self.speed;
+ self.y += self.directionY * self.speed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 100;
+ self.maxHealth = 100;
+ self.ammo = 50;
+ self.maxAmmo = 100;
+ self.shootCooldown = 0;
+ self.shootRate = 15; // shoots every 15 ticks
+ self.rapidFireBonus = 0;
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ if (self.health <= 0) {
+ self.health = 0;
+ return true; // player died
+ }
+ return false;
+ };
+ self.addHealth = function (amount) {
+ self.health = Math.min(self.health + amount, self.maxHealth);
+ };
+ self.addAmmo = function (amount) {
+ self.ammo = Math.min(self.ammo + amount, self.maxAmmo);
+ };
+ self.update = function () {
+ if (self.shootCooldown > 0) {
+ self.shootCooldown--;
+ }
+ if (self.rapidFireBonus > 0) {
+ self.rapidFireBonus--;
+ }
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ self.type = 'health';
+ self.lifetime = 600; // 10 seconds at 60fps
+ self.update = function () {
+ self.lifetime--;
+ if (self.lifetime <= 0) {
+ return true; // should be removed
+ }
+ return false;
+ };
+ return self;
+});
+var RapidFire = PowerUp.expand(function () {
+ var self = PowerUp.call(this);
+ var packGraphics = self.attachAsset('rapidFire', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'rapidfire';
+ self.value = 300; // 5 seconds of rapid fire
+ return self;
+});
+var HealthPack = PowerUp.expand(function () {
+ var self = PowerUp.call(this);
+ var packGraphics = self.attachAsset('healthPack', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'health';
+ self.value = 30;
+ return self;
+});
+var AmmoPack = PowerUp.expand(function () {
+ var self = PowerUp.call(this);
+ var packGraphics = self.attachAsset('ammoPack', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'ammo';
+ self.value = 25;
+ return self;
+});
+var Zombie = Container.expand(function () {
+ var self = Container.call(this);
+ self.health = 50;
+ self.maxHealth = 50;
+ self.speed = 2;
+ self.damage = 20;
+ self.scoreValue = 10;
+ self.type = 'walker';
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ return self.health <= 0;
+ };
+ self.update = function () {
+ // Move toward player
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var ZombieWalker = Zombie.expand(function () {
+ var self = Zombie.call(this);
+ var zombieGraphics = self.attachAsset('zombieWalker', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 50;
+ self.maxHealth = 50;
+ self.speed = 2;
+ self.damage = 20;
+ self.scoreValue = 10;
+ self.type = 'walker';
+ return self;
+});
+var ZombieRunner = Zombie.expand(function () {
+ var self = Zombie.call(this);
+ var zombieGraphics = self.attachAsset('zombieRunner', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 30;
+ self.maxHealth = 30;
+ self.speed = 4;
+ self.damage = 15;
+ self.scoreValue = 15;
+ self.type = 'runner';
+ return self;
+});
+var ZombieBrute = Zombie.expand(function () {
+ var self = Zombie.call(this);
+ var zombieGraphics = self.attachAsset('zombieBrute', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 100;
+ self.maxHealth = 100;
+ self.speed = 1;
+ self.damage = 35;
+ self.scoreValue = 25;
+ self.type = 'brute';
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2d2d2d
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var bullets = [];
+var zombies = [];
+var powerUps = [];
+var waveNumber = 1;
+var zombiesKilled = 0;
+var gameTime = 0;
+var spawnTimer = 0;
+var powerUpTimer = 0;
+var dragNode = null;
+// UI Elements
+var scoreText = new Text2('Score: 0', {
+ size: 40,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0, 0);
+scoreText.x = 120;
+scoreText.y = 20;
+LK.gui.topLeft.addChild(scoreText);
+var healthText = new Text2('Health: 100', {
+ size: 40,
+ fill: 0xFF0000
+});
+healthText.anchor.set(0.5, 0);
+LK.gui.top.addChild(healthText);
+var ammoText = new Text2('Ammo: 50', {
+ size: 40,
+ fill: 0xFFFF00
+});
+ammoText.anchor.set(1, 0);
+ammoText.x = -20;
+ammoText.y = 20;
+LK.gui.topRight.addChild(ammoText);
+var waveText = new Text2('Wave: 1', {
+ size: 40,
+ fill: 0x00FF00
+});
+waveText.anchor.set(0.5, 0);
+waveText.y = 80;
+LK.gui.top.addChild(waveText);
+// Initialize player
+player = game.addChild(new Player());
+player.x = 1024;
+player.y = 1366;
+// Helper functions
+function updateUI() {
+ scoreText.setText('Score: ' + LK.getScore());
+ healthText.setText('Health: ' + player.health);
+ ammoText.setText('Ammo: ' + player.ammo);
+ waveText.setText('Wave: ' + waveNumber);
+}
+function getRandomSpawnPosition() {
+ var side = Math.floor(Math.random() * 4);
+ var x, y;
+ switch (side) {
+ case 0:
+ // top
+ x = Math.random() * 2048;
+ y = -50;
+ break;
+ case 1:
+ // right
+ x = 2098;
+ y = Math.random() * 2732;
+ break;
+ case 2:
+ // bottom
+ x = Math.random() * 2048;
+ y = 2782;
+ break;
+ case 3:
+ // left
+ x = -50;
+ y = Math.random() * 2732;
+ break;
+ }
+ return {
+ x: x,
+ y: y
+ };
+}
+function spawnZombie() {
+ var pos = getRandomSpawnPosition();
+ var zombie;
+ var rand = Math.random();
+ if (rand < 0.6) {
+ zombie = new ZombieWalker();
+ } else if (rand < 0.85) {
+ zombie = new ZombieRunner();
+ } else {
+ zombie = new ZombieBrute();
+ }
+ zombie.x = pos.x;
+ zombie.y = pos.y;
+ zombies.push(zombie);
+ game.addChild(zombie);
+}
+function spawnPowerUp() {
+ var x = Math.random() * 1800 + 124; // Keep away from edges
+ var y = Math.random() * 2400 + 166;
+ var powerUp;
+ var rand = Math.random();
+ if (rand < 0.4) {
+ powerUp = new HealthPack();
+ } else if (rand < 0.7) {
+ powerUp = new AmmoPack();
+ } else {
+ powerUp = new RapidFire();
+ }
+ powerUp.x = x;
+ powerUp.y = y;
+ powerUps.push(powerUp);
+ game.addChild(powerUp);
+}
+function findNearestZombie() {
+ var nearestZombie = null;
+ var minDistance = Infinity;
+ for (var i = 0; i < zombies.length; i++) {
+ var zombie = zombies[i];
+ var dx = zombie.x - player.x;
+ var dy = zombie.y - player.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < minDistance) {
+ minDistance = distance;
+ nearestZombie = zombie;
+ }
+ }
+ return nearestZombie;
+}
+function shootAtZombie() {
+ if (player.ammo <= 0 || player.shootCooldown > 0) {
+ return;
+ }
+ var target = findNearestZombie();
+ if (!target) {
+ return;
+ }
+ var bullet = new Bullet();
+ bullet.x = player.x;
+ bullet.y = player.y;
+ bullet.setTarget(target.x, target.y);
+ bullets.push(bullet);
+ game.addChild(bullet);
+ player.ammo--;
+ player.shootCooldown = player.rapidFireBonus > 0 ? 5 : player.shootRate;
+ LK.getSound('shoot').play();
+}
+// Event handlers
+game.down = function (x, y, obj) {
+ dragNode = player;
+ player.x = x;
+ player.y = y;
+};
+game.move = function (x, y, obj) {
+ if (dragNode) {
+ dragNode.x = x;
+ dragNode.y = y;
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game loop
+game.update = function () {
+ gameTime++;
+ // Update spawn rate based on wave
+ var baseSpawnRate = Math.max(120 - waveNumber * 10, 30);
+ if (gameTime % baseSpawnRate === 0) {
+ spawnZombie();
+ }
+ // Spawn power-ups occasionally
+ powerUpTimer++;
+ if (powerUpTimer >= 1800) {
+ // Every 30 seconds
+ spawnPowerUp();
+ powerUpTimer = 0;
+ }
+ // Try to shoot
+ shootAtZombie();
+ // Update bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ // Check if bullet is off screen
+ if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ // Check bullet-zombie collisions
+ var hitZombie = false;
+ for (var j = zombies.length - 1; j >= 0; j--) {
+ var zombie = zombies[j];
+ if (bullet.intersects(zombie)) {
+ if (zombie.takeDamage(bullet.damage)) {
+ // Zombie is dead
+ LK.setScore(LK.getScore() + zombie.scoreValue);
+ zombiesKilled++;
+ zombie.destroy();
+ zombies.splice(j, 1);
+ LK.getSound('zombieHit').play();
+ // Check for wave progression
+ if (zombiesKilled >= waveNumber * 10) {
+ waveNumber++;
+ zombiesKilled = 0;
+ }
+ }
+ bullet.destroy();
+ bullets.splice(i, 1);
+ hitZombie = true;
+ break;
+ }
+ }
+ if (hitZombie) continue;
+ }
+ // Update zombies and check player collision
+ for (var i = zombies.length - 1; i >= 0; i--) {
+ var zombie = zombies[i];
+ if (zombie.intersects(player)) {
+ if (player.takeDamage(zombie.damage)) {
+ // Player died
+ LK.showGameOver();
+ return;
+ }
+ LK.getSound('damage').play();
+ LK.effects.flashScreen(0xff0000, 500);
+ zombie.destroy();
+ zombies.splice(i, 1);
+ }
+ }
+ // Update power-ups and check collection
+ for (var i = powerUps.length - 1; i >= 0; i--) {
+ var powerUp = powerUps[i];
+ if (powerUp.update()) {
+ // Power-up expired
+ powerUp.destroy();
+ powerUps.splice(i, 1);
+ continue;
+ }
+ if (powerUp.intersects(player)) {
+ LK.getSound('powerup').play();
+ switch (powerUp.type) {
+ case 'health':
+ player.addHealth(powerUp.value);
+ break;
+ case 'ammo':
+ player.addAmmo(powerUp.value);
+ break;
+ case 'rapidfire':
+ player.rapidFireBonus = powerUp.value;
+ break;
+ }
+ powerUp.destroy();
+ powerUps.splice(i, 1);
+ }
+ }
+ // Update UI
+ updateUI();
+ // Check win condition (survive for 10 minutes)
+ if (gameTime >= 36000) {
+ // 10 minutes at 60fps
+ LK.showYouWin();
+ }
+};
\ No newline at end of file
Ammo pack. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Bullet. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Healt pack. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
üstten görünümlü yuvarlak asker. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
rapid fire. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
üsttem görünümlü yuvarlak zombi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
üsttem görünümlü yuvarlak zombi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
üsttem görünümlü yuvarlak zombi büyük kolları var tek gözünde göz maskesi var ve elinde bir sopa var. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat