User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'y')' in this line: 'var angleToZombie = Math.atan2(self.y - torchPos.y, self.x - torchPos.x);' Line Number: 44
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'rotation')' in this line: 'var torchAngle = hero.torchGraphics.rotation;' Line Number: 119
User prompt
Fix Bug: 'TypeError: hero.getChildByName is not a function' in this line: 'var torchAngle = hero.getChildByName('torch').rotation;' Line Number: 119
User prompt
Fix Bug: 'Uncaught TypeError: window.addEventListener is not a function' in this line: 'window.addEventListener('keydown', function (e) {' Line Number: 75
User prompt
Le hero doit ce deplacer uniquement avec le clavier, il possède une torche qu'il est possible d'orienté uniquement avec la souris, les zombies ne sont pas visible car il fait sombre et c'est uniquement si le hero oriente la torche vers un zombie que celu-ci devient visible
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'addEventListener')' in this line: 'document.addEventListener('keydown', function (event) {' Line Number: 63
User prompt
Le personnage doit se deplacer avec le clavier et les fleche il utilise une torche pour voir autour de lui
User prompt
Change les sprites des zombies par un truc plus réalise
Initial prompt
Zombie Night Survival
/**** * Classes ****/ // 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); var torchGraphics = self.createAsset('torch', 'Hero torch', 0.5, 0); torchGraphics.visible = false; self.orientTorch = function (mousePos) { var angle = Math.atan2(mousePos.y - self.y, mousePos.x - self.x); torchGraphics.rotation = angle; torchGraphics.visible = true; }; self.speed = 5; self.shoot = function () { var bullet = new HeroBullet(); bullet.x = self.x; bullet.y = self.y; game.addChild(bullet); bullets.push(bullet); }; self.move = function (direction) { self.x += direction.x * self.speed; self.y += direction.y * self.speed; }; }); // 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 = -10; self.move = function () { self.y += 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.move = function (torchPos, torchAngle) { self.y += self.speed; var angleToZombie = Math.atan2(self.y - torchPos.y, self.x - torchPos.x); var angleDifference = Math.abs(torchAngle - angleToZombie); if (angleDifference < 0.5) { // Assuming torch has a cone of visibility of 0.5 radians self.visible = true; } else { self.visible = false; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Initialize important asset arrays var bullets = []; var zombies = []; var hero; var isGameOver = false; // 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 window.addEventListener('keydown', function (e) { var direction = { x: 0, y: 0 }; 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--) { bullets[i].move(); if (bullets[i].y < 0) { 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.getChildByName('torch').rotation; // 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; } } for (var j = zombies.length - 1; j >= 0; j--) { zombies[j].move(); if (zombies[j].y > 2732) { zombies[j].destroy(); zombies.splice(j, 1); } else if (zombies[j].intersects(hero)) { isGameOver = true; } } game.on('move', function (obj) { var mousePos = obj.event.getLocalPosition(game); hero.orientTorch(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
@@ -1,21 +1,18 @@
/****
* Classes
****/
-var Torch = Container.expand(function () {
- var self = Container.call(this);
- var torchGraphics = self.createAsset('torch', 'Hero torch', 0.5, 0.5);
- self.update = function () {
- // Update the torch position to follow the hero
- self.x = hero.x;
- self.y = hero.y;
- };
-});
-// Create and add the torch to the game
// 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);
+ var torchGraphics = self.createAsset('torch', 'Hero torch', 0.5, 0);
+ torchGraphics.visible = false;
+ self.orientTorch = function (mousePos) {
+ var angle = Math.atan2(mousePos.y - self.y, mousePos.x - self.x);
+ torchGraphics.rotation = angle;
+ torchGraphics.visible = true;
+ };
self.speed = 5;
self.shoot = function () {
var bullet = new HeroBullet();
bullet.x = self.x;
@@ -39,12 +36,20 @@
});
// Define the Zombie class
var Zombie = Container.expand(function () {
var self = Container.call(this);
- var zombieGraphics = self.createAsset('realisticZombie', 'Realistic Zombie enemy', 0.5, 0.5);
+ var zombieGraphics = self.createAsset('zombie', 'Zombie enemy', 0.5, 0.5);
self.speed = 1;
- self.move = function () {
+ self.move = function (torchPos, torchAngle) {
self.y += self.speed;
+ var angleToZombie = Math.atan2(self.y - torchPos.y, self.x - torchPos.x);
+ var angleDifference = Math.abs(torchAngle - angleToZombie);
+ if (angleDifference < 0.5) {
+ // Assuming torch has a cone of visibility of 0.5 radians
+ self.visible = true;
+ } else {
+ self.visible = false;
+ }
};
});
/****
@@ -56,20 +61,9 @@
/****
* Game Code
****/
-// Create and add the torch to the game
// Initialize important asset arrays
-var torch = game.addChild(new Torch());
-// Removed document keydown event listener and replaced with touch controls
-// Touch controls will be implemented in the game's tick event
-// Add keyboard event listener for hero shooting
-// Space bar key code is 32
-document.addEventListener('keydown', function (event) {
- if (event.keyCode === 32) {
- hero.shoot();
- }
-});
var bullets = [];
var zombies = [];
var hero;
var isGameOver = false;
@@ -77,10 +71,34 @@
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
+window.addEventListener('keydown', function (e) {
+ var direction = {
+ x: 0,
+ y: 0
+ };
+ 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 () {
- torch.update();
if (isGameOver) {
LK.showGameOver();
return;
}
@@ -91,18 +109,37 @@
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.getChildByName('torch').rotation;
// 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;
+ }
+ }
+ for (var j = zombies.length - 1; j >= 0; j--) {
zombies[j].move();
if (zombies[j].y > 2732) {
zombies[j].destroy();
zombies.splice(j, 1);
} else if (zombies[j].intersects(hero)) {
isGameOver = true;
}
}
+ game.on('move', function (obj) {
+ var mousePos = obj.event.getLocalPosition(game);
+ hero.orientTorch(mousePos);
+ });
// Spawn zombies
if (LK.ticks % 120 == 0) {
// Spawn a zombie every 2 seconds
var zombie = new Zombie();
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.