User prompt
add a limited area of movement for enemywave0
User prompt
Fix Bug: 'ReferenceError: goal is not defined' in this line: 'var goalWidth = goal.width;' Line Number: 44
User prompt
Fix Bug: 'ReferenceError: goal is not defined' in this line: 'var goalY = goal.height / 2;' Line Number: 43
User prompt
Fix Bug: 'ReferenceError: goal is not defined' in this line: 'var goalY = goal.height / 2;' Line Number: 43
User prompt
limit the movement of enemywave0 to be inside the goal
Code edit (1 edits merged)
Please save this source code
User prompt
when enemy collides with hero end game
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'addEventListener')' in this line: 'document.addEventListener('keydown', function (event) {' Line Number: 1
User prompt
pause game when pression the letter '''p'' on the keyboard
Code edit (2 edits merged)
Please save this source code
User prompt
the `Game` class should call the `move` function of each enemy instance, passing the hero's `x` and `y` coordinates as arguments.
Code edit (5 edits merged)
Please save this source code
User prompt
add different speed for each enemywave
User prompt
hero bullet should go towards goal
User prompt
Fix Bug: 'ReferenceError: enemyGraphics is not defined' in this line: 'newX = Math.max(0, Math.min(newX, 2048 - enemyGraphics.width));' Line Number: 225
User prompt
add parameters to limit the movement of enemywave0 on game tick
User prompt
confine enemeywave0 to move withing the limits of the goal
User prompt
add moment limits to enemywave0 inside the game
Code edit (1 edits merged)
Please save this source code
User prompt
ad boudnries of movement for enemywave0
Code edit (2 edits merged)
Please save this source code
User prompt
limit the movement area of enemywave1
User prompt
limit the movement of enemywave0 to restrain within the limits of the goal size
User prompt
limit enemywave1 movement within goal
Code edit (6 edits merged)
Please save this source code
var SpatialGrid = Container.expand(function (cellSize) { var self = Container.call(this); self.cellSize = cellSize; self.grid = {}; self._cellKey = function (x, y) { var cellX = Math.floor(x / self.cellSize); var cellY = Math.floor(y / self.cellSize); return cellX + ':' + cellY; }; self.insert = function (object) { var key = self._cellKey(object.x, object.y); if (!self.grid[key]) { self.grid[key] = []; } self.grid[key].push(object); }; self.retrieve = function (x, y) { var key = self._cellKey(x, y); return self.grid[key] || []; }; self.clear = function () { self.grid = {}; }; }); var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.createAsset('hero', 'Hero character', .5, .5); self.move = function () {}; self.shoot = function () {}; }); var EnemyWave0 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 1; var enemyGraphics = self.createAsset('enemyWave0', 'Enemy Wave 0 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 1; var newX = this.x + dx / magnitude * speed; var newY = this.y + dy / magnitude * speed; var goalX = 2048 / 2; var goalY = goal.height / 2; var goalWidth = goal.width; var goalHeight = goal.height; this.x = Math.max(goalX - goalWidth / 2, Math.min(goalX + goalWidth / 2, newX)); this.y = Math.max(goalY - goalHeight / 2, Math.min(goalY + goalHeight / 2, newY)); }; }); var EnemyWave1 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 10; var enemyGraphics = self.createAsset('enemyWave1', 'Enemy Wave 1 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 2.5; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave2 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 3; var enemyGraphics = self.createAsset('enemyWave2', 'Enemy Wave 2 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 2; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave3 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 4; var enemyGraphics = self.createAsset('enemyWave3', 'Enemy Wave 3 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 1.8; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave4 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 20; var enemyGraphics = self.createAsset('enemyWave4', 'Enemy Wave 4 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 3; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var EnemyWave5 = Container.expand(function (enemyCount) { var self = Container.call(this); self.enemyCount = 1; var enemyGraphics = self.createAsset('enemyWave5', 'Enemy Wave 5 character', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); var speed = 10; this.x += dx / magnitude * speed; this.y += dy / magnitude * speed; }; }); var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('heroBullet', 'Hero Bullet', .5, .5); self.move = function (goalX, goalY) { var dx = goalX - this.x; var dy = goalY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 5; this.y += dy / magnitude * 5; }; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.createAsset('enemyBullet', 'Enemy Bullet', .5, .5); self.move = function (heroX, heroY) { var dx = heroX - this.x; var dy = heroY - this.y; var magnitude = Math.sqrt(dx * dx + dy * dy); this.x += dx / magnitude * 2; this.y += dy / magnitude * 2; }; }); var Game = Container.expand(function () { var self = Container.call(this); self.getEnemyCountForWave = function (waveIndex) { switch (waveIndex % 6) { case 0: return 1; case 1: return 10; case 2: return 3; case 3: return 4; case 4: return 20; case 5: return 1; } }; var goal = self.createAsset('goal', 'Goal asset', 0.5, 0.5); goal.width = 900; goal.height = 200; goal.x = 2048 / 2; goal.y = goal.height / 2; self.addChild(goal); var hero = self.addChild(new Hero()); var enemies = []; var waveIndex = 0; var maxWaveCount = 6; var waveTimer = 500; var waveInterval = 500; var heroBullets = []; var enemyBullets = []; hero.x = 2048 / 2; hero.y = 2732 / 2; var bulletTimer = 0; var bulletInterval = 100; LK.on('tick', function () { hero.move(); bulletTimer++; if (bulletTimer >= bulletInterval) { var newBullet = new HeroBullet(); newBullet.x = hero.x; newBullet.y = hero.y; heroBullets.push(newBullet); self.addChild(newBullet); bulletTimer = 0; } if (waveIndex < maxWaveCount) { waveTimer++; } if (waveTimer >= waveInterval && waveIndex < maxWaveCount) { for (var i = 0; i < self.getEnemyCountForWave(waveIndex); i++) { var newEnemy; var enemyCount = self.getEnemyCountForWave(waveIndex); switch (waveIndex % 6) { case 0: newEnemy = new EnemyWave0(enemyCount); newEnemy.x = 1000; newEnemy.y = 0; break; case 1: newEnemy = new EnemyWave1(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 0; break; case 2: newEnemy = new EnemyWave2(enemyCount); newEnemy.x = Math.random() * 2048; newEnemy.y = 2732; break; case 3: newEnemy = new EnemyWave3(enemyCount); newEnemy.x = 2048; newEnemy.y = Math.random() * 2732; break; case 4: newEnemy = new EnemyWave4(enemyCount); newEnemy.x = 0; newEnemy.y = Math.random() * 2732; break; case 5: newEnemy = new EnemyWave5(enemyCount); newEnemy.x = 1000; newEnemy.y = 0; break; } enemies.push(newEnemy); self.addChild(newEnemy); } waveIndex++; waveTimer = 0; } var spatialGrid = new SpatialGrid(100); for (var i = 0; i < enemies.length; i++) { spatialGrid.insert(enemies[i]); } for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var nearbyEnemies = spatialGrid.retrieve(enemy.x, enemy.y); enemy.move(hero.x, hero.y); if (enemy.intersects(hero)) { LK.showGameOver(); return; } for (var j = 0; j < nearbyEnemies.length; j++) { var otherEnemy = nearbyEnemies[j]; if (otherEnemy !== enemy && enemy.intersects(otherEnemy)) { var overlapX = enemy.x - otherEnemy.x; var overlapY = enemy.y - otherEnemy.y; var overlapMagnitude = Math.sqrt(overlapX * overlapX + overlapY * overlapY); if (overlapMagnitude < 50) { enemy.x += overlapX / overlapMagnitude; enemy.y += overlapY / overlapMagnitude; } } } } spatialGrid.clear(); for (var i = 0; i < heroBullets.length; i++) { heroBullets[i].move(goal.x, goal.y); for (var j = 0; j < enemies.length; j++) { if (heroBullets[i].intersects(enemies[j])) { heroBullets[i].destroy(); heroBullets.splice(i, 1); break; } } } for (var i = 0; i < enemyBullets.length; i++) { enemyBullets[i].move(); } }); stage.on('move', function (obj) { var pos = obj.event.getLocalPosition(self); hero.x = pos.x; hero.y = pos.y; }); });
===================================================================
--- original.js
+++ change.js
@@ -36,10 +36,16 @@
var dx = heroX - this.x;
var dy = heroY - this.y;
var magnitude = Math.sqrt(dx * dx + dy * dy);
var speed = 1;
- this.x += dx / magnitude * speed;
- this.y += dy / magnitude * speed;
+ var newX = this.x + dx / magnitude * speed;
+ var newY = this.y + dy / magnitude * speed;
+ var goalX = 2048 / 2;
+ var goalY = goal.height / 2;
+ var goalWidth = goal.width;
+ var goalHeight = goal.height;
+ this.x = Math.max(goalX - goalWidth / 2, Math.min(goalX + goalWidth / 2, newX));
+ this.y = Math.max(goalY - goalHeight / 2, Math.min(goalY + goalHeight / 2, newY));
};
});
var EnemyWave1 = Container.expand(function (enemyCount) {
var self = Container.call(this);
@@ -154,9 +160,9 @@
self.addChild(goal);
var hero = self.addChild(new Hero());
var enemies = [];
var waveIndex = 0;
- var maxWaveCount = 5;
+ var maxWaveCount = 6;
var waveTimer = 500;
var waveInterval = 500;
var heroBullets = [];
var enemyBullets = [];