User prompt
bulletpowerup 5 mermili olsun
User prompt
bulletpowerupın güç zamanı sınırsız olsun
User prompt
Bulletpowerup 3 mermili olsun
User prompt
bulletpowerup %1 ihtimalle oluşsun
User prompt
bulletpowerup her score aralığında çıksın
User prompt
düşman yerine bulletpowerup çıksın
User prompt
bulletpowerup her score aralığında %100 çıksın
User prompt
bulletpowerup mermiyi iki tane atmayı sağlasın
User prompt
bulletpowerup mermiyi iki yöne doğru ikili atsın
User prompt
yukarıdan düşen Bulletpowerup ekle
User prompt
Powerup score 100’den sonra oluşsun
User prompt
Fastzombieler 25 scoredan sonra oluşsun
User prompt
Fastzombie ekle
User prompt
bir düşman ölünce öldüğü noktaya blood assetini bıraksın
User prompt
Spawn blood asset at enemy position when enemy is killed by colliding with player
User prompt
zombi ölünce yerde blood asseti bıraksın
User prompt
powerup vurulunca 3 puan versin
User prompt
Powerup 10 puan bersin
User prompt
poweruplar 50 scoredan sonra oluşsun
User prompt
her 50 puanda zombi miktarı %10 artsın
User prompt
zombiler az daha çok gelsin
User prompt
powerup obstacleye değerse 1 can götürsün
User prompt
powerup 5 vuruşta gitsin
User prompt
powerup %5 ihtimalle gelsin o da nesneye çarpınca can götürsün
User prompt
her zombi öldürünce 1 puan gelsin
/**** * 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; self.update = function () { self.y += self.speed; }; 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; // much slower zombies self.update = function () { self.y += self.speed; // No horizontal movement, no bouncing, no direction change }; 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; // much faster than normal zombies self.update = function () { self.y += self.speed; }; 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; // Add hit counter self.hits = 0; self.update = function () { self.y += self.speed; }; // 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 ****/ // Game state variables // Player character: blue box // Enemy: red ellipse // Obstacle: orange box // Bullet: yellow box // Powerup: green ellipse // Sound effects // Music 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; // Goal object at the bottom var goalObj = null; // 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 - 350; game.addChild(player); // Create goal object at the bottom center goalObj = LK.getAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 100, scaleX: 1.2, scaleY: 1.2 }); game.addChild(goalObj); // 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(); e.x = 200 + Math.random() * (2048 - 400); e.y = -100; 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(); fz.x = 200 + Math.random() * (2048 - 400); fz.y = -100; 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(); p.x = 200 + Math.random() * (2048 - 400); p.y = -100; 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(); bp.x = 200 + Math.random() * (2048 - 400); bp.y = -100; 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(); // Enemy reaches goal object if (goalObj && e.intersects(goalObj)) { 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); continue; } 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; } // Powerup hits obstacle: remove life if (p.intersects(goalObj)) { 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
@@ -180,16 +180,16 @@
/****
* Game Code
****/
-// Music
-// Sound effects
-// Powerup: green ellipse
-// Bullet: yellow box
-// Obstacle: orange box
-// Enemy: red ellipse
-// Player character: blue box
// Game state variables
+// Player character: blue box
+// Enemy: red ellipse
+// Obstacle: orange box
+// Bullet: yellow box
+// Powerup: green ellipse
+// Sound effects
+// Music
var player;
var bullets = [];
var enemies = [];
// Removed obstacles array as obstacles are deleted from the game
@@ -278,12 +278,12 @@
game.on('down', function (x, y, obj) {
if (x < 100 && y < 100) return;
if (player && !gameOver && player.shootCooldown <= 0) {
if (bulletpowerupActive) {
- // Shoot three bullets with slight angle spread
+ // 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 = -1; i <= 1; i++) {
+ 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
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 zombie character. In-Game asset. 2d. High contrast. No shadows
pixel brick wall. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Red zombie pixel. 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
pixel shotgun. In-Game asset. 2d. High contrast. No shadows