User prompt
çalınan müziğin asseti music olsun
User prompt
müziği çal
User prompt
mermi atış için cooldown ekle
User prompt
Please fix the bug: 'ReferenceError: bulletpowerups is not defined' in or related to this line: 'var totalActive = enemies.length + bulletpowerups.length;' Line Number: 349
User prompt
bulletpowerupı kaldır
User prompt
bulletpowerup score 70 ile 80 arasında bir zamanda %100 ihtimalle gelsin
User prompt
bulletpowerup score 70 ile 80 arasında bir zamanda gelsin
User prompt
düşman azıcık hızlı olsun
User prompt
oyuncunun canı 1 olsun
User prompt
score 150ye gelince You win olsun
User prompt
Please fix the bug: 'ReferenceError: powerups is not defined' in or related to this line: 'var totalActive = enemies.length + powerups.length + bulletpowerups.length;' Line Number: 410
User prompt
delete powerup
User prompt
score 50yi geçince %50 fastzombi gelsin
User prompt
yunun kasmasını engellemek için gelen düşman sayısını azalt
User prompt
aynı anda maksimum 10 düşman fastzombie veya powerup olsun
User prompt
zaman geçtikçe ordu sayısı artmasn, Powerup ve fastzombie sayısı artsın
User prompt
gelen düşmanları fastzombieyi ve powerupları yavaşlat
User prompt
düşman ve poweruplar sadece yukarıdan gelmesin etraftan da gelsin
User prompt
düşmanlar ve poweruplar oyuncunun üzerine gelsin
User prompt
karakteri ortaya koy, obstacleı kaldır.
Remix started
Copy ZombieHunt: Kill Them All!
/****
* Classes
****/
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletSprite = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5,
flipY: 1 // flip vertically
});
// Target coordinates for the bullet
self.targetX = null;
self.targetY = null;
self.speed = 48; // pixels per frame, positive value
self.dirX = 0;
self.dirY = -1;
self.setTarget = function (tx, ty) {
// Calculate direction vector
var dx = tx - self.x;
var dy = ty - self.y;
var len = Math.sqrt(dx * dx + dy * dy);
if (len > 0) {
self.dirX = dx / len;
self.dirY = dy / len;
} else {
self.dirX = 0;
self.dirY = -1;
}
self.targetX = tx;
self.targetY = ty;
};
self.update = function () {
// Store lastX/lastY for event triggers
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
// Move in direction
self.x += self.dirX * self.speed;
self.y += self.dirY * self.speed;
// Rotate bullet sprite to face movement direction
if (self.dirX !== 0 || self.dirY !== 0) {
// atan2 returns angle in radians, 0 is to the right, so subtract Math.PI/2 to make 0 point up
bulletSprite.rotation = Math.atan2(self.dirY, self.dirX) - Math.PI / 2;
}
// Update lastX/lastY for next frame
self.lastX = self.x;
self.lastY = self.y;
};
return self;
});
// Bulletpowerup class
var Bulletpowerup = Container.expand(function () {
var self = Container.call(this);
var bpSprite = self.attachAsset('Bulletpowerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = bpSprite.width * 0.5;
self.speed = (16 + Math.random() * 6) * 0.4; // slowed down
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
if (player) {
var dx = player.x - self.x;
var dy = player.y - self.y;
var len = Math.sqrt(dx * dx + dy * dy);
if (len > 0) {
self.x += dx / len * self.speed;
self.y += dy / len * self.speed;
} else {
self.y += self.speed;
}
} else {
self.y += self.speed;
}
// Update lastX/lastY for event triggers
self.lastX = self.x;
self.lastY = self.y;
};
return self;
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemySprite = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = enemySprite.width * 0.5;
self.speed = (3 + Math.random() * 3) * 0.4; // much slower zombies, slowed down further
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
if (player) {
var dx = player.x - self.x;
var dy = player.y - self.y;
var len = Math.sqrt(dx * dx + dy * dy);
if (len > 0) {
self.x += dx / len * self.speed;
self.y += dy / len * self.speed;
} else {
self.y += self.speed;
}
} else {
self.y += self.speed;
}
// Update lastX/lastY for event triggers
self.lastX = self.x;
self.lastY = self.y;
};
return self;
});
// FastZombie class
var FastZombie = Container.expand(function () {
var self = Container.call(this);
var fastZombieSprite = self.attachAsset('FastZombie', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = fastZombieSprite.width * 0.5;
self.speed = (10 + Math.random() * 4) * 0.4; // much faster than normal zombies, but slowed down
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
if (player) {
var dx = player.x - self.x;
var dy = player.y - self.y;
var len = Math.sqrt(dx * dx + dy * dy);
if (len > 0) {
self.x += dx / len * self.speed;
self.y += dy / len * self.speed;
} else {
self.y += self.speed;
}
} else {
self.y += self.speed;
}
// Update lastX/lastY for event triggers
self.lastX = self.x;
self.lastY = self.y;
};
return self;
});
// Obstacle class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obsSprite = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = obsSprite.width;
self.height = obsSprite.height;
self.speed = 12 + Math.random() * 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerSprite = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = playerSprite.width * 0.5;
self.lives = 3;
self.invincible = false;
self.invincibleTicks = 0;
self.shootCooldown = 0;
self.update = function () {
if (self.invincible) {
self.invincibleTicks--;
if (self.invincibleTicks <= 0) {
self.invincible = false;
playerSprite.alpha = 1;
} else {
// Flicker effect
playerSprite.alpha = LK.ticks % 10 < 5 ? 0.4 : 1;
}
}
if (self.shootCooldown > 0) self.shootCooldown--;
};
// Called when player is hit
self.hit = function () {
if (self.invincible) return;
self.lives--;
self.invincible = true;
self.invincibleTicks = 90; // 1.5 seconds
playerSprite.alpha = 0.4;
LK.effects.flashObject(self, 0xff0000, 500);
LK.getSound('hit').play();
};
// Called when player picks up a powerup
self.powerup = function () {
self.invincible = true;
self.invincibleTicks = 180; // 3 seconds
playerSprite.alpha = 0.4;
LK.getSound('powerup').play();
};
return self;
});
// Powerup class
var Powerup = Container.expand(function () {
var self = Container.call(this);
var puSprite = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = puSprite.width * 0.5;
self.speed = 10 * 0.4; // slowed down
// Add hit counter
self.hits = 0;
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
if (player) {
var dx = player.x - self.x;
var dy = player.y - self.y;
var len = Math.sqrt(dx * dx + dy * dy);
if (len > 0) {
self.x += dx / len * self.speed;
self.y += dy / len * self.speed;
} else {
self.y += self.speed;
}
} else {
self.y += self.speed;
}
// Update lastX/lastY for event triggers
self.lastX = self.x;
self.lastY = self.y;
};
// Called when powerup is hit by bullet
self.hit = function () {
self.hits++;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181818
});
/****
* Game Code
****/
// Music
// Sound effects
// Powerup: green ellipse
// Bullet: yellow box
// Obstacle: orange box
// Enemy: red ellipse
// Player character: blue box
// Game state variables
var player;
var bullets = [];
var enemies = [];
// Removed obstacles array as obstacles are deleted from the game
var powerups = [];
var bulletpowerups = [];
var bulletpowerupActive = false;
var bulletpowerupTimer = 0;
var dragNode = null;
var lastTouch = {
x: 0,
y: 0
};
var scoreTxt, livesTxt;
var spawnTick = 0;
var difficulty = 1;
var gameOver = false;
// UI
scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
livesTxt = new Text2('♥♥♥', {
size: 90,
fill: 0xFF5252
});
livesTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(livesTxt);
// Start music
LK.playMusic('arcadebg');
// Create player
player = new Player();
player.x = 2048 / 2;
player.y = 2732 / 2;
game.addChild(player);
// Helper: update lives display
function updateLives() {
var s = '';
for (var i = 0; i < player.lives; i++) s += '♥';
livesTxt.setText(s);
}
// Helper: spawn enemy
function spawnEnemy() {
var e = new Enemy();
// Randomly pick a spawn edge: 0=top, 1=bottom, 2=left, 3=right
var edge = Math.floor(Math.random() * 4);
if (edge === 0) {
// top
e.x = 200 + Math.random() * (2048 - 400);
e.y = -100;
} else if (edge === 1) {
// bottom
e.x = 200 + Math.random() * (2048 - 400);
e.y = 2732 + 100;
} else if (edge === 2) {
// left
e.x = -100;
e.y = 200 + Math.random() * (2732 - 400);
} else {
// right
e.x = 2048 + 100;
e.y = 200 + Math.random() * (2732 - 400);
}
enemies.push(e);
game.addChild(e);
}
// Removed spawnObstacle function as obstacles are deleted from the game
// Powerup spawn helper removed as per requirements
// Touch controls: drag player
game.down = function (x, y, obj) {
// Don't allow drag from top left 100x100
if (x < 100 && y < 100) return;
if (player && !gameOver) {
dragNode = player;
lastTouch.x = x;
lastTouch.y = y;
}
};
game.move = function (x, y, obj) {
if (dragNode && !gameOver) {
// Player movement disabled: do not update player.x or player.y
lastTouch.x = x;
lastTouch.y = y;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Tap to shoot (anywhere except top left 100x100)
game.on('down', function (x, y, obj) {
if (x < 100 && y < 100) return;
if (player && !gameOver && player.shootCooldown <= 0) {
if (bulletpowerupActive) {
// Shoot five bullets with slight angle spread
var angle = Math.atan2(y - player.y, x - player.x);
var spread = Math.PI / 16; // ~11.25 degrees
for (var i = -2; i <= 2; i++) {
var b = new Bullet();
b.x = player.x;
b.y = player.y - player.radius - 20;
// Calculate new target with spread
var targetAngle = angle + i * spread;
var dist = 1000;
var tx = player.x + Math.cos(targetAngle) * dist;
var ty = player.y + Math.sin(targetAngle) * dist;
b.setTarget(tx, ty);
bullets.push(b);
game.addChild(b);
}
player.shootCooldown = 12; // 0.2s
LK.getSound('shoot').play();
} else {
var b = new Bullet();
b.x = player.x;
b.y = player.y - player.radius - 20;
b.setTarget(x, y); // Set bullet direction toward tap
bullets.push(b);
game.addChild(b);
player.shootCooldown = 12; // 0.2s
LK.getSound('shoot').play();
}
}
});
// Main game loop
game.update = function () {
if (gameOver) return;
// Increase difficulty over time
// Increase zombie spawn rate by 10% for every 50 points scored
var newDifficulty = 1 + Math.floor(LK.getScore() / 50) * 0.1;
if (newDifficulty !== difficulty) {
difficulty = newDifficulty;
}
// Player update
player.update();
// Spawn logic
spawnTick++;
if (spawnTick % 30 === 0) {
// increased spawn rate, higher chance for more zombies
if (Math.random() < 0.85 * difficulty) spawnEnemy();
if (Math.random() < 0.25 * difficulty) spawnEnemy(); // sometimes spawn a second zombie
// FastZombie: 15% base chance, scales with difficulty, only after score >= 25
if (LK.getScore() >= 25 && Math.random() < 0.15 * difficulty) {
var fz = new FastZombie();
// Randomly pick a spawn edge: 0=top, 1=bottom, 2=left, 3=right
var edge = Math.floor(Math.random() * 4);
if (edge === 0) {
// top
fz.x = 200 + Math.random() * (2048 - 400);
fz.y = -100;
} else if (edge === 1) {
// bottom
fz.x = 200 + Math.random() * (2048 - 400);
fz.y = 2732 + 100;
} else if (edge === 2) {
// left
fz.x = -100;
fz.y = 200 + Math.random() * (2732 - 400);
} else {
// right
fz.x = 2048 + 100;
fz.y = 200 + Math.random() * (2732 - 400);
}
enemies.push(fz);
game.addChild(fz);
}
}
// Powerup spawn: 5% chance every spawn tick, but only after score >= 100
if (spawnTick % 40 === 0 && LK.getScore() >= 100) {
if (Math.random() < 0.05) {
var p = new Powerup();
// Randomly pick a spawn edge: 0=top, 1=bottom, 2=left, 3=right
var edge = Math.floor(Math.random() * 4);
if (edge === 0) {
// top
p.x = 200 + Math.random() * (2048 - 400);
p.y = -100;
} else if (edge === 1) {
// bottom
p.x = 200 + Math.random() * (2048 - 400);
p.y = 2732 + 100;
} else if (edge === 2) {
// left
p.x = -100;
p.y = 200 + Math.random() * (2732 - 400);
} else {
// right
p.x = 2048 + 100;
p.y = 200 + Math.random() * (2732 - 400);
}
powerups.push(p);
game.addChild(p);
}
// Bulletpowerup spawn: 1% chance every spawn tick, at any score
if (Math.random() < 0.01) {
var bp = new Bulletpowerup();
// Randomly pick a spawn edge: 0=top, 1=bottom, 2=left, 3=right
var edge = Math.floor(Math.random() * 4);
if (edge === 0) {
// top
bp.x = 200 + Math.random() * (2048 - 400);
bp.y = -100;
} else if (edge === 1) {
// bottom
bp.x = 200 + Math.random() * (2048 - 400);
bp.y = 2732 + 100;
} else if (edge === 2) {
// left
bp.x = -100;
bp.y = 200 + Math.random() * (2732 - 400);
} else {
// right
bp.x = 2048 + 100;
bp.y = 200 + Math.random() * (2732 - 400);
}
bulletpowerups.push(bp);
game.addChild(bp);
}
}
// Bulletpowerup timer logic
// bulletpowerupActive is now permanent once collected; timer logic removed
// Bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var b = bullets[i];
b.update();
if (b.y < -60) {
b.destroy();
bullets.splice(i, 1);
continue;
}
// Bullet hits enemy
for (var j = enemies.length - 1; j >= 0; j--) {
var e = enemies[j];
if (b.intersects(e)) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
LK.getSound('enemyDown').play();
e.destroy();
enemies.splice(j, 1);
b.destroy();
bullets.splice(i, 1);
break;
}
}
// Bullet hits powerup
for (var k = powerups.length - 1; k >= 0; k--) {
var p = powerups[k];
if (b.intersects(p)) {
if (typeof p.hits === "undefined") p.hits = 0;
if (typeof p.hit === "function") p.hit();
// Add 3 points to score when powerup is hit by bullet
LK.setScore(LK.getScore() + 3);
scoreTxt.setText(LK.getScore());
if (p.hits >= 5) {
p.destroy();
powerups.splice(k, 1);
}
b.destroy();
bullets.splice(i, 1);
break;
}
}
}
// Enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.update();
if (e.y > 2732 + 100) {
e.destroy();
enemies.splice(i, 1);
continue;
}
// Enemy hits player
if (e.intersects(player)) {
if (!player.invincible) {
player.hit();
updateLives();
if (player.lives <= 0) {
gameOver = true;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
e.destroy();
enemies.splice(i, 1);
}
}
// Obstacles removed from game
// Powerups
for (var i = powerups.length - 1; i >= 0; i--) {
var p = powerups[i];
p.update();
// Remove if off screen
if (p.y > 2732 + 100) {
p.destroy();
powerups.splice(i, 1);
continue;
}
// Powerup hits player: remove life
if (p.intersects(player)) {
if (!player.invincible) {
player.hit();
updateLives();
if (player.lives <= 0) {
gameOver = true;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
LK.getSound('powerup').play();
p.destroy();
powerups.splice(i, 1);
continue;
}
}
// Bulletpowerups
for (var i = bulletpowerups.length - 1; i >= 0; i--) {
var bp = bulletpowerups[i];
bp.update();
// Remove if off screen
if (bp.y > 2732 + 100) {
bp.destroy();
bulletpowerups.splice(i, 1);
continue;
}
// Handle collision with player
if (bp.intersects(player)) {
bulletpowerupActive = true;
LK.getSound('powerup').play();
bp.destroy();
bulletpowerups.splice(i, 1);
continue;
}
}
};
// Score display
scoreTxt.setText(LK.getScore());
updateLives(); ===================================================================
--- original.js
+++ change.js
@@ -55,9 +55,9 @@
anchorX: 0.5,
anchorY: 0.5
});
self.radius = bpSprite.width * 0.5;
- self.speed = 16 + Math.random() * 6;
+ self.speed = (16 + Math.random() * 6) * 0.4; // slowed down
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
@@ -87,9 +87,9 @@
anchorX: 0.5,
anchorY: 0.5
});
self.radius = enemySprite.width * 0.5;
- self.speed = 3 + Math.random() * 3; // much slower zombies
+ self.speed = (3 + Math.random() * 3) * 0.4; // much slower zombies, slowed down further
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
@@ -119,9 +119,9 @@
anchorX: 0.5,
anchorY: 0.5
});
self.radius = fastZombieSprite.width * 0.5;
- self.speed = 10 + Math.random() * 4; // much faster than normal zombies
+ self.speed = (10 + Math.random() * 4) * 0.4; // much faster than normal zombies, but slowed down
self.update = function () {
// Move toward player
if (typeof self.lastX === "undefined") self.lastX = self.x;
if (typeof self.lastY === "undefined") self.lastY = self.y;
@@ -210,9 +210,9 @@
anchorX: 0.5,
anchorY: 0.5
});
self.radius = puSprite.width * 0.5;
- self.speed = 10;
+ self.speed = 10 * 0.4; // slowed down
// Add hit counter
self.hits = 0;
self.update = function () {
// Move toward player
soldier pixel. In-Game asset. 2d. High contrast. No shadows
pixel ammo. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
pixel brick wall. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
blood pixel. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
White ghost with red eyes pixel. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
blue ghost pixel. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
White ghost pixel. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat