User prompt
oriente le robot vers ses cibles
User prompt
Augmente la difficulté au fur à mesure des kills
User prompt
Le robot meurt si un zombie le touche
User prompt
Les zombies sont attiré en priorité par le robot
User prompt
Le robot tir seulement une fois toutes les 2 secondes
User prompt
Le robot soit s'arreté au milieu de la map
User prompt
Le robot doit lui aussi tirée des herobullet et visé les zombies
User prompt
Créer un petit robot qui au bout d'un score de 5 arrive en renfort par le bas de la map et ce deplace vers le haut de la map jusqu'a ce qu'il meurt tout en tirant sur les zombies avec une balle par secondes
User prompt
Créer un score du nombre de tué en haut à droite
User prompt
Fix Bug: 'ReferenceError: scoreDisplay is not defined' in this line: 'scoreDisplay.updateScore(LK.getScore());' Line Number: 290
User prompt
Fix Bug: 'ReferenceError: scoreDisplay is not defined' in this line: 'scoreDisplay.updateScore(LK.getScore());' Line Number: 289
User prompt
Fix Bug: 'ReferenceError: gameTimerDisplay is not defined' in this line: 'gameTimerDisplay.updateTimer();' Line Number: 287
User prompt
Fix Bug: 'ReferenceError: gameTimerDisplay is not defined' in this line: 'gameTimerDisplay.updateTimer();' Line Number: 287
User prompt
Affiche le score en haut à droite et la durée de la partie
Code edit (3 edits merged)
Please save this source code
User prompt
Fait en sorte que la balle sort reelement à la sortie du canon du hero
User prompt
Fait en sorte que la balle sort reelement à la sortie du canon du hero
Code edit (1 edits merged)
Please save this source code
User prompt
Reduit le MuzzleFlash à 0.4s
Code edit (1 edits merged)
Please save this source code
User prompt
Reduit le MuzzleFlash à 0.3secondes
User prompt
Oriente le MuzzleFlash dans le meme sens que la torche
User prompt
reduit l'alpha sur le MuzzleFlash
User prompt
Met le MuzzleFlash derriere le hero
User prompt
met le MuzzleFlash en arriere plan
/**** * Classes ****/ var MuzzleFlash = Container.expand(function () { var self = Container.call(this); var flashGraphics = self.createAsset('muzzleFlash', 'Muzzle flash', 0.5, 0.5); flashGraphics.alpha = 0.5; self.zIndex = -5; }); var BloodSplatter = Container.expand(function (type) { var self = Container.call(this); self.createBloodSplatter = function (type) { var assetName; switch (type) { case 1: assetName = 'bloodSplatter1'; break; case 2: assetName = 'bloodSplatter2'; break; case 3: assetName = 'bloodSplatter3'; break; default: assetName = 'bloodSplatter1'; } return self.createAsset(assetName, 'Blood splatter', 0.5, 0.5); }; var bloodGraphics = self.createBloodSplatter(type); bloodGraphics.rotation = Math.random() * Math.PI * 2; self.visible = false; }); var ScoreDisplay = Container.expand(function () { var self = Container.call(this); self.scoreText = new Text2('Score: 0', { size: 100, fill: "#ffffff" }); self.scoreText.anchor.set(1, 0); self.updateScore = function (score) { self.scoreText.setText('Score: ' + score); }; LK.gui.topRight.addChild(self.scoreText); }); var AmmoDisplay = Container.expand(function () { var self = Container.call(this); self.ammoText = new Text2('Ammo: 20', { size: 100, fill: "#ffffff" }); self.ammoText.anchor.set(1, 1); self.updateAmmo = function (ammoCount) { self.ammoText.setText('Ammo: ' + ammoCount); }; LK.gui.bottomRight.addChild(self.ammoText); }); var GameTimerDisplay = Container.expand(function () { var self = Container.call(this); self.startTime = LK.ticks; self.timerText = new Text2('Time: 0s', { size: 100, fill: "#ffffff" }); self.timerText.anchor.set(1, 0); self.updateTimer = function () { var currentTime = Math.floor((LK.ticks - self.startTime) / 60); self.timerText.setText('Time: ' + currentTime + 's'); }; LK.gui.topRight.addChild(self.timerText); self.timerText.y = 120; // Offset by the height of the score display }); // Define the Hero class var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.createAsset('hero', 'Hero character', 0.5, 0.5); self.ammo = 20; self.reloadTime = null; self.torchGraphics = LK.getAsset('torch', 'Hero torch', 0.5, 0); self.torchGraphics.visible = false; self.orientTorch = function (mousePos) { var angle = Math.atan2(mousePos.y - self.y, mousePos.x - self.x); self.torchGraphics.rotation = angle; self.torchGraphics.visible = true; heroGraphics.rotation = angle; }; self.speed = 5; self.move = function (direction) { self.x += direction.x * self.speed; self.y += direction.y * self.speed; }; self.shoot = function (mousePos) { if (self.ammo > 0 && (!self.lastShotTime || LK.ticks - self.lastShotTime >= 10) && (!self.reloadTime || LK.ticks - self.reloadTime >= 180)) { var bullet = new HeroBullet(); bullet.x = self.x + 5; bullet.y = self.y - 80; var angle = Math.atan2(mousePos.y - self.y, mousePos.x - self.x); bullet.rotation = angle; bullets.push(bullet); game.addChild(bullet); self.lastShotTime = LK.ticks; self.ammo--; ammoDisplay.updateAmmo(self.ammo); var muzzleFlash = new MuzzleFlash(); var flashOffsetX = 80 * Math.cos(angle); // Offset for muzzle flash to align with the barrel var flashOffsetY = 80 * Math.sin(angle); // Offset for muzzle flash to align with the barrel muzzleFlash.x = self.x + flashOffsetX; muzzleFlash.y = self.y + flashOffsetY; muzzleFlash.rotation = angle; // Orient MuzzleFlash in the same direction as the torch muzzleFlash.zIndex = 1; // Ensure MuzzleFlash appears above other game elements muzzleFlash.visible = true; // Make MuzzleFlash visible when shooting game.addChildAt(muzzleFlash, 0); LK.setTimeout(function () { muzzleFlash.destroy(); }, 400); } else if (self.ammo === 0 && (!self.reloadTime || LK.ticks - self.reloadTime >= 180)) { self.ammo = 20; ammoDisplay.updateAmmo(self.ammo); self.reloadTime = LK.ticks; } }; }); // Define the TorchLight class var TorchLight = Container.expand(function () { var self = Container.call(this); var lightGraphics = self.createAsset('torchLight', 'Torch light zone', 0.5, 1); self.updatePosition = function (heroPos, torchAngle) { self.x = heroPos.x; self.y = heroPos.y; self.rotation = torchAngle + Math.PI / 2; // Adjust the size and shape of the light zone // Adjust the size and shape of the light zone to simulate a cone of light lightGraphics.width = 600; // Width of the light cone lightGraphics.height = 8000; // Length of the light cone // Set the alpha to a lower value to simulate light lightGraphics.alpha = 0.3; // Set the pivot to the bottom center of the light cone lightGraphics.pivot.x = 0; lightGraphics.pivot.y = 0; }; }); // Define the HeroBullet class var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('heroBullet', 'Hero bullet', 0.5, 1); self.speed = 50; self.move = function () { self.x += Math.cos(self.rotation) * self.speed; self.y += Math.sin(self.rotation) * self.speed; }; }); // Define the Zombie class var Zombie = Container.expand(function () { var self = Container.call(this); var zombieGraphics = self.createAsset('zombie', 'Zombie enemy', 0.5, 0.5); self.speed = 1; self.health = 50; self.healthBar = self.createAsset('healthBar', 'Zombie health bar', 0.5, 0); self.healthBar.width = self.health * 7; self.healthBar.height = 15; self.healthBar.y = -110; self.move = function (heroPos, torchAngle) { var angleToHero = Math.atan2(heroPos.y - self.y, heroPos.x - self.x); self.x += Math.cos(angleToHero) * self.speed; self.y += Math.sin(angleToHero) * self.speed; if (heroPos) { var angleToZombie = Math.atan2(self.y - heroPos.y, self.x - heroPos.x); var angleDifference = Math.abs(torchAngle - angleToZombie); if (angleDifference < 0.12) { // Assuming torch has a cone of visibility of 0.5 radians self.visible = true; } else { self.visible = false; } } self.healthBar.width = self.health * 10; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Initialize important asset arrays var torchLight = game.addChild(new TorchLight()); var bullets = []; var zombies = []; var hero; var isGameOver = false; var ammoDisplay = new AmmoDisplay(); // Create the game timer display var gameTimerDisplay = new GameTimerDisplay(); // Create the hero hero = game.addChild(new Hero()); hero.x = 2048 / 2; hero.y = 2732 - 100; // Position hero near the bottom of the screen // Game logic and event handlers LK.on('keydown', function (obj) { var direction = { x: 0, y: 0 }; var e = obj.event; switch (e.keyCode) { case 37: // left arrow direction.x = -1; break; case 39: // right arrow direction.x = 1; break; case 38: // up arrow direction.y = -1; break; case 40: // down arrow direction.y = 1; break; } hero.move(direction); }); LK.on('tick', function () { if (isGameOver) { LK.showGameOver(); return; } // Move bullets and check for off-screen for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i]) { bullets[i].move(); for (var j = zombies.length - 1; j >= 0; j--) { if (bullets[i] && bullets[i].intersects(zombies[j])) { bullets[i].destroy(); bullets.splice(i, 1); zombies[j].health -= Math.floor(Math.random() * (20 + 1)) + 20; if (zombies[j].health <= 0) { var bloodSplatterType = Math.floor(Math.random() * 3) + 1; // Randomly choose a blood splatter type between 1 and 3 var bloodSplatter = new BloodSplatter(bloodSplatterType); bloodSplatter.x = zombies[j].x; bloodSplatter.y = zombies[j].y; game.addChildAt(bloodSplatter, 0); zombies[j].destroy(); zombies.splice(j, 1); } break; } } if (bullets[i] && (bullets[i].x < 0 || bullets[i].x > 2048 || bullets[i].y < 0 || bullets[i].y > 2732)) { bullets[i].destroy(); bullets.splice(i, 1); } } } // Handle torch orientation and make zombies visible if illuminated var torchPos = { x: hero.x, y: hero.y }; var torchAngle = hero.torchGraphics.rotation; // Update torch light position var heroPos = { x: hero.x, y: hero.y }; var torchAngle = hero.torchGraphics.rotation; torchLight.updatePosition(heroPos, torchAngle); // Update visibility of blood splatters based on torch light for (var i = game.children.length - 1; i >= 0; i--) { var obj = game.children[i]; if (obj instanceof BloodSplatter) { var distanceToTorch = Math.sqrt(Math.pow(obj.x - hero.x, 2) + Math.pow(obj.y - hero.y, 2)); var angleToTorch = Math.atan2(obj.y - hero.y, obj.x - hero.x) - torchAngle; // Check if within torch light angle and range if (distanceToTorch <= 8000 && Math.abs(angleToTorch) <= 0.12) { obj.visible = true; } else { obj.visible = false; } } } // Update score and game timer display gameTimerDisplay.updateTimer(); scoreDisplay.updateScore(LK.getScore()); // Move zombies and check for collision with hero for (var j = zombies.length - 1; j >= 0; j--) { zombies[j].move(torchPos, torchAngle); if (zombies[j].y > 2732) { zombies[j].destroy(); zombies.splice(j, 1); } else if (zombies[j].intersects(hero) && zombies[j].visible) { isGameOver = true; } } game.on('move', function (obj) { var mousePos = obj.event.getLocalPosition(game); hero.orientTorch(mousePos); }); game.on('down', function (obj) { var mousePos = obj.event.getLocalPosition(game); hero.shoot(mousePos); }); // Spawn zombies if (LK.ticks % 120 == 0) { // Spawn a zombie every 2 seconds var zombie = new Zombie(); zombie.x = Math.random() * 2048; zombie.y = -50; // Start off-screen zombies.push(zombie); game.addChild(zombie); } });
===================================================================
--- original.js
+++ change.js
@@ -192,8 +192,9 @@
var zombies = [];
var hero;
var isGameOver = false;
var ammoDisplay = new AmmoDisplay();
+// Create the game timer display
var gameTimerDisplay = new GameTimerDisplay();
// Create the hero
hero = game.addChild(new Hero());
hero.x = 2048 / 2;
Un zombie en 2D vue du dessus. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Bullet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
top down shooter blood. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
top down shooter blood texture. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
top down character with gun de dos. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. topdown shooter
top down robot with gun. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. topdown shooter
2d top down zombie boss. Single Game Texture. In-Game asset. 2d. no background. High contrast. No shadows.
weapon reload 2d icon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Dark background horror. 2d. Blank background. High contrast. No shadows.
replace robot by wall
barbelé militaire 2d
Arrière plan sombre d'horreur avec un angle vu depuis le haut. 2d. Blank background. High contrast. No shadows.