User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var enemyGraphics = self.createAsset('shootingEnemy', 'Shooting Enemy character', 0.5, 0.5);' Line Number: 51
User prompt
Fix Bug: 'Enemy is not defined' in this line: 'var enemy = Math.random() < 0.5 ? new Enemy() : new ShootingEnemy();' Line Number: 145
User prompt
Fix Bug: 'Enemy is not defined' in this line: 'var enemy = Math.random() < 0.5 ? new Enemy() : new ShootingEnemy();' Line Number: 145
User prompt
Fix Bug: 'ReferenceError: Bullet is not defined' in this line: 'var bullet = new Bullet();' Line Number: 161
User prompt
Fix Bug: 'ReferenceError: Bullet is not defined' in this line: 'var bullet = new Bullet();' Line Number: 161
User prompt
добавь еще один врагов который может стрелять в героя
User prompt
увеличить скорочть предвижения зомби
User prompt
Fix Bug: 'Uncaught LK.Game can only be initialized once' in this line: 'mainMenu = new LK.Game({' Line Number: 91
User prompt
добавь начальное меню
User prompt
зомби умирают когда хп ровно 0
User prompt
добавь хп противнику например 100 единиц, с индикатором. каждый выстрел наносит от 20 до 30 единиц урона, так же есть шанс критического урона
User prompt
увелич скорочть передвижения зомби
User prompt
удали меню игры
User prompt
добавь автоматическую стрельбу
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'button')' in this line: 'if (obj.event.data.button === 0) {' Line Number: 244
User prompt
герой стреляет тольо по нажатию левой кнопки мыши
User prompt
добавь паузу на кнопку esc
User prompt
добавь меню игры
User prompt
зомби появляются в разное время
User prompt
зомби появляются постепенно
User prompt
зомби появлются 10 штук и остальное количество постепенно +1 враг с интервалом до 1 секунды
User prompt
зомби появлются 10 штук и остальное количество постепенно +1 враг в 0.3 секунды
User prompt
зомби появляются равномерно а не одновременно
User prompt
ограничь максимальную скорость передвижения героя
User prompt
добавь счетчик волн зомби
===================================================================
--- original.js
+++ change.js
@@ -39,31 +39,17 @@
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.createAsset('enemy', 'Enemy character', 0.5, 0.5);
- self.health = 100;
- self.healthBar = new Container();
- var healthBarBackground = self.healthBar.createAsset('healthBarBackground', 'Health Bar Background', 0, 0.5);
- var healthBarForeground = self.healthBar.createAsset('healthBarForeground', 'Health Bar Foreground', 0, 0.5);
- healthBarBackground.width = 100;
- healthBarForeground.width = self.health;
- self.healthBar.y = -20;
- self.addChild(self.healthBar);
- self.speed = 4;
+ self.speed = 2;
self.move = function () {
+ // Movement towards the hero's position
var dx = hero.x - self.x;
var dy = hero.y - self.y;
var angle = Math.atan2(dy, dx);
self.x += Math.cos(angle) * self.speed;
self.y += Math.sin(angle) * self.speed;
};
- self.takeDamage = function (damage) {
- self.health -= damage;
- healthBarForeground.width = self.health;
- if (self.health === 0) {
- self.destroy();
- }
- };
});
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
@@ -72,26 +58,53 @@
self.move = function () {
self.y -= self.speed;
};
});
+var PlayButton = Container.expand(function () {
+ var self = Container.call(this);
+ var buttonGraphics = self.createAsset('playButton', 'Play button graphic', 0.5, 0.5);
+ self.x = 2048 / 2;
+ self.y = 2732 / 2;
+});
/****
* Initialize Game
****/
var game = new LK.Game({
- backgroundAsset: 'swamp',
- // Add swamp background asset
- backgroundColor: 0x000000 // Init game with black background
+ backgroundColor: 0x000000
});
/****
* Game Code
****/
-// Initialize hero, lives display, and score display
-var hero = game.addChild(new Hero());
-var livesDisplay = game.addChild(new LivesDisplay());
-var scoreDisplay = game.addChild(new ScoreDisplay());
-var score = 0; // Global score variable
+var mainMenu;
+var game;
+function startGame() {
+ game = new LK.Game({
+ backgroundAsset: 'swamp',
+ backgroundColor: 0x000000
+ });
+ initializeGame();
+}
+function showMainMenu() {
+ mainMenu = new LK.Game({
+ backgroundColor: 0x000000
+ });
+ var playButton = mainMenu.addChild(new PlayButton());
+ playButton.on('down', function () {
+ mainMenu.destroy();
+ startGame();
+ });
+}
+showMainMenu();
+function initializeGame() {
+ // Initialize hero, lives display, and score display
+ var hero = game.addChild(new Hero());
+ var livesDisplay = game.addChild(new LivesDisplay());
+ var scoreDisplay = game.addChild(new ScoreDisplay());
+ var score = 0; // Global score variable
+ // Rest of game initialization code...
+}
// Update the lives display when hero's lives change
Hero.prototype.updateLives = function () {
livesDisplay.updateLives(this.lives);
@@ -105,9 +118,8 @@
var spawnRate = 180; // Increased enemy spawn rate (ticks) to decrease intensity
var waveCount = 0; // Number of waves that have passed
var enemiesPerWave = 10; // Base number of enemies per wave
var enemySpeedIncrease = 0.01; // Speed increase per wave
-var maxSpawnInterval = 1000; // Maximum time interval between enemy spawns in milliseconds
var waveCounterDisplay = new Text2('Wave: 1', {
size: 100,
fill: "#ffffff"
});
@@ -119,37 +131,35 @@
// Function to spawn enemies
function spawnEnemy() {
waveCount++;
waveCounterDisplay.setText('Wave: ' + waveCount);
- var enemiesToSpawn = enemiesPerWave + waveCount - 1; // Start with 10 enemies and increment by 1 with each wave
- var enemiesToSpawn = enemiesPerWave + waveCount - 1; // Start with 10 enemies and increment by 1 with each wave
- var totalSpawned = 0;
- function spawnOneEnemy() {
- var angle = Math.random() * Math.PI * 2; // Random angle
- var radius = 1200; // Spawn circle radius
- var enemy = new Enemy();
- enemy.speed += enemy.speed * waveCount * enemySpeedIncrease; // Increase speed by 1% per wave
- enemy.x = 1024 + radius * Math.cos(angle);
- enemy.y = 1366 + radius * Math.sin(angle);
- enemies.push(enemy);
- game.addChild(enemy);
- totalSpawned++;
- if (totalSpawned < enemiesToSpawn) {
- var randomSpawnDelay = Math.random() * maxSpawnInterval;
- LK.setTimeout(spawnOneEnemy, randomSpawnDelay);
- } else {
- waveCount++;
- waveCounterDisplay.setText('Wave: ' + waveCount);
+ var initialEnemies = 10;
+ var additionalEnemies = waveCount - 1; // Additional enemies spawned gradually
+ var enemiesToSpawn = initialEnemies + additionalEnemies;
+ var spawnInterval = 300; // Spawn an enemy every 0.3 seconds
+ var spawnEnemyAtIndex = function spawnEnemyAtIndex(index) {
+ if (index < enemiesToSpawn) {
+ var angle = Math.random() * Math.PI * 2; // Random angle
+ var radius = 1200; // Spawn circle radius
+ var enemy = new Enemy();
+ enemy.speed += enemy.speed * waveCount * enemySpeedIncrease; // Increase speed by 1% per wave
+ enemy.x = 1024 + radius * Math.cos(angle);
+ enemy.y = 1366 + radius * Math.sin(angle);
+ enemies.push(enemy);
+ game.addChild(enemy);
+ LK.setTimeout(function () {
+ spawnEnemyAtIndex(index + 1);
+ }, spawnInterval);
}
- }
- spawnOneEnemy();
+ };
+ spawnEnemyAtIndex(0);
}
// Function to fire a bullet
function fireBullet() {
if (enemies.length === 0) {
return;
- }
+ } // No enemies to shoot at
var nearestEnemy = enemies.reduce(function (closest, enemy) {
var closestDist = Math.sqrt(Math.pow(closest.x - hero.x, 2) + Math.pow(closest.y - hero.y, 2));
var enemyDist = Math.sqrt(Math.pow(enemy.x - hero.x, 2) + Math.pow(enemy.y - hero.y, 2));
return enemyDist < closestDist ? enemy : closest;
@@ -157,20 +167,11 @@
var angleToNearestEnemy = Math.atan2(nearestEnemy.y - hero.y, nearestEnemy.x - hero.x);
var bullet = new Bullet();
bullet.x = hero.x;
bullet.y = hero.y;
- bullet.damage = Math.floor(Math.random() * (30 - 20 + 1)) + 20; // Random damage between 20 and 30
- if (Math.random() < 0.1) {
- // 10% chance for critical hit
- bullet.damage *= 2;
- }
bullet.move = function () {
this.x += Math.cos(angleToNearestEnemy) * this.speed;
this.y += Math.sin(angleToNearestEnemy) * this.speed;
- if (this.intersects(nearestEnemy)) {
- nearestEnemy.takeDamage(this.damage);
- this.destroy();
- }
};
bullets.push(bullet);
game.addChild(bullet);
}
hero with a gun, shoots forward, top view, topdown. Single Game Texture. In-Game asset. 2d.TopDown. Blank background. High contrast. No shadows.
metal ball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A fireball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
heart. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
zombie kamikaze, vertical top view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
opponent for the game, zombie kamikaze, vertical top view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.