User prompt
remove the difficulty select screen
User prompt
delete buttons if a player reachs score 50 get them to do normal mode if in normal mode they reach 50 take them to do hard mode and if they reach 60 in hard mode give a medal and take them to do endless mode (endless modes enemies are in random speed)
User prompt
make their hitbox on them
User prompt
make their hitbox on the writes
User prompt
make their hitbox bigger and make them selectable
User prompt
we cant select them
User prompt
the buttons is not seeable
User prompt
Add a diffucilty Select screen if player selects hard make every enemy fast if they Select normal make every enemy normal speed if they select easy make enemies slow
User prompt
Make strong enemies a little bit raster
User prompt
When player Reachs 50 send 3 shot kill enemy btw make all 2 shot kill enemies slower and add a cheat ıf a player shoot his all ammos to Nowhere activate the cheat that allows you to have infinite healt
User prompt
Make normal enemies a bir raster
User prompt
make normal zomnbies slow too
User prompt
and after reload while 2 shot die zombie is coming dont send any other enemy
User prompt
while reloading delete other enemies and send 1 enemy that dies sith two shots and make it very slow
User prompt
make our ammo ten and when ammo ends make a 2 second delay but while reloading send 1 enemy and make it very slow
User prompt
add some numbers that showes us how many amm we have
User prompt
make 2 hit kill zombies slower
User prompt
make zombies assets like zombies
User prompt
made delay 0.5 sec
User prompt
if player waits 0.5 sec between 2 shots delete next delay
User prompt
allow player make two shots before 1 sec delay
User prompt
make delay 0.2 sec
User prompt
make delay 0.5 seconds
User prompt
when player reachs 30th enemy spawn enemy that dies with 2 shots and add delay between player shots delay is 1 sec
User prompt
delete the start button when a player clicks to the screen start the game
/****
* Classes
****/
// Bullet class: fired by player, moves right, destroys zombies
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletAsset = self.attachAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
bulletAsset.width = 60;
bulletAsset.height = 60;
bulletAsset.tint = 0xffe066; // yellow
self.speed = 32;
self.lastX = self.x;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
// Player class: the hero that can move and shoot
var Player = Container.expand(function () {
var self = Container.call(this);
// Attach player asset, centered
var playerAsset = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 400;
self.y = 1366;
self.speed = 18;
self.lastY = self.y;
self.lastX = self.x;
// Move up/down/left/right
self.moveTo = function (x, y) {
self.x = x;
self.y = y;
};
// Update method (not much needed for player)
self.update = function () {
self.lastY = self.y;
self.lastX = self.x;
};
return self;
});
// Strong Zombie class: moves left, requires 2 hits to die
var StrongZombie = Container.expand(function () {
var self = Container.call(this);
var zombieAsset = self.attachAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
zombieAsset.width = 140;
zombieAsset.height = 140;
zombieAsset.tint = 0xff5722; // orange-red for strong zombie
self.speed = 2 + Math.random() * 2;
self.health = 2; // requires 2 hits
self.lastX = self.x;
self.lastY = self.y;
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
self.x -= self.speed;
};
return self;
});
// Zombie class: moves left, dies on bullet hit
var Zombie = Container.expand(function () {
var self = Container.call(this);
var zombieAsset = self.attachAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
zombieAsset.width = 120;
zombieAsset.height = 120;
zombieAsset.tint = 0x4caf50; // green
self.speed = 4 + Math.random() * 3;
self.lastX = self.x;
self.lastY = self.y;
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
self.x -= self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game constants
var zombieSpawnInterval = 60; // frames between zombies
var bulletCooldown = 30; // frames for 0.5 second delay after 2 shots
var playerMoveRadius = 1000; // how far player can move from left
// Game state
var player;
var zombies = [];
var bullets = [];
var score = 0;
var gameStarted = false;
var lastZombieTick = 0;
var lastBulletTick = 0;
var shotsInBurst = 0; // track shots in current burst
var burstCooldownActive = false; // track if in cooldown period
var lastShotTime = 0; // track timing between shots
var zombiesEscaped = 0;
var enemiesSpawned = 0;
var currentAmmo = 10; // current ammo available
var reloadActive = false; // track if in reload period
var lastReloadTick = 0; // track when reload started
var reloadDuration = 120; // 2 seconds at 60fps
// Add score text to GUI
var scoreText = new Text2('0', {
size: 150,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Add ammo text to GUI
var ammoText = new Text2('Ammo: 10', {
size: 100,
fill: 0xffe066
});
ammoText.anchor.set(1, 0);
LK.gui.topRight.addChild(ammoText);
// Start screen overlay with tap-to-start
var startScreen = new Container();
var startBg = LK.getAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
startBg.width = 900;
startBg.height = 900;
startBg.tint = 0x222244;
startScreen.addChild(startBg);
startBg.x = 0;
startBg.y = 0;
var startText = new Text2('Dodge the green zombies!', {
size: 120,
fill: 0xffffff
});
startText.anchor.set(0.5, 0.5);
startText.x = 0;
startText.y = -100;
startScreen.addChild(startText);
var howToText = new Text2('Tap anywhere to start!', {
size: 80,
fill: 0xffe066
});
howToText.anchor.set(0.5, 0.5);
howToText.x = 0;
howToText.y = 100;
startScreen.addChild(howToText);
// Center overlay
startScreen.x = 2048 / 2;
startScreen.y = 2732 / 2;
// Add to GUI center
LK.gui.center.addChild(startScreen);
startScreen.visible = true;
// Start the game
function startGame() {
// Reset state
for (var i = 0; i < zombies.length; i++) {
zombies[i].destroy();
}
zombies = [];
for (var i = 0; i < bullets.length; i++) {
bullets[i].destroy();
}
bullets = [];
score = 0;
scoreText.setText(score);
zombiesEscaped = 0;
enemiesSpawned = 0;
gameStarted = true;
lastZombieTick = LK.ticks;
lastBulletTick = 0;
shotsInBurst = 0;
burstCooldownActive = false;
lastShotTime = 0;
currentAmmo = 10;
reloadActive = false;
lastReloadTick = 0;
ammoText.setText('Ammo: ' + currentAmmo);
// Hide start screen
if (typeof startScreen !== "undefined") {
startScreen.visible = false;
}
// Create player
if (player) player.destroy();
player = new Player();
player.x = 400;
player.y = 1366;
game.addChild(player);
}
// Handle tap: move player to tap and shoot
game.down = function (x, y, obj) {
if (!gameStarted) {
// Start game on any tap
startGame();
return;
}
// Move player only vertically (x stays the same, y is clamped)
var py = Math.max(120, Math.min(y, 2732 - 120));
player.moveTo(player.x, py);
// Shoot bullet if not reloading and has ammo
if (!reloadActive && currentAmmo > 0) {
var bullet = new Bullet();
bullet.x = player.x + 80;
bullet.y = player.y;
bullets.push(bullet);
game.addChild(bullet);
currentAmmo--;
ammoText.setText('Ammo: ' + currentAmmo);
// Start reload if out of ammo
if (currentAmmo <= 0) {
reloadActive = true;
lastReloadTick = LK.ticks;
ammoText.setText('Reloading...');
}
}
};
// Main update loop
game.update = function () {
if (!gameStarted) return;
// Update player
if (player) player.update();
// Handle reload
if (reloadActive && LK.ticks - lastReloadTick > reloadDuration) {
reloadActive = false;
currentAmmo = 10;
ammoText.setText('Ammo: ' + currentAmmo);
}
// Clear all zombies and spawn special reload zombie at start of reload
if (reloadActive && LK.ticks - lastReloadTick === 1) {
// Clear all existing zombies
for (var k = zombies.length - 1; k >= 0; k--) {
zombies[k].destroy();
zombies.splice(k, 1);
}
// Spawn one special reload zombie that requires 2 hits and moves very slowly
var reloadZombie = new StrongZombie();
reloadZombie.speed = 1; // very slow
reloadZombie.health = 2; // requires 2 shots
reloadZombie.x = 2048 + 80;
reloadZombie.y = 200 + Math.random() * (2732 - 400);
zombies.push(reloadZombie);
game.addChild(reloadZombie);
}
// Spawn zombies (but not during reload when special zombie is active)
if (!reloadActive && LK.ticks - lastZombieTick > zombieSpawnInterval) {
var zombie;
enemiesSpawned++;
// Spawn strong zombies after 30th enemy
if (enemiesSpawned > 30) {
zombie = new StrongZombie();
} else {
zombie = new Zombie();
}
zombie.x = 2048 + 80;
zombie.y = 200 + Math.random() * (2732 - 400);
zombies.push(zombie);
game.addChild(zombie);
lastZombieTick = LK.ticks;
}
// Track escaped zombies
for (var i = zombies.length - 1; i >= 0; i--) {
var zombie = zombies[i];
zombie.update();
// Remove if off screen
if (zombie.x < -120) {
LK.effects.flashScreen(0xff0000, 800); // Flash screen red when zombie escapes
zombie.destroy();
zombies.splice(i, 1);
zombiesEscaped++;
// Game over if 10 zombies escape
if (zombiesEscaped >= 10) {
LK.showGameOver();
gameStarted = false;
return;
}
continue;
}
// Check collision with player
if (player.intersects(zombie)) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
gameStarted = false;
return;
}
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
bullet.update();
// Remove if off screen
if (bullet.x > 2048 + 120) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check collision with zombies
for (var j = zombies.length - 1; j >= 0; j--) {
var zombie = zombies[j];
if (bullet.intersects(zombie)) {
// Remove bullet
bullet.destroy();
bullets.splice(i, 1);
// Handle zombie health
if (zombie.health && zombie.health > 1) {
// Strong zombie takes damage
zombie.health--;
// Flash zombie to show damage
LK.effects.flashObject(zombie, 0xffffff, 200);
} else {
// Kill zombie (normal or strong zombie with 1 health left)
zombie.destroy();
zombies.splice(j, 1);
// Score
score += 1;
scoreText.setText(score);
}
break;
}
}
}
};
// Start in idle state
gameStarted = false;
scoreText.setText('0');
// Show start screen overlay
if (typeof startScreen !== "undefined") {
startScreen.visible = true;
} ===================================================================
--- original.js
+++ change.js
@@ -74,9 +74,9 @@
});
zombieAsset.width = 120;
zombieAsset.height = 120;
zombieAsset.tint = 0x4caf50; // green
- self.speed = 2 + Math.random() * 2;
+ self.speed = 4 + Math.random() * 3;
self.lastX = self.x;
self.lastY = self.y;
self.update = function () {
self.lastX = self.x;